Plot-lapse
A photo to graph converter
An app that turns meter photos and timelapse footage into CSV files and actionable graphs showing changes over time. Built for Cavlon using computer vision models, with measurements and views tailored to each test.
The problem
Cavlon needed a way to turn timelapse footage of meters into files and graphs showing changes over time, without typing hundreds of readings by hand. Battery tests were one use case: tracking voltage, current, and amp-hours throughout a discharge.
What changed
The saved battery-test example shown here contains 308 photos, with its readings available as CSV and graphs. The app supports different meters and test subjects, with measurements and views chosen for each test. This discharge is one example: tracking voltage, current, capacity, power, and energy over time.
- My work
- Design and build, paid
- When
- October 2026
- Built with
- Python, Vision models via OpenRouter, ffmpeg, Railway
The result
Screenshots from the same saved run.
What I built
An app that takes photos or video of meters, orders the frames, lets a person choose the measurements relevant to their test, and uses computer vision models to extract them. The subject of each test determines the measurements and views. Sequence checks flag missing readings and unusual changes. People can compare a reading with its source photo, edit it, and download charts and CSV with flags and edit history. These checks support review; independently validated extraction accuracy is not yet established.
Working with the model
- Model
- A configurable vision model through OpenRouter. Model choices and extraction accuracy still require independent validation.
- What I told it
- Read these named fields from the screen and return them as data. If a field cannot be read, return nothing for it rather than a guess.
- What I threw out
- Calling automated readings verified. Sequence checks flag suspicious changes, but a genuine step or reset can also trigger a warning. The person reviewing can return to the source photo; edits retain the previous values.
- What broke
- The first full run produced bad charts. The cause was the model doing the reading; switching it after the benchmark fixed the run without changing anything else.