Skip to content

feat: demo walkthrough script + screenshots→mp4/gif build pipeline (#48) - #54

Merged
franciszver merged 4 commits into
mainfrom
docs/p-demo1-walkthrough
Jul 24, 2026
Merged

feat: demo walkthrough script + screenshots→mp4/gif build pipeline (#48)#54
franciszver merged 4 commits into
mainfrom
docs/p-demo1-walkthrough

Conversation

@franciszver

Copy link
Copy Markdown
Owner

Closes #48

What

  • _docs/DEMO-script.md — 8-beat walkthrough (warm-up → login → dashboard → QA math/KaTeX → practice → goals → progress), each beat mapped to a screenshot filename; routes verified against App.jsx.
  • scripts/build_demo_media.py — ordered PNG frames → demo.mp4 (imageio-ffmpeg, bundled binary) + demo.gif (Pillow), configurable per-frame duration/fps/gif-width; even-dimension + uniform-canvas normalization on both paths.
  • scripts/demo_capture_checklist.md — the ordered screenshot list + capture options (manual or chrome-devtools MCP).
  • Pipeline proven on synthetic frames (valid, decodable mp4 + animated gif); tests/test_build_demo_media.py.

Scope / owner-dependent (documented, not done here)

  • Real screenshots: the browser profile was locked this session — the pipeline was validated on synthetic frames; capture the real 8 per the checklist (manual or MCP when the browser is free).
  • Final binaries: demo-media/ is gitignored; DEMO-script recommends attaching final demo.mp4/demo.gif to a GitHub Release rather than committing to main.

CI note

imageio-ffmpeg/Pillow are demo TOOLING deps, not app deps — deliberately NOT added to requirements.txt. The test file uses pytest.importorskip, so CI (which doesn't install them) SKIPS these tests cleanly rather than erroring at collection. Verified.

Verification

  • Full suite: 525 passed, 1 skipped, 2 xfailed. black/isort/flake8 clean.
  • Gate review: FIX-FIRST → all findings fixed (CI-collection skip, gif canvas normalization, mp4-decodability + mismatched-size tests, scoped .gitignore). No secrets, no committed binaries, routes real.

🤖 Generated with Claude Code

https://claude.ai/code/session_016v4C1daTwNakL6QDbmy3MJ

franciszver and others added 4 commits July 24, 2026 01:09
Assisted-by: Claude Code (sonnet subagent)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Assisted-by: Claude Code (sonnet subagent)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ization, stronger tests (#48)

- Add pytest.importorskip() at top of test_build_demo_media.py to skip
  gracefully when PIL/imageio_ffmpeg aren't installed (CI without demo
  tooling deps won't error on collection, just skip the tests)
- Normalize all gif frames to first frame's canvas size before downscaling
  by gif_width, preventing silent corruption on mismatched frame sizes
- Strengthen mp4 test assertions to verify decodability by reading back
  metadata (source_size, fps) via imageio-ffmpeg
- Add test_build_demo_media_handles_mismatched_frame_sizes() to verify
  gif builds with two different-sized frames (1280x720 and 1000x700)
  normalized to common canvas size
- Scope .gitignore mp4/gif patterns to demo directories only instead of
  repo-wide blanket patterns (demo-media/, _docs/local/demo-frames/)

Assisted-by: Claude Code (haiku subagent)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… gate

The format gate ran black/isort on the whole scripts/ dir, reformatting
pre-existing files unrelated to #48 (CI only lints src+tests, so scripts/
was never black-clean). Restores them to main; #48 keeps only its own files.

Assisted-by: Claude Code (fable orchestrator)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@franciszver
franciszver merged commit 0523d5d into main Jul 24, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

P-demo.1 — Demo walkthrough script + screenshots → mp4 and gif

1 participant