How It Works
From video upload to quantitative fluorescence data — here's what happens under the hood.
Your video file is sent to the local server via the browser.
Nothing leaves your machine — the file is saved to a temporary directory for processing.
Browser
→
HTTP POST
→
Flask Server
→
/tmp/video.*
Supported Formats
MP4, MOV, AVI, MKV, WebM, FLV, WMV, MPG, MPEG, TS, 3GP, M4A
Max Size
2 GB per file. Processed entirely in memory on your machine.
FFmpeg splits the video into individual PNG frames at the configured interval. Duration is also read via
ffprobe.
video file
→
ffmpeg -vf fps=N
→
frame_00001.png
frame_00002.png
...
Interval
Configurable from 0.25s to 30s. Default: 1 frame/second. Lower = more data points, slower processing.
Region Crop
Each frame is cropped to the region you selected in the preview. Only the cropped area is sent to OCR.
Each cropped frame is processed by the OCR engine to extract the displayed number. You can choose which engine to use from the settings panel before starting the analysis.
Apple Vision
Native macOS framework at accurate recognition level. Handles colored text, low contrast, and variable backgrounds natively. macOS only — not available in Docker or Linux.
EasyOCR
PyTorch-based deep learning OCR. Runs on CPU with high accuracy across fonts, sizes, and backgrounds. Available on all platforms including Docker.
Dual Mode
On macOS, select Dual to run both engines on every frame. The dashboard shows the concordance rate — the percentage of frames where both engines agree.
Docker
In Docker, only EasyOCR is available. Apple Vision and Dual mode appear greyed out with "not compatible" in the engine selector.
cropped frame
→
Engine Selector
→
detected number
After OCR, a two-pass algorithm cleans the data to produce smoother, more reliable curves.
Pass 1 — Gap Filling
Missing values (frames with no detection) are filled by linear interpolation from the nearest valid neighbors within a 2-frame window.
Example: if frame 5 = 29, frame 6 = missing, frame 7 = 31, then frame 6 is filled with 30.
Pass 2 — Outlier Correction
Each value is compared against the median of its ±2 neighbors. If it deviates by more than 3× the local MAD (median absolute deviation), it is replaced with the median.
Example: neighbors are [29, 30, 31, 30] but this frame says 85 → corrected to 30.
Raw OCR
→
Fill Gaps
→
Fix Outliers
→
Clean Data
The cleaned dataset is sent back to the browser and rendered into an interactive dashboard with
Chart.js.
Time Evolution
Full emission curve with zoom, pan, and time range selection. Customizable presets (first 30s, last 30s, etc.).
Moving Average
Smoothed trend line with adjustable window (3s–30s). Shows the overall fluorescence trajectory.
Delta Analysis
Frame-to-frame change rate. Positive = wash-in (intensity rising), negative = wash-out (intensity falling).
Statistics
Min, max, average, total change, detection rate. All computed from the post-processed clean dataset.
Download your results in three formats for further analysis, publication, or archival.
CSV
Tabular data for Excel, R, or Python pandas.
JSON
Structured data for programmatic processing.
PDF Report
Styled report with dashboard and charts.
Privacy & Data
ParaGlow is designed with privacy first — your data never leaves your machine.
🔒
No Data Stored
Videos and frames are processed in a temporary directory that is automatically deleted as soon as the analysis completes. Nothing is saved to disk permanently.
🏠
Fully Local
All processing — video decoding, OCR, and data analysis — happens entirely on your machine. No cloud services, no external API calls, no telemetry.
Customization Options
Fine-tune the analysis to match your video setup and accuracy needs.
λ
OCR Engine
Choose from Apple Vision, EasyOCR, or Dual mode in the settings panel. Unavailable engines appear greyed out. Docker uses EasyOCR only.
⏲
Frame Interval
Set how often frames are captured — from 0.25s (4 fps, very detailed) to 30s (sparse sampling). Default is 1 frame per second.
▢
Region Selection
Draw a rectangle on the first frame to tell OCR exactly where to look. Tighter crop = faster processing and fewer false readings.
ƒ
Moving Average Window
Adjust the smoothing window from 3s to 30s in the results dashboard. Larger windows show cleaner trends; smaller windows preserve rapid changes.