feat(content): content pipeline Increment 1 — tooling + annotation tracks + 5-scale ring #13

Merged
benstull merged 15 commits from feature/content-pipeline into main 2026-06-24 15:26:17 +00:00
Owner

Summary

Content pipeline — Increment 1 (real footage, no ML). Spec: docs/superpowers/specs/2026-06-24-content-pipeline-design.md; plan: docs/superpowers/plans/2026-06-24-content-pipeline-increment-1.md (session 0014).

  • tools/pipeline/ deterministic stages: pure ffmpeg arg builders (frame / crossfade-loop / master+proxy transcode), Provenance record, manifest assembly (upsert clip + ring scale/edges), and a run.py runner with a bundled-ffmpeg fallback (PATH→imageio) + cv2 duration probe (no system ffprobe needed).
  • Annotation tracks (spec §4): optional keyframed track on an annotation, interpolated client-side (boxAt/loopT + per-frame paintLoop hook); backward compatible with static boxes.
  • 5-scale ring (spec §5): cosmos → orbit → forest → reef → abyss → wrap; orbit + reef added as placeholders.
  • Docs: docs/content-sourcing.md strict-PD procedure + ROADMAP update.

Test Plan

  • pytest -q → 246 passed, 2 skipped
  • Integration test runs on the real forest base (frame→loop→transcode), proxy verified 1920×1080
  • Spec + per-task + final whole-branch review: READY TO MERGE
  • Live by-eye (operator): forest water box drifts + loops seamlessly; reef fish track; spin the 5-scale ring

🤖 Generated with Claude Code

## Summary Content pipeline — Increment 1 (real footage, no ML). Spec: `docs/superpowers/specs/2026-06-24-content-pipeline-design.md`; plan: `docs/superpowers/plans/2026-06-24-content-pipeline-increment-1.md` (session 0014). - **`tools/pipeline/`** deterministic stages: pure ffmpeg arg builders (`frame` / crossfade-`loop` / master+proxy `transcode`), `Provenance` record, manifest assembly (upsert clip + ring scale/edges), and a `run.py` runner with a bundled-ffmpeg fallback (PATH→imageio) + cv2 duration probe (no system ffprobe needed). - **Annotation tracks** (spec §4): optional keyframed `track` on an annotation, interpolated client-side (`boxAt`/`loopT` + per-frame `paintLoop` hook); backward compatible with static boxes. - **5-scale ring** (spec §5): cosmos → orbit → forest → reef → abyss → wrap; orbit + reef added as placeholders. - Docs: `docs/content-sourcing.md` strict-PD procedure + ROADMAP update. ## Test Plan - [x] `pytest -q` → 246 passed, 2 skipped - [x] Integration test runs on the real forest base (frame→loop→transcode), proxy verified 1920×1080 - [x] Spec + per-task + final whole-branch review: READY TO MERGE - [ ] Live by-eye (operator): forest water box drifts + loops seamlessly; reef fish track; spin the 5-scale ring 🤖 Generated with [Claude Code](https://claude.com/claude-code)
benstull added 15 commits 2026-06-24 15:26:06 +00:00
Brainstormed + scoped the content pipeline that turns strict-PD source clips into
shippable, seamless-looping, labelled neutral bases for the scale ring.

Decisions settled this session:
- Scale set: lean 5 (cosmos · orbit · forest/land · reef · abyss; microscopic dropped)
- Loop: crossfade tail→head seam
- Labels: motion-tracked, hybrid (ML proposes where it can, hand-seed + classical
  tracker elsewhere); label semantics always hand-authored
- Format: master + 1080p H.264 proxy

Anchor fact: the Right dream is real-time (no per-clip ML bake, session 0013), so
the pipeline is transcode + authoring — the one offline ML step is the chosen
motion-track pass. Six stages + an optional keyframed annotation-track schema
(backward compatible) + a 2-increment rollout (real footage no-ML first, then the
hybrid track pass + simulator author mode). i2v ring transitions + Pi/pano deferred.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bite-sized TDD plan for Increment 1 (real footage, no ML): the deterministic
tools/pipeline/ package (frame → crossfade-loop → master+proxy transcode →
manifest assembly, pure ffmpeg arg builders unit-tested + an opt-in integration
test on the real forest POC base), the backward-compatible keyframed annotation
track schema with client-side interpolation, and the 5-scale ring (orbit + reef).
9 tasks. Implements spec §3 (stages 1–4,6), §4, §5, §6, §7, and §8 Increment 1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- run.py: add resolve_ffmpeg() mirroring setup_scales_media.py; change
  process_clip ff param to None and resolve at call time
- test_pipeline_integration.py: gate on resolve_ffmpeg() not PATH ffmpeg;
  verify proxy dims with cv2 instead of ffprobe
- ffmpeg_ops.py: add fps= to trim segments in crossfade_loop_args so xfade
  receives CFR input (xfade rejects 1/0 rate from raw trim output)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
benstull merged commit bb5ecf09b4 into main 2026-06-24 15:26:17 +00:00
benstull deleted branch feature/content-pipeline 2026-06-24 15:26:17 +00:00
Sign in to join this conversation.