Helios
Most students never see physics happen, they only see formulas; not every school has a lab, but every student has a phone.
Core trick
Model writes a browser physics simulation from a photo, and code compares its result to the textbook formula, retrying up to three times.
Description
Most students never see physics happen, they only see formulas; not every school has a lab, but every student has a phone. I built an app where you snap a photo of any projectile, pendulum, or incline problem, handwritten is fine, or describe an experiment, and GPT-6 Astra turns it into a live browser experiment you can play with. I do not trust the AI alone: deterministic code compares the measured result with the textbook formula, reruns it with gravity 10% higher to catch hardcoded answers, and sends errors back to Astra to fix, up to three rounds. Type "now on the Moon" and watch the ball fly higher while the check runs again.
msimakhov-star/pixel-perfect-replica★ 00 forksTypeScriptMITCreated Oct 6, 2026 · last push Oct 6, 2026
README excerpt
# Photo-to-Physics
**Snap a physics problem. Watch it become an experiment. Check it against the formula.**
A student photographs a physics problem (printed or handwritten) or describes an experiment in words. GPT-6 Astra reads it, writes a live interactive experiment that runs in the browser, and the app then **checks the experiment against the textbook formula**. If they disagree, Astra gets the measured error back and fixes its simulation (up to 3 rounds).
Not every school has a physics lab. Every student has a phone.
Built at the GPT-6 Astra Hackathon London (6 Oct 2026) with **GPT-6 Astra**, **Codex** and **Lovable**.
## How it works
```
photo / description / "now on the Moon"
│
▼
extract (GPT-6 Astra, vision + structured output) ──► ProblemSpec ──► student confirms / edits values
│
├──► reference answer (deterministic closed-form solver, src/lib/physics.ts) ← ground truth, no AI
│
▼
simulate (GPT-6 Astra writes one self-contained HTML experiment with window.measure)
│
▼
sandboxed iframe (allow-scripts only, no same-origin) ──► measure(given) by numerical integration
│
├──► compare: |measured − reference| / reference ≤ 2 %
├──► perturbation test: re-measure with g × 1.1, the result must move like the formula says
│ (a hard-coded number fails this)
▼
match ─► green badge mismatch ─► feedback to Astra, next round (max 3 rounds, m