import sys import os # Get the absolute path of the directory where this script is located current_dir = os.path.dirname(os.path.abspath(__file__)) # If the script is in /src, add that directory to sys.path so it can find flc_core.py if current_dir not in sys.path: sys.path.insert(0, current_dir) # Now you can safely import your module from flc_core import flc_encode_file, flc_decode_file, cosine_similarity_bytes import streamlit as st import os import tempfile import numpy as np from PIL import Image from flc_core import flc_encode_file, flc_decode_file, cosine_similarity_bytes st.set_page_config(page_title="FLC v1.3 | How it Works", layout="wide") # Styling for a "Scientific Laboratory" look st.markdown(""" """, unsafe_allow_html=True) st.title("๐ŸŒ€ Fibonacci Lattice Compression (FLC)") st.markdown(""" **FLC v1.3** is a bio-inspired data compression architecture. Unlike standard ZIP or JPEG formats, FLC uses the **Golden Ratio ($\Phi$)** to decide which parts of your data are "essential" and which are "noise." """) # --- PILLAR 1: THE EXPLAINER --- with st.expander("๐Ÿ“– Step-by-Step: How does the 'Secret Sauce' work?"): col1, col2, col3 = st.columns(3) with col1: st.markdown("### 1. Spectral Projection") st.write(""" We treat your data like a sound wave. Using a **DCT (Discrete Cosine Transform)**, we project the bits into frequency space. * **Low Frequencies:** The "skeleton" of your data. * **High Frequencies:** The "dust" and fine details. """) with col2: st.markdown("### 2. The Golden Filter") st.write(""" Instead of treating all frequencies equally, FLC uses **Fibonacci Bands**. We compress the 'dust' using steps based on the **Golden Ratio ($\Phi \approx 1.618$)**. As the frequency increases, the compression gets exponentially more aggressive. """) with col3: with st.container(): st.markdown("### 3. Fibonacci Coding") st.write(""" Standard computers use 8-bit bytes. FLC uses **Fibonacci Binary**. It's a "universal code" that uses the sum of Fibonacci numbers to represent values, making the compressed stream incredibly resilient and dense. """) st.divider() # --- PILLAR 2: THE INTERACTIVE DEMO --- st.header("๐Ÿงช Test the Horizon") with st.sidebar: st.header("๐ŸŽ›๏ธ Architecture Params") st.info("Adjusting these changes how the 'Secret Sauce' math is applied.") quality_map = { "High Compression (Lossy)": {"bands": 6, "step": 0.08, "desc": "Aggressive $\Phi$-scaling."}, "Balanced": {"bands": 12, "step": 0.005, "desc": "The Golden Mean of fidelity."}, "Near-Lossless": {"bands": 24, "step": 0.0001, "desc": "Full spectral recovery."} } tier = st.radio("Fidelity Tier", list(quality_map.keys()), index=1) st.caption(quality_map[tier]["desc"]) st.subheader("Visual Overlays") show_spiral = st.checkbox("Fibonacci Spiral Outlines", value=True) show_ring = st.checkbox("Event Horizon Ring", value=True) uploaded_file = st.file_uploader("Upload a file (Image, Text, or Binary)", type=["bin", "png", "jpg", "txt"]) if uploaded_file is not None: with tempfile.TemporaryDirectory() as tmpdir: in_path = os.path.join(tmpdir, "input.bin") out_flc = os.path.join(tmpdir, "output.flc") out_gif = os.path.join(tmpdir, "unzip.gif") recovered_path = os.path.join(tmpdir, "recovered.bin") with open(in_path, "wb") as f: f.write(uploaded_file.getbuffer()) if st.button("RUN HOLOGRAPHIC RECONSTRUCTION"): with st.status("Initializing Fibonacci Manifolds...", expanded=True) as status: st.write("Transforming data to Frequency Space...") enc = flc_encode_file( in_path, out_flc, unzip_gif=out_gif, n_bands=quality_map[tier]["bands"], base_step=quality_map[tier]["step"] ) st.write("Applying $\Phi$-scaled quantization...") dec = flc_decode_file(out_flc, recovered_path) st.write("Generating Holographic Unzip visualization...") status.update(label="Reconstruction Complete!", state="complete", expanded=False) # Results Section st.subheader("๐Ÿ“Š Compression Performance") c1, c2, c3, c4 = st.columns(4) c1.metric("Original Size", f"{enc['n_bytes']} B") c2.metric("Compressed Size", f"{enc['payload_len']} B") c3.metric("Ratio", f"{enc['ratio']:.2%}") # Calculate Similarity orig_data = open(in_path, "rb").read() reco_data = open(recovered_path, "rb").read() fidelity = cosine_similarity_bytes(orig_data, reco_data) c4.metric("Data Fidelity", f"{fidelity*100:.2f}%") st.divider() # Visualization st.header("๐ŸŽž๏ธ The Unzip Sequence") st.markdown(""" This animation shows the **Progressive Reconstruction**. The 'Hologram' on the left shows the frequency data being added band-by-band. The 'Spiral' on the right shows the bits filling the Fibonacci tiles in real-time. """) if os.path.exists(out_gif): st.image(out_gif, use_container_width=True) st.info("๐Ÿ’ก Notice how the general shape appears first, and the fine details (noise) appear last. This is the hallmark of Spectral Compression.") with open(out_flc, "rb") as f: st.download_button("๐Ÿ“ฅ Download Encoded .FLC File", f, file_name="demo.flc") else: st.warning("Please upload a file to visualize the Fibonacci transformation.")