Repository navigation
docs(skills): video-production skill v2.0 — composition guide, gates, scored task set - #682
Merged
Merged
Conversation
… / 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a
video-productionskill: 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 thegflow-cliskill, which this one routes to rather than restating).What is in it
SKILL.mdroutes: 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.mdcharacter sheets, environment sets, prop sheets, film grammar.composition.mdreference budget and ordering, command chains per production shape.failure-modes.mdsymptom to cause to fix.clip_qa.pythe gates — fluidity, lip sync, A/V drift — on ffmpeg, ffprobe and the standard library only, so they run where the transcript gate cannot.--selftestproves the detector before you believe it.tasks.json19 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'soptimization_noteslists 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:
video t2v --projectandvideo i2v --initial-frame <local file>since feat(639): image-to-video from a local start frame on the migrated flow.google.com host (slice 1) #679. A frame by media UUID /@Name,--end-frameand r2v are still unported.image t2ion the migrated host was documented as dying withRecaptchaErrorand tagged [CONSTRAINT]. Since Moved account:imagecommands die with RecaptchaError (exit 1) before the exit-36 guard fires #673 it is exit 36. The remainingRecaptchaErrorshape — right afterauth login— is bug: auth check + browserless cookie harvest keyed on labs.google cookie that flow.google.com never receives #644, and the doc now separates the two.GFLOW_CLI_FLOW_HOSTand KNOWN_ISSUES as the maintained list, and says exit 36 on a ported form is a regression to file rather than the environment.failure-modes.mdand thehost-001benchmark 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: the cause is the host, and agents reach for re-auth instead.Test plan
check_repo_hygiene,check_doc_links(all relative links resolve, including the new../../docs/CONFIGURATION.mdand../../KNOWN_ISSUES.md),check_website_docs_pii,check_council_memory, website mirror — all greentasks.jsonparses, 19 tasks;clip_qa.pycompilesAGENTS.mdandskills/README.md