Skip to content

docs(skills): video-production skill v2.0 — composition guide, gates, scored task set - #682

Merged
ffroliva merged 8 commits into
developfrom
feat/skill-video-production
Sep 5, 2026
Merged

ffroliva merged 8 commits into
developfrom
feat/skill-video-production

Conversation

@ffroliva

@ffroliva ffroliva commented Sep 5, 2026

Copy link
Copy Markdown
Owner

Adds a video-production skill: how to turn a script into a finished multi-shot or dialogue video with gflow, as opposed to how to call one command (that stays the gflow-cli skill, which this one routes to rather than restating).

What is in it

  • SKILL.md routes: production shape, host lane check, the beat/cast/location locks, and the acceptance gate. Every non-obvious claim is tagged CONSTRAINT (the engine refuses) / CALIBRATED (measured, conditions stated) / CONVENTION (one shape that works) / UNEXPLORED (exists, untested here), so a reader knows what may be deviated from. Absence from the doc means untested, never forbidden.
  • consistency.md character sheets, environment sets, prop sheets, film grammar. composition.md reference budget and ordering, command chains per production shape. failure-modes.md symptom to cause to fix.
  • clip_qa.py the gates — fluidity, lip sync, A/V drift — on ffmpeg, ffprobe and the standard library only, so they run where the transcript gate cannot. --selftest proves the detector before you believe it.
  • tasks.json 19 scored scenarios for the SkillOpt harness (scripts/dev/skillopt/harness.py --skill … --tasks …). Every entry exists because an agent got it wrong in a rollout; the frontmatter's optimization_notes lists those weak spots.

Corrected against develop before landing

The skill was drafted against v0.67.0 and two merges today falsified part of it. Fixed here rather than shipped stale:

Test plan

  • check_repo_hygiene, check_doc_links (all relative links resolve, including the new ../../docs/CONFIGURATION.md and ../../KNOWN_ISSUES.md), check_website_docs_pii, check_council_memory, website mirror — all green
  • tasks.json parses, 19 tasks; clip_qa.py compiles
  • Routing rows present in AGENTS.md and skills/README.md
  • SkillOpt benchmark not yet run — the harness needs an API key and this is the first task set for this skill. Landing on develop is not releasing it; the baseline run is the next step and belongs before the skill is advertised
  • No code paths touched, so no e2e evidence applies (docs-only change per the docs: require e2e evidence for every behavior change #675 rule)

ffroliva and others added 8 commits September 5, 2026 23:50
… / dialogue video)

Tested with the writing-skills RED-GREEN-REFACTOR loop on two planning
scenarios: baseline agents skipped the flow.google.com host check, cast
minors, put lettering on a door, used film-format style words, rewrote the
script to fit 8 s and stacked two Character entities in one generation; with
the skill loaded all six were avoided, and the refactor closed the one
remaining leak (an age phrase copied from the rule text).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012mMqMyftiA3jnNAWFUP7XQ
…e shots (speech onset + face-region motion)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012mMqMyftiA3jnNAWFUP7XQ
…that make it a measurement

Cross-correlate face-region motion against the audio envelope. Learned by
measuring, each condition earned:
- smooth the motion and take audio as LINEAR amplitude, not dB (raw difference
  vs dB level correlates at r~0.0 at every lag; corrected pair hits 0.6-0.9)
- require r>=0.3, peak-minus-zero prominence >=0.05, and reject a peak on the
  window edge -- a flat surface still has an argmax, and one clip reported a
  208ms 'lag' standing 0.04 above zero
- low r means unmeasurable, never in sync; two-shots give r~0.1
Pass window is the ITU-R BT.1359 detectability range (-45ms to +125ms), and the
detector must be proved with an injected adelay before it is believed.

Found two clips with 167ms and 333ms of audible lag in a set that had already
passed every other gate.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012mMqMyftiA3jnNAWFUP7XQ
- skills/video-production/clip_qa.py: the fluidity / lip-sync / A-V-drift gates
  the SKILL.md describes, with a --selftest that injects a known adelay and
  asserts the detector reports it. Prose cannot carry a self-test, and two of
  the three guard conditions took a wrong answer to find. ffmpeg + stdlib only.
  Renamed from fluidity.py: it no longer measures only fluidity.
- Prerequisites section: ffmpeg/ffprobe >= 5.0 (assembler uses -fps_mode),
  a build with libass + libfreetype (subtitles/drawtext are missing from
  'essentials' builds), and faster-whisper for the transcript gate -- which
  NOTHING in gflow installs. Points at the gflow-cli skill for the rest rather
  than restating it. The sibling skill's own top tracked failure is agents
  skipping a prerequisite step.
- pyproject: exempt skills/** from T20, as tests/scripts/eval already are, so a
  skill can ship a CLI helper that prints.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012mMqMyftiA3jnNAWFUP7XQ
…cored task set

The skill becomes a composition guide rather than a second command surface: SKILL.md
routes, and consistency.md / composition.md / failure-modes.md carry the method, with
clip_qa.py as the gates and tasks.json (19 scored scenarios) as the SkillOpt set. Every
non-obvious claim is tagged CONSTRAINT / CALIBRATED / CONVENTION / UNEXPLORED so a
reader knows what may be deviated from, and the frontmatter records the weak spots each
rollout found.

Host lane table corrected against develop rather than the version it was drafted on:
lane B now runs t2v AND i2v from a local --initial-frame (#679), image on that lane is
exit 36 rather than RecaptchaError (#673), and the table points at CONFIGURATION and
KNOWN_ISSUES as the maintained list instead of pinning a release number that goes stale.
failure-modes and the host-001 task carry the same correction; the task is kept, with its
context pinned to the versions it describes, because the reasoning it scores is unchanged.
…outs found

Re-ran the three scored scenarios with v2.0 loaded. All eleven baseline
failures were fixed; the agents then named three genuine gaps:

- No recipe for a shot needing BOTH a specific person and a specific staged
  object. Two rollouts independently synthesised it from separate notes.
  Named it: composite the still with i2i (entity + plates), have a human
  approve it, then animate with i2v --initial-frame. Identity rides in the
  pixels; the frame is guaranteed.
- 'Paid calls in the foreground' read as a ban on automation, which is
  unreconcilable with a scheduled pipeline. The incident only supports
  'never detach a paid call from the process waiting on it'. Added the
  unattended equivalents: canary scene, --fail-fast, reconcile by listing,
  one profile, a credit ceiling.
- Every i2i example showed a single --ref, implying multi-reference
  composites were unusual. They are ordinary; --ref repeats to the model cap.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012mMqMyftiA3jnNAWFUP7XQ
The description was an unquoted scalar containing ": " ("clips came back wrong: a
film-strip border"), which YAML reads as a nested mapping — test_codex_plugin's
frontmatter parse failed on all three Python versions. Folded block scalar, the same
shape skills/scenario uses, which is immune to punctuation in the prose.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012mMqMyftiA3jnNAWFUP7XQ
@ffroliva
ffroliva merged commit 983a249 into develop Sep 5, 2026
14 checks passed
@ffroliva
ffroliva deleted the feat/skill-video-production branch September 5, 2026 23:22
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.

1 participant