9.3 KiB
Plan: Video Analysis Campaign — Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Build the reusable tooling (5 scripts in scripts/video_analysis/) + execute the 5-phase pipeline for each of 12 curated YouTube videos, producing per-video deep-dive reports + a cross-cutting synthesis.
Architecture: Campaign-level umbrella + 12 child tracks + 1 synthesis track (14 folders total). Phase 0 installs tooling; Phase 1 builds the reusable scripts (TDD); Phase 2 runs the pipeline per video (each child is a track); Phase 3 synthesizes; Phase 4 closes out. Lossless preservation directive (1000-10000 LOC per video report).
Tech Stack:
- Python 3.11+ (1-space indent, type hints, no comments per
conductor/code_styleguides/python.md) Result[T]error handling perconductor/code_styleguides/error_handling.mdyt-dlp(subprocess),youtube-transcript-api(import),ffmpeg+cv2+imagehash+PIL(subprocess + import),winsdkortesseract(OCR)uv run pytestfor tests (perconductor/code_styleguides/workspace_paths.md)
Reference scripts (DO NOT import — reference only):
C:/projects/forth/bootslop/download_videos.py— yt-dlp usageC:/projects/forth/bootslop/extract_frames.py— cv2 + imagehashC:/projects/forth/bootslop/process_visuals.py— winsdk OCR + visual heuristicsC:/projects/forth/bootslop/ocr_interaction.py— standalone OCR
Phase 0: Tooling Prerequisites
One-time setup. Must complete before any script work begins.
Task 0.1: Install yt-dlp
Files: none modified. pyproject.toml deps updated (manually).
-
Step 1: Install yt-dlp in the repo's venv — DONE (
uv pip install yt-dlp→ yt-dlp 2026.06.09) -
Step 2: Verify import — DONE (
import yt_dlpworks) -
Step 3: Verify CLI availability (for subprocess invocation) — DONE (
uv run yt-dlp --version→ 2026.06.09) -
Step 4: Commit — DONE (commit
1c05305a)
Task 0.2: Install opencv-python, imagehash, pillow
Files: none modified. pyproject.toml deps updated.
-
Step 1: Install packages — DONE (
uv pip install opencv-python imagehash pillow→ 4.10.0 / 4.3.2 / 11.0.0) -
Step 2: Verify imports — DONE
-
Step 3: Verify ffmpeg is on PATH (cv2 needs it) — DONE (ffmpeg 8.1.1 confirmed)
-
Step 4: Commit — DONE (combined with Task 0.1 into
1c05305a)
Task 0.3: OCR backend decision (winsdk vs tesseract)
Files: none modified. Decision recorded in spec.md §4 / metadata.json.
-
Step 1: Try installing winsdk first (matches bootslop pattern) — DONE (winsdk 1.0.0b10)
-
Step 2: Verify winsdk can be imported and OCR engine can be created — DONE (engine available for en-US)
-
Step 3: If winsdk fails, fall back to tesseract — N/A (winsdk works); pytesseract installed as fallback
-
Step 4: Record decision in spec.md §4 (OCR backend line) — winsdk default
-
Step 5: Commit decision — DONE (combined into
1c05305a)
Task 0.4: Create scripts/video_analysis/ namespace + tests skeleton
Files: Create scripts/video_analysis/__init__.py, tests/test_video_analysis_placeholder.py.
-
Step 1: Create scripts/video_analysis/ directory — DONE
-
Step 2: Create __init__.py — DONE
-
Step 3: Create placeholder test file — DONE
-
Step 4: Verify placeholder test passes — DONE (1 passed; later replaced in Task 1.1)
-
Step 5: Commit — DONE (commit
12fcc55c)
Phase 1: Reusable Tooling (5 scripts, TDD)
Each script is independently TDD-tested. Order: extract_transcript → download_video → extract_keyframes → ocr_frames → synthesize_report (synthesize_report is last because it composes the others).
Common conventions (apply to all 5 scripts):
- 1-space indent, type hints on all params/returns, no comments in implementation code
- Use
Result[T, ErrorInfo]perconductor/code_styleguides/error_handling.md - CLI interface:
--url/--video/--frames-dirinput,--output/--output-dirtarget,--jsonmachine-readable mode,--help subprocess.runfor yt-dlp / ffmpeg / tesseract; never import the binaries
Task 1.1: Write tests + implement extract_transcript.py
- Step 1-7: TDD complete — DONE (commit
94f4a4ee). 8 tests passing.
Task 1.2: Write tests + implement download_video.py
- Step 1-5: TDD complete — DONE (commit
45a5e814). 5 tests passing.
Task 1.3: Write tests + implement extract_keyframes.py
- Step 1-5: TDD complete — DONE (commit
9ccdedee). 4 tests passing.
Task 1.4: Write tests + implement ocr_frames.py
- Step 1-5: TDD complete — DONE (commit
ed0d198a). 4 tests passing.
Task 1.5: Write tests + implement synthesize_report.py
- Step 1-5: TDD complete — DONE (commit
548c4fef). 5 tests passing.
Phase 2: Per-Child Tracks (12 tracks, brief)
Each child track has its own conductor/tracks/video_analysis_<slug>_20260621/plan.md (scaffolded by umbrella Tier 2 in init commit c1a15c45). The umbrella plan does NOT enumerate per-child tasks — each child is independently shippable.
5-phase pipeline (per child):
- Acquire — Run
extract_transcript.py+download_video.py. Phase 1 deliverable for E-cluster children: verify yt-dlp access. - Keyframes — Run
extract_keyframes.pywith threshold 0.4. Manual review of frame set. - OCR — Run
ocr_frames.py. Spot-check. - Synthesis — Tier 3 worker writes
report.md(1000-10000 LOC) +summary.md(200-400 words). Human review + iteration. - Verification — Idempotency check, audit checklist, end-of-track report.
Execution order: per umbrella spec.md §6 (cs229 first, creikey last). Per-child execution is via separate Tier 2 dispatches.
Phase 3: Synthesis Track (brief)
After all 12 child tracks ship, the synthesis track consumes their report.md + summary.md and produces per_video_summary.md + report.md (per umbrella spec §FR7).
Synthesis track scaffolded in init commit c1a15c45. Execution is via separate Tier 2 dispatch after all children ship.
Phase 4: Campaign Closeout (brief)
- Update umbrella
README.mdwith final statuses. - Write end-of-track report at
docs/reports/TRACK_COMPLETION_video_analysis_campaign_20260621.md. - Move umbrella + 13 children to
conductor/archive/. - Update
conductor/chronology.mdwith 14 new rows.
Verification (gate per workflow.md)
Each child track's Phase 5 must include:
- Idempotency check (re-running scripts produces identical outputs modulo timestamps)
- Audit checklist (every section of the report is populated, no "TBD")
- All tests pass (
uv run pytest tests/test_video_analysis_*.py) - Per-task commits with git notes
The campaign-level verification (Phase 4) confirms all 12 children + 1 synthesis are shipped and the future-pass hooks (umbrella spec §11) are intact.
Self-review
After writing this plan, the following checks were performed:
-
Spec coverage: Every FR in umbrella spec.md §4 is mapped to a task here:
- FR1 (umbrella + README): Task 0.4 + Phase 4 task 4.1
- FR2 (12 child folders): each child's
spec.mdalready exists; Phase 2 deferred to child plans - FR3 (1 synthesis folder): child
spec.mdexists; Phase 3 deferred - FR4 (5 scripts): Tasks 1.1-1.5
- FR5 (5-phase pipeline): Phase 2 above
- FR6 (8-section report):
build_report_stubin Task 1.5 has all 8 sections - FR7 (6-section synthesis): synthesis spec.md (already written)
- FR8 (storage): addressed in commits (gitignore for *.mp4 + large frames)
- FR9 (dependency graph): addressed in umbrella spec + state.toml
-
Placeholder scan: No "TBD", "TODO", "implement later" in the task steps.
<Title TBD>appears inbuild_summary_stubas a placeholder that the Tier 3 worker fills in — this is intentional per FR5 phase 4 ("Tier 3 worker prompt: ... populate each section"). -
Type consistency: All scripts use the same
_Ok/_Errdataclass pattern (per the Result[T] convention inconductor/code_styleguides/error_handling.md). All scripts have aok()/err()factory pair. Theextract_transcriptscript imports_fetch_raw_transcriptfrom within the same module — consistent across all 5 scripts.
Execution status (as of 2026-06-21)
Phase 0+1+2 init complete. 9 commits. 26 TDD tests passing.
| Phase | Status | Notes |
|---|---|---|
| Phase 0 (Tooling) | DONE | 7 deps installed in repo venv. winsdk OCR verified. |
| Phase 1 (5 Scripts) | DONE | 26/26 tests passing. Result[T] convention applied. |
| Phase 2 init | DONE | 12 child + 1 synthesis tracks scaffolded. |
| Phase 2 execution (12 children) | PENDING | Per-child Tier 2 dispatches (12 invocations). |
| Phase 3 (synthesis) | PENDING | 1 Tier 2 dispatch after all children ship. |
| Phase 4 (closeout) | PENDING | Final umbrella dispatch after all 13 children + synthesis ship. |
Interim end-of-track report: docs/reports/TRACK_COMPLETION_video_analysis_campaign_20260621_phase0_1_2init.md
Next steps: User dispatches Tier 2 per child via /tier-2-auto-execute video_analysis_<slug>_20260621 --resume. After all 12 + synthesis ship, user invokes final umbrella closeout (Phase 4).