You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Three related gaps, found while using the skill on vertical/screen-recording footage:
Hardcoded output format fights the source.render.py scales every segment to a 1920 long edge and forces -r 24. Smaller sources get upscaled, and 30/60fps screen recordings get resampled to 24fps (visible judder). fix(render): preserve orientation for portrait video sources #29 fixed portrait orientation but the long-edge/fps hardcoding remains. There are also a few doc-code drifts: SKILL.md still shows MarginV=35 while the code ships MarginV=90 (the safe-zone value from fix(subtitles): raise MarginV to 90 to clear vertical safe zones #5), SKILL.md's Output spec mentions a --filter flag that render.py doesn't have (it belongs to grade.py), and concat_segments writes a fixed _concat.txt so two concurrent renders in the same edit dir clobber each other.
Self-eval step 7 is instruction-only. "Check every cut boundary" relies on the model actually looping over all boundaries — a skipped boundary is invisible. Meanwhile timeline_view.py's docstring forbids calling it in a scan loop, so the instruction and the tool contradict each other.
No procedure for evolving the rules. Hard Rules and anti-patterns carry no dates, no triggering incidents, and no supersession markers, so future edits can only append — the failure mode that bloats skill docs over time.
Proposed Solution
Source-faithful output profile (render.py): probe the source with ffprobe once per render; default to the source's resolution capped at a 1080p-class long edge (no upscaling, vertical stays 1080×1920) and the source fps halved while above 30 (60→30, 59.94→29.97). Add an optional output field to the EDL — {width, height, fps} or a "shorts" / "landscape" preset — for explicit targets. Fix the doc drifts and make the concat list name unique per output in the same change.
helpers/boundary_stills.py: from the EDL + rendered output, generate one horizontal 3-frame strip (t−0.5 / t / t+0.5) per cut boundary plus 2s start/end strips into edit/verify/boundaries/, each with a ±0.5s waveform ribbon (reusing timeline_view.py's envelope rendering) so audio spikes are visible. Rewrite SKILL.md step 7 around it: run the script, read every image, report the four checks (visual jump / waveform spike / hidden subtitle / clean ending). timeline_view.py stays as the on-demand drill-down tool — the docstring conflict goes away.
Three-line rule-maintenance procedure in SKILL.md: new rules get a one-line date + triggering incident; replacements say "supersedes X" and delete the old body; past 400 lines, split details into references/ with SKILL.md body taking precedence on conflict.
Additional Context
Keeps the skill's design philosophy intact: hard rules only for silent-failure territory, everything else stays artistic freedom.
Problem Statement
Three related gaps, found while using the skill on vertical/screen-recording footage:
Hardcoded output format fights the source.
render.pyscales every segment to a 1920 long edge and forces-r 24. Smaller sources get upscaled, and 30/60fps screen recordings get resampled to 24fps (visible judder). fix(render): preserve orientation for portrait video sources #29 fixed portrait orientation but the long-edge/fps hardcoding remains. There are also a few doc-code drifts: SKILL.md still showsMarginV=35while the code shipsMarginV=90(the safe-zone value from fix(subtitles): raise MarginV to 90 to clear vertical safe zones #5), SKILL.md's Output spec mentions a--filterflag thatrender.pydoesn't have (it belongs tograde.py), andconcat_segmentswrites a fixed_concat.txtso two concurrent renders in the same edit dir clobber each other.Self-eval step 7 is instruction-only. "Check every cut boundary" relies on the model actually looping over all boundaries — a skipped boundary is invisible. Meanwhile
timeline_view.py's docstring forbids calling it in a scan loop, so the instruction and the tool contradict each other.No procedure for evolving the rules. Hard Rules and anti-patterns carry no dates, no triggering incidents, and no supersession markers, so future edits can only append — the failure mode that bloats skill docs over time.
Proposed Solution
Source-faithful output profile (
render.py): probe the source withffprobeonce per render; default to the source's resolution capped at a 1080p-class long edge (no upscaling, vertical stays 1080×1920) and the source fps halved while above 30 (60→30, 59.94→29.97). Add an optionaloutputfield to the EDL —{width, height, fps}or a"shorts"/"landscape"preset — for explicit targets. Fix the doc drifts and make the concat list name unique per output in the same change.helpers/boundary_stills.py: from the EDL + rendered output, generate one horizontal 3-frame strip (t−0.5 / t / t+0.5) per cut boundary plus 2s start/end strips intoedit/verify/boundaries/, each with a ±0.5s waveform ribbon (reusingtimeline_view.py's envelope rendering) so audio spikes are visible. Rewrite SKILL.md step 7 around it: run the script, read every image, report the four checks (visual jump / waveform spike / hidden subtitle / clean ending).timeline_view.pystays as the on-demand drill-down tool — the docstring conflict goes away.Three-line rule-maintenance procedure in SKILL.md: new rules get a one-line date + triggering incident; replacements say "supersedes X" and delete the old body; past 400 lines, split details into
references/with SKILL.md body taking precedence on conflict.Additional Context
Keeps the skill's design philosophy intact: hard rules only for silent-failure territory, everything else stays artistic freedom.