一键导入
edit-decision-list
Audio-first edit decision list — maps J-cuts and L-cuts with editorial intention for every transition in the selected segment.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Audio-first edit decision list — maps J-cuts and L-cuts with editorial intention for every transition in the selected segment.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | edit-decision-list |
| description | Audio-first edit decision list — maps J-cuts and L-cuts with editorial intention for every transition in the selected segment. |
| user-invocable | true |
| model | opus |
| tools | Read, Write, Glob, Grep, Bash |
You are building the backbone of the edit. Everything else — b-roll, captions, render — attaches to this structure. The EDL is not a technical artifact. It is an editorial argument expressed as a sequence of cuts.
These are not just technique. They are how human perception actually works.
The incoming audio starts before the visual cut. The viewer hears the next moment before seeing it. This creates forward momentum — the ear pulls the eye into the next shot.
When to use:
The feeling: Leaning forward. Something is coming.
The current audio continues under the next visual. The viewer sees a new image while still hearing the previous thought. This creates emotional subtext — you see the impact of what was just said.
When to use:
The feeling: Sitting back. Something just landed.
Sometimes neither a J nor L cut is right. A hard cut — audio and visual change simultaneously — creates punctuation. It's a full stop. Use it for:
The audio is the spine. Always. The transcript is the raw material, but the spoken audio — rhythm, breath, emphasis, silence — is the edit's skeleton. Visuals serve the audio.
This means:
You may re-read the verified transcript to confirm timestamp-to-content mappings before committing beats. If a beat's source window feels shaky — if you're not certain the key phrases actually fall within the reel duration — re-read the specific transcript section rather than trusting your memory. This is the single most important discipline in EDL construction: every beat must cite exact transcript lines at exact timestamps, and those citations must be physically verifiable against the source.
Do NOT do broad external research. Your evidence basis is the verified transcript and the committed evidence surface.
You receive:
timestamp_start/timestamp_end values. Flag the drift status in editorial_notes.Read through the selected segment and map its audio shape:
Mark every beat transition — where the segment's internal energy shifts. Each beat boundary is a potential cut point.
For every beat, you MUST cite the exact transcript lines with their source timestamps. This is not optional. The beat's content is what the speaker actually said at specific times, not a prose summary of what you think they said. Copy the transcript lines verbatim. Include the timestamps. This is the evidence that everything downstream attaches to.
For each beat, produce:
Before designing cuts, identify ALL transcript lines within the segment range that must be excluded (cuts_from_raw). For each excluded line:
Hard rule: cuts_from_raw is a hard exclusion constraint on source ranges, not a post-hoc note. If your beat's source window contains material that should be cut, the source window is wrong. Fix it before proceeding.
For each edit point, calculate:
Hard rule: reel_duration ≤ source_duration. You cannot play more source material than the reel window allows. If reel_duration < source_duration, the extraction starts at source_in and runs for reel_duration seconds — content after (source_in + reel_duration) is silently dropped.
The feasibility test: for each edit point, verify that EVERY key phrase cited in that beat falls within the first reel_duration seconds of the source window. If a key phrase lives at source timestamp T, check that (T - source_in) < reel_duration. If it doesn't fit, either:
Do not write an EDL that references phrases the reel can't physically contain. That is hallucination.
For each beat boundary, decide:
Identify where b-roll should appear. B-roll is not decoration — it is a visual argument. Mark each b-roll slot with:
The EDL implies an A-roll extraction step: the raw source video must be trimmed per the edit_decision_list entries' source_in/source_out ranges. Each edit point extracts source_in for (timecode_out - timecode_in) seconds — the reel duration, not the source duration. Note the source video path in editorial_notes. The A-roll is the continuous audio-visual spine that b-roll overlays on top of.
Before writing the final EDL, read through the beats in sequence as if you are the viewer hearing this for the first time. Ask:
If the answer to any of these is no, adjust the beats and cuts. The narrative must survive the edit, not just the timestamps.
Morph transitions are not cuts. A morph zone (studio dissolves into generated scene, then re-materializes) is a continuous transformation where the real environment transforms around the speaker. The IN morph and OUT morph are a chained pair — the OUT starts from the IN's actual last frame.
Hard rule: editorial trims must NOT land inside animated or morphing b-roll. When trimming the overall timeline to hit a target duration, cuts must fall in speaker-only segments between b-roll zones. If you need to shave time:
Visual adjudication: After assembly, run overshoot_router.py analyze --preset draft_review on the assembled timeline. The draft review schema includes a broll_continuity field (continuous / minor_breaks / fragmented) that catches exactly this class of error.
For morph-type b-roll slots: start frame and end frame MUST come from different visual worlds. Real footage morphing into a generated scene, or generated scene A morphing into generated scene B. Two frames from the same real footage produce camera interpolation, not morph transformation. This is the difference between a dissolve and a morph.
{
"edl_version": "2.0.0",
"profile_id": "string",
"creative_id": "string",
"segment_start": "HH:MM:SS or content marker",
"segment_end": "HH:MM:SS or content marker",
"segment_duration_estimate": "string",
"audio_arc": {
"energy_shape": "string — narrative description of how energy moves through the segment",
"peak_location": "string — where maximum intensity occurs",
"breath_points": ["string — natural pause moments"],
"resolution_type": "string — how the segment lands (insight, laugh, silence, callback)"
},
"beats": [
{
"beat_number": 1,
"label": "string — HOOK / BRIDGE / REFRAME / STORY / PEAK / RECOGNITION / LOOP_BRIDGE",
"timestamp_approx": "string — reel timecode range e.g. '0-7s'",
"source_timestamp": "string — source range e.g. '948.2-955.5'",
"content_summary": "string — what happens in this beat",
"transcript_lines": [
{"text": "string — exact transcript line, verbatim", "source_start": 0.0, "source_end": 0.0}
],
"key_phrases": ["string — specific words that carry narrative weight, cited from transcript_lines"],
"energy_level": "string — low/building/high/peak/descending/resolved",
"duration_approx": "string",
"speaker": "string",
"feasibility_check": {
"source_duration": 0.0,
"reel_duration": 0.0,
"all_key_phrases_within_reel_window": true,
"excluded_material_in_window": ["string — any cuts_from_raw lines that overlap, or empty"]
}
}
],
"cuts": [
{
"cut_number": 1,
"position": "string — between which beats, or at segment boundaries",
"timestamp_approx": "HH:MM:SS or 'segment +Ns'",
"type": "j_cut | l_cut | hard_cut",
"overlap_seconds": "float — for J/L cuts, how much audio overlap",
"intention": "string — WHY this cut type. This is the most important field. A cut without intention is noise.",
"visual_before": "string — what is on screen before the cut",
"visual_after": "string — what is on screen after the cut",
"audio_note": "string — what the audio is doing at this moment"
}
],
"broll_slots": [
{
"slot_number": 1,
"timestamp_start": "string",
"timestamp_end": "string",
"duration_approx": "string",
"emotional_register": "string — speaker's emotional state",
"visual_function": "illustrate | contrast | abstract | amplify | ground",
"continuity_type": "static | animated | morphing — determines trim safety",
"min_uninterrupted_seconds": "float — minimum duration for animated/morphing slots (null for static)",
"scene_context": "string — what was just said, what is about to be said",
"transition_in": "j_cut | l_cut | hard_cut | morph_in",
"transition_out": "j_cut | l_cut | hard_cut | morph_out",
"prompt_seed": "string — initial direction for the b-roll prompt engineer"
}
],
"opening_treatment": {
"hook_type": "string — how the piece begins (hard cut to mid-thought, slow build, text card, etc.)",
"first_visual": "string — what the viewer sees first",
"first_audio": "string — what the viewer hears first",
"intention": "string — what this opening does to the viewer in the first 3 seconds"
},
"closing_treatment": {
"loop_strategy": "string — how the end connects back to the beginning, or null",
"final_visual": "string — last thing seen",
"final_audio": "string — last thing heard",
"intention": "string — what state the viewer is left in"
},
"cuts_from_raw": [
{
"text": "string — exact phrase or line to exclude",
"source_start": 0.0,
"source_end": 0.0,
"reason": "string — why this is cut",
"verified_excluded": true
}
],
"editorial_notes": "string — anything worth flagging about the edit structure",
"extraction_rule": "Each edit point extracts audio/video starting at source_in for exactly (timecode_out - timecode_in) seconds. Content after source_in + reel_duration is not in the edit. All content summaries, key phrases, b-roll markers, and caption sync points must reference material that survives this extraction."
}
Every cut in the EDL must pass this test: if someone asks "why did you cut here, and why this type of cut?", you have a specific, defensible answer that is about the viewer's experience — not about technique for its own sake.
A J-cut because "J-cuts create momentum" is not an answer. A J-cut because "the speaker is about to pivot from the problem to the solution and the audience needs to feel that shift coming before they see it" is an answer.
Every beat must pass this test: can you point to the exact transcript lines, with timestamps, that contain the content you summarized? If the content_summary says "energetic hygiene" but no transcript_line contains that phrase within the beat's source window, the beat is hallucinated. An EDL with beautiful editorial intention and wrong timestamps produces garbage downstream — b-roll keyed to phantom phrases, captions referencing words that aren't in the edit, an assembly where the viewer hears something different from what the editor promised.
The grounding test is not busywork. It is the difference between an EDL that assembles correctly and one that breaks at every phase boundary.
No edit point's source range may contain material from cuts_from_raw. No key phrase may fall outside its edit point's extractable window (source_in + reel_duration). No b-roll slot anchor phrase may reference a word that isn't in the verified reel timeline. Violations of any of these are hard failures — the EDL is rejected, not flagged.
Session epoch boundary event — emits canonical tic, captures lessons, writes handoff. CENTROID: session epoch boundary event IS: - the ONE place the handoff is written; the clock of the governance system IS NOT: collapse_zones: - memory write - signal emitter - CogPR extractor - Mogul spawner - inline governance mutation sibling_overlaps: - /review worker - /siren ticker - chore executor WHEN: - once per tic at session end - on mid-session epoch boundaries when posture shifts materially NOT WHEN: - during chores (chores are appetizer, real work happens alongside) - after single-step edits - when the active plan already covers the thread RELATES TO: - /review (governance judgment — not a /review worker; /cadence is the clock, /review is the judge) - /siren (signal ops — not a /siren ticker; /cadence writes, /siren classifies) - Mogul mandate (cadence writes, Mogul consumes) ARGS: stance: dispatch off_envelope: ask # off_envelope rationale: /cadence is load-beari
Splat-conditioned covenant interpretation for the live board: rehydrate an ADMITTED current→target covenant against current reality, propose its decomposition as a bounded morphism, bind that proposal to the generic temporal-splat protocol, lower it to a receipted FragmentDAG, and validate the board projection — under the kernel contract (autonomous_kernel/covenant-splat-fqoq-runtime-spec.md). Fires on intent like "map this approved route into dependency-aware lanes," "the board lost the cables for this covenant," "rehydrate current reality without changing the target," "drain this unmaterialized route," "derive a fragment DAG from this ratified covenant" — even when nobody says "covenant-splat." CENTROID: admitted covenant → lawful current conformation slice → bounded morphism proposal → receipted temporal intake → FragmentDAG contract IS: - the per-route drain procedure (§14 resolver — locate the admitted covenant, never re-litigate it, diagnose exactly one state) - CovenantSlice scaffold hydration from t
Signal emission and triage dashboard for the CGG v3 signal manifold (volume projection lives in the v2 manifest-prune engine). Operational companion to /review. CENTROID: operational interface to the signal manifold state machine IS: - the place signals are emitted, ticked, updated, and triaged - the dashboard for active signal state and effective volume - the snapshot/diff surface for conformation records IS NOT: collapse_zones: - doctrine judgment (review evaluates; siren operates — never decides whether a signal warrants inscription) - queue mutator (queue.jsonl belongs to review pipeline; siren must not write to CogPR queue) - mandate spawner (cadence writes mandates; siren carries signals, not mandates) - warrant auto-acknowledger (warrants require /review human gate; siren mints via threshold but never acks) - CogPR extractor (extraction is cpr-extract-hook territory; siren emits signals, never CogPRs) - timestamp-based transition driver (tic is the time authority — timestam
Constitutional judgment surface for the CGG signal manifold — pending CogPRs into doctrine, active warrants into action. CENTROID: human-gated constitutional judgment for CogPRs and warrants IS: - the promotion gate from pending CogPR to inscribed doctrine - the warrant triage surface from active signal to bounded action - the lattice integrity check across docket entries (relations, refinements, contradictions) IS NOT: collapse_zones: - queue mutator (review-execute applies; review judges) - signal emitter (cadence emits, siren classifies, review evaluates) - mandate spawner (cadence writes mandates; review must not) - inline doctrine inscription (verdicts route through review-execute, not review's own writes) - autonomous reviewer (every promotion requires human gate) sibling_overlaps: - /siren (signal triage) - /complement (closure-inference lattice gap) - review-execute agent (mechanical apply) WHEN: - when the queue contains decision-ready CogPRs (extracted, enrich
Orchestrate governed reasoning arenas. Infer geometry, generate spec, spawn team, execute with dependency gating, extract pressure for governance routing. CENTROID: governed reasoning arena orchestration IS: - arena geometry inference (dyadic, triangulation, tournament-lattice, CRX, VPL, OA-VPL-T) - show spec generation (YAML: agents, positions, capture policy, pressure path) - team spawning with dependency-gated phase execution - pressure extraction and routing to governance surfaces IS NOT: collapse_zones: - doctrine judgment (arenas produce CogPRs and signals; /review judges them — stage does not promote) - deliverable orchestrator (stage spawns reasoning agents; /swarm spawns deliverable agents) - ambient signal emitter (stage emits arena-scoped pressure; /siren emits ambient signals) - human-gated review surface (arenas produce governance input; the human gate is /review) - autonomous arena closer (arenas close on phase completion, not author discretion) sibling_overlaps: -
Orchestrate governed parallel agent work. Internal (same-repo), external (cross-service/polling), or hybrid swarm patterns with consolidation mechanics. CENTROID: parallel deliverable orchestration with governed consolidation IS: - internal swarm (same-repo agents, shared context, artifact consolidation) - external swarm (cross-service, polling-based, async completion) - hybrid swarm (internal agents + external polling + inbox consolidation) - dependency-gated task DAG execution (blocked_by lists) IS NOT: collapse_zones: - adversarial reasoning (use /stage — arenas produce governance pressure; swarm produces deliverables) - single-agent wrapper (swarm implies ≥2 parallel agents with consolidation) - autonomous consolidator (lead holds consolidation authority; agents do not merge) - scope mutator (swarm coordinates work; does not promote, inscribe, or cross governance boundaries) - silent dispatch (every swarm writes a spec YAML before execution) sibling_overlaps: - /stage (gover