Complete travel video production workflow for Codex and Agent Skills-compatible coding agents. Use when an agent must turn unordered travel footage into a deliverable edit package with full-folder location recognition, route reconstruction, recognition/route MD reports, SRT captions, BGM cues, licensed aerial/stock footage search, typography, day-to-day transitions, and FFmpeg/FCPXML/DaVinci/Premiere/Final Cut handoff without relying on Computer Use unless no direct path exists.
Resources
6Install
npx skillscat add junwen853/travel-video-studio-skill Install via the SkillsCat registry.
Travel Video Studio
Operating Rule
Use this skill as a delivery workflow, not just a planning checklist. The default project directory is the user's selected VideoClaw Studio app or project directory. When --project-dir is omitted, helper scripts check VIDEO_CLAW_STUDIO_DIR first, then fall back to:
~/Pictures/Video-make/video-claw-studioDefault to Codex visual inspection. Use DaVinci Resolve API editing for the generic unattended finish, but use the verified Jianying native-draft path when the user explicitly wants Jianying and the current machine passes app, entitlement, draft-roundtrip, TTS, and export gates. Do not pull, install, or depend on local Ollama/7B vision models unless the user explicitly asks for that route. Codex should inspect contact sheets/sampled frames itself, write auditable review notes, and then build the selected editor timeline through the direct API or draft backend before using GUI control for the smallest unavoidable boundary.
This folder also works as a portable Agent Skill for Claude Code, Hermes, OpenClaw, Lobster/OpenClaw workspace, or another local coding agent that can read a SKILL.md folder. For non-Codex runtimes, resolve <skill-dir> to the installed folder, keep the same approval gates, run bundled scripts directly, and read references/agent-runtime-compatibility.md before changing install or runtime behavior. Do not fork the core travel-video workflow per runtime.
Treat every live edit as Skill regression testing. The primary goal is to improve this reusable Skill so future unordered travel-footage folders can be delivered with less user correction; the current film is only the test case. When a draft exposes a failure such as bad titles, missing BGM, sparse subtitles, portrait regressions, weak transitions, route uncertainty, Resolve/API gaps, stale QA evidence, or style mismatch, fix the current package only after generalizing the lesson into at least one durable Skill asset: a SKILL.md rule, script behavior, audit check, Definition-of-Done item, or reusable reference. Do not call a turn complete when it only patches one output and leaves the Skill unable to prevent or detect the same failure next time.
After substantial Skill changes, forward-test the Skill against more than one trip when suitable evidence is available. A credible forward-test should include at least one known-good rendered package, one separate matched project that is correctly blocked before cutting, and any unknown mounted media roots that must be identified rather than silently selected. This proves the Skill is learning reusable behavior instead of only overfitting the current film.
When no user footage is available, or after changing editor integration behavior, create a synthetic benchmark before claiming the Skill was tested:
python3 <skill-dir>/scripts/create_skill_benchmark_fixture.py --output-dir /tmp/travel-video-studio-benchmark --overwrite --jsonThe fixture produces read-only landscape, portrait, square, source-audio, BGM-only bridge, scenic-title, black-slate, SRT, TXT, and bad-caption probes. Use it for regression testing only; do not confuse it with real trip/location proof.
For a mixed-camera road-trip regression covering Mini-series drone identity, Action-camera speech, a persistent lower dashboard obstruction, synchronized phone capture, hard/scenic music selection, A3 ducking, Resolve transforms, and source immutability, run:
python3 <skill-dir>/scripts/run_no_material_multicamera_drone_smoke.py --output-dir /tmp/travel-video-studio-multicamera-drone --overwrite --json
python3 <skill-dir>/scripts/run_no_material_xinjiang_edit_smoke.py --output-dir /tmp/travel-video-studio-multicamera-roadtrip --overwrite --jsonIt must pass dashboard detection and timeline-height reframe math, authentic A1 speech retention, audience-caption quality gating, non-story source-voice muting, hard opening music, calmer ending music, measured A3 ducking, real local-bed creation, and byte-identical source checks. This synthetic proof does not replace a real Resolve render; after render, audit_dashboard_reframe_render.py must prove that the lower obstruction is gone in output pixels.
For a single no-material editor integration test, run:
python3 <skill-dir>/scripts/run_no_material_editor_smoke.py --output-dir /tmp/travel-video-studio-editor-smoke --overwrite --jsonThis combines fixture generation, audience-caption clean/bad probe auditing, a procedural sine-hum BGM musicality trap, DaVinci Resolve install/API reachability audit, Jianying/CapCut no-GUI app state audit, Jianying/CapCut media/SRT/TXT handoff packaging, GUI smoke checklist generation, Jianying/CapCut handoff contract auditing, false GUI export-origin traps, a fake completed GUI proof trap, and a current-audit bootstrap trap into one report without writing Resolve, launching Jianying/CapCut, starting renders, downloading assets, modifying source footage, or assuming a direct Jianying API. Its summary must expose audienceCaptionBadProbeBlocked, bgmHumTrapBlocked, bgmHumTrapRejectedAsHumTone, guiSmokeChecklistPrepared, guiProofPendingFields, checklistPathMatchesLocal, jianyingFakeCompletedGuiProofTrapBlocked, jianyingCurrentAuditBootstrapTrapBlocked, jianyingCurrentAuditBootstrapAcceptedByCurrentRun, appPathMatchesStateApplication, postExportProofIdentity, currentAuditJsonWillBeWritten, currentAuditJsonMatchesChecklist, acceptedByCurrentRun, and exportFileIsPreparedInput through the contracts so a copied folder, stale manifest, fake state/app/post-export JSON, editor-facing caption text, source media masquerading as export, or technically audible but hum-like placeholder BGM is not mistaken for a tested delivery path. The clean caption probe must pass with viewer-facing SRT/TXT, the bad-caption probe must block on the fixture's edit-status subtitle, the BGM hum trap must block through audit_bgm_musicality_contract.py, the false GUI trap must remain blocked when a synthetic fixture or arbitrary MP4 is passed as --export-origin gui, the no-file GUI trap must remain blocked when --export-origin gui is claimed without --export-file, the stale manifest copied-handoff trap must remain blocked when a copied handoff still points its manifest checklist path at the original folder, the fake completed GUI proof trap must remain blocked when fake state/app/post-export proof plus a source-media file is presented as a GUI export, and the current-audit bootstrap trap must accept the planned current audit JSON while still blocking fake app identity and source-media-as-export proof. Use --require-resolve-reachable only when the next step must write a real Resolve timeline.
For a focused Jianying/CapCut TTS/export readiness check, run:
python3 <skill-dir>/scripts/run_jianying_gui_tts_export_smoke.py --output-dir /tmp/travel-video-studio-jianying-gui-smoke --overwrite --jsonThis command creates or consumes a handoff package, audits local Jianying/CapCut app state, verifies the TTS text and GUI proof contract, and runs the TTS/export readiness gate without launching the app. Add --require-installed when the next step specifically depends on Jianying/CapCut being installed; it must block on machines where the app is missing. After a real GUI export, rerun it with --handoff-dir <handoff> --export-file <mp4> --export-origin gui --state-json <state-audit-json> and require claimsJianyingTtsOrExport=true, exportCountsAsGuiProof=true, currentAuditJsonWillBeWritten=true or an accepted prior post-export audit, and exportFileIsPreparedInput=false before claiming Jianying generated TTS or export.
When the user asks whether Jianying/CapCut can be connected without Computer Use, read references/capcut-jianying-draft-automation.md and run:
python3 <skill-dir>/scripts/audit_jianying_capcut_draft_automation.py --output-dir /tmp/travel-video-studio-capcut-draft-automation --jsonThis detects local non-GUI draft automation readiness without installing packages, launching Jianying/CapCut, decrypting drafts, writing draft projects, or claiming TTS/export. It checks for community tools such as capcut-cli, cutcli, pyCapCut, pyJianYingDraft, CapCutAPI, CapCut-Mate-API, capcut-mcp, cli-anything-capcut, jianying-editor-skill, and capcut-export, scans known local draft roots for draft_content.json, draft_info.json, draft_meta_info.json, and template-2.tmp, and classifies readable plaintext JSON versus encrypted/opaque Jianying 6+ draft files. Add --require-plaintext-template when the task is to modify or learn from an existing template; the audit must then expose plaintextTemplateReady=true before a non-GUI template experiment is allowed. Treat directDraftAutomationReady=true as permission to generate a separate draft, not as export proof. Treat toolCandidateCount, cloudRenderCandidateCount, cloudRenderVerified=false, cutcliCloudRenderVerified=false, claimsCutcliCloudRender=false, and requiresSeparateCloudRenderExperiment=true as research inventory. On an unverified machine, keep Resolve as the reliable finish. On a machine where the same generated project passes the native roundtrip, in-app TTS/playback, and ffprobe export gates below, Jianying is an approved finish for Jianying-requested work; this still does not prove no-GUI macOS export.
For a real Jianying native draft with built-in transitions, effects, filters, SRT, BGM, optional Jianying TTS, and audited export, start from examples/jianying-native-edit-spec.example.json and use the pinned pyJianYingDraft==0.3.0 runtime prepared by prepare_capcut_jianying_tooling_bootstrap.py. For a hotel/car/airport/gate/aircraft departure chain, read references/homeward-flight-pov-style.md and start from examples/jianying-homeward-pov-edit-spec.example.json instead. Its editorialPolicy is enforced by build_jianying_native_draft.py: BGM-only camera audio, enabled TTS, missing viewer subtitles, duplicate/missing clean title, excessive or adjacent motion accents, and horizontal-split accents without motion/BGM/title/landing evidence must block before a draft is written.
<isolated-python> <skill-dir>/scripts/audit_jianying_resource_entitlements.py --spec <edit-spec.json> --require-free-delivery --json
<isolated-python> <skill-dir>/scripts/build_jianying_native_draft.py --spec <edit-spec.json> --draft-root <jianying-draft-root> --draft-name <project-name> --media-mode copy --json
python3 <skill-dir>/scripts/record_jianying_gui_proof.py --project-dir <project-dir> --record-tts --tts-voice <free-voice-name> --playback-position <observed-timecode> --json
python3 <skill-dir>/scripts/record_jianying_gui_proof.py --project-dir <project-dir> --record-export --export-path <jianying-export.mp4> --json
python3 <skill-dir>/scripts/audit_jianying_native_draft.py --project-dir <project-dir> --require-app-roundtrip --require-export --json
python3 <skill-dir>/scripts/audit_jianying_native_draft.py --project-dir <project-dir> --require-app-roundtrip --require-tts-generated --require-export --json # narration onlyRun the entitlement audit before building. Free-delivery mode is the default and must reject VIP transitions, effects, filters, or voices; use --allow-vip-assets or tts.allowVipVoice=true only when the current editor account entitlement is known and the brief accepts it. Use --media-mode copy for the reliable macOS open/save roundtrip. subtitles are always viewer-facing; they do not enable voiceover. Set tts.enabled=true only when the brief asks for spoken narration. A BGM-only brief keeps TTS disabled and retains only TXT/SRT copy. Use Computer Use only to open/save the generated project, select the audited Jianying voice, trigger text-to-speech, play the timeline, and export; draft construction, native assets, captions, BGM, entitlement checks, and readback audits stay script-driven. If the runtime has no GUI control, emit the proof commands for an operator and remain blocked instead of claiming TTS/export.
For the no-material homeward POV story-policy regression, run:
python3 <skill-dir>/scripts/run_no_material_jianying_homeward_story_smoke.py --output-dir /tmp/travel-video-studio-jianying-homeward-story --overwrite --jsonIt must pass the good BGM-only task-chain specification and block the bad trap for audible camera clips, enabled TTS, missing viewer subtitles, duplicate clean titles, motion-transition overuse, insufficient spacing, missing two-sided movement, missing BGM hit, title collision, excessive duration, and short landing hold. It proves the reusable Jianying specification gate, not a native app roundtrip or final-film taste.
For the native-draft proof traps, run:
python3 <skill-dir>/scripts/run_no_material_jianying_native_roundtrip_smoke.py --output-dir /tmp/travel-video-studio-jianying-native-roundtrip --overwrite --jsonIt must prove freeNativeAssetAccepted=true, vipNativeAssetTrapBlocked=true, freeTtsVoiceDetectedFromLocalCache=true, subtitleDoesNotAutoEnableTts=true, ttsFilesAloneDoNotClaimPlayback=true, ttsGeneratedAndPlaybackVerified=true, exportReadBackVerified=true, videoOnlyExportTrapBlocked=true, and claimsFinalTravelFilm=false. This synthetic smoke validates the portable contract; only a current real app roundtrip plus human TTS/BGM listen and rendered-film QA can approve a delivery.
For no-material Jianying/CapCut local draft regression testing, run:
python3 <skill-dir>/scripts/run_no_material_capcut_draft_automation_smoke.py --output-dir /tmp/travel-video-studio-capcut-draft-smoke --overwrite --jsonThis smoke creates synthetic plaintext and opaque draft roots, then proves the Skill can allow a throwaway plaintext draft experiment while blocking opaque Jianying 6+ template modification and preserving the researched tool registry. It must surface goodPlaintextDraftExperimentReady=true, opaqueDraftTrapBlocked=true, plaintextDraftDetected=true, encryptedDraftDetectedNotModified=true, directDraftExportStillUnverified=true, requiresGuiForFinalCapCutExport=true, toolCandidateCount, cloudRenderCandidateCount, cloudRenderVerified=false, cutcliAvailableInFixture=true, cutcliCloudRenderVerified=false, claimsCutcliCloudRender=false, macosNoGuiFinalExportStillUnverified=true, requiresSeparateCloudRenderExperiment=true, claimsJianyingTtsOrExport=false, claimsFinalCapcutBackendAutomation=false, and claimsFinalCapcutDraftAutomation=false. Passing this smoke does not mean the current machine can control Jianying/CapCut; it means the Skill will not fake support when tools, plaintext roots, cloud credentials, or real GUI/export proof are missing.
Before installing or trying community draft tools on a new machine, prepare an isolated bootstrap and proof pack:
python3 <skill-dir>/scripts/prepare_capcut_jianying_tooling_bootstrap.py --output-dir /tmp/travel-video-studio-capcut-tooling --overwrite --json
python3 <skill-dir>/scripts/run_no_material_capcut_tooling_bootstrap_smoke.py --output-dir /tmp/travel-video-studio-capcut-tooling-smoke --overwrite --jsonThe bootstrap probes Python, pip, Node 18+, npm, capcut-cli, cutcli, pyCapCut, and pyJianYingDraft; creates only an isolated sandbox and throwaway draft root; and writes pinned npm/Python install commands plus post-install and cloud-render proof commands. It does not run an install, download an installer, launch Jianying/CapCut, scan common real draft roots unless --include-common-draft-roots is supplied, or modify a real draft. Add --require-tooling-ready when Python/Node prerequisites are mandatory and --require-installed-tool when a local draft tool must already exist. The smoke must expose toolingBootstrapReady=true, safeThrowawayExperimentReady=true, missingToolTrapBlocked=true, temporaryInstallPlanPrepared=true, postInstallProofCommandsPrepared=true, downloadOrInstallRan=false, realDraftModificationAllowed=false, and requiresDaVinciDefaultFinish=true. Even after a local draft tool is ready, keep requiresGuiForFinalCapCutExport=true, cloudRenderVerified=false, claimsCutcliCloudRender=false, claimsFinalCapcutBackendAutomation=false, and claimsFinalCapcutDraftAutomation=false until a separate real export proof passes.
When the goal is to hand a real GUI operator or another AI a concrete Jianying/CapCut TTS/export proof package, run:
python3 <skill-dir>/scripts/prepare_jianying_gui_verification_pack.py --skill-dir <skill-dir> --output-dir /tmp/travel-video-studio-jianying-gui-pack --overwrite --jsonThis writes a focused smoke report, handoff folder, Jianying_GUI_VERIFICATION_PACK.md, and executable POST_EXPORT_AUDIT_COMMANDS.sh. If Jianying/CapCut is installed, the pack should reach readyForGuiOperator=true; if the app is missing, it should reach readyForInstallThenGuiProof=true unless --require-installed is supplied, in which case missing app proof is a blocker. The pack must not launch Jianying/CapCut, assume a direct API, or claim claimsJianyingTtsOrExport=true; it only creates the exact post-export command that must be rerun with a real GUI-exported MP4.
After a real Jianying/CapCut GUI export, prefer the proof-field filler before the post-export smoke:
python3 <skill-dir>/scripts/fill_jianying_gui_proof_fields.py --handoff-dir <handoff> --state-json <state-audit-json> --app-path <Jianying-or-CapCut.app> --export-file <gui-export.mp4> --tts-voice-preset <voice-name> --tts-generated-in-app --tts-audio-auditioned --source-media-untouched --subtitle-visibility-checked --apply --jsonThis updates gui_smoke_checklist.json only when the app path matches the state audit, the export is ffprobe-readable, the export is not source/handoff input media, required proof paths exist or point to the current post-export audit, and no proof fields remain pending. If it blocks, do not hand-edit proofStatus=completed_gui_proof; fix the app/export/proof mismatch and rerun.
For the strongest no-material editor readiness sweep, run:
python3 <skill-dir>/scripts/run_editor_delivery_matrix.py --output-dir /tmp/travel-video-studio-editor-matrix --overwrite --json
python3 <skill-dir>/scripts/run_editor_delivery_matrix.py --output-dir /tmp/travel-video-studio-editor-matrix-apply --overwrite --apply-resolve-all --json
python3 <skill-dir>/scripts/run_editor_delivery_matrix.py --output-dir /tmp/travel-video-studio-editor-matrix-jianying-required --overwrite --require-jianying-installed --jsonThis matrix runs the no-material editor smoke, transition-smoothness smoke, music-pacing smoke, cover/title smoke, viewer-friction smoke, rendered-watchdown smoke, CapCut/Jianying draft-automation smoke, CapCut/Jianying tooling-bootstrap smoke, Jianying native-roundtrip proof traps, Resolve writeability audit, Resolve live-write smoke dry-run, Resolve V1/V3/A3 delivery-structure smoke, and Resolve render-readiness smoke in one report. It must include the Jianying/CapCut handoff contract status plus jianyingCurrentAuditBootstrapTrapBlocked/jianyingCurrentAuditBootstrapAcceptedByCurrentRun so a copied folder or first-run audit bootstrap is not mistaken for verified in-app TTS/export support, and it must report whether any export proof actually has --export-origin gui. It must also expose badRenderedWatchdownTrapBlocked, goodFrameSamplesNonblank, goodAudioNotHumLike, claimsFinalRenderedWatchdown=false, opaqueDraftTrapBlocked, goodPlaintextDraftExperimentReady, toolingBootstrapReady, safeThrowawayExperimentReady, missingToolTrapBlocked, temporaryInstallPlanPrepared, postInstallProofCommandsPrepared, jianyingNativeRoundtripSmokeStatus, vipNativeAssetTrapBlocked, subtitleDoesNotAutoEnableTts, jianyingVideoOnlyExportTrapBlocked, downloadOrInstallRan=false, realDraftModificationAllowed=false, requiresDaVinciDefaultFinish=true, toolCandidateCount, cloudRenderCandidateCount, cloudRenderVerified=false, cutcliCloudRenderVerified=false, claimsCutcliCloudRender=false, macosNoGuiFinalExportStillUnverified=true, requiresSeparateCloudRenderExperiment=true, claimsFinalCapcutBackendAutomation=false, and claimsFinalCapcutDraftAutomation=false so watchdown proof and non-GUI CapCut proof cannot be reduced to metadata rows. Use --require-jianying-installed only when the machine is expected to have Jianying/CapCut installed; then the matrix and shorter no-material smoke must expose jianyingInstalledRequired, jianyingBlockedByMissingApp, jianyingHandoffOnlyNotGuiProof, and jianyingClaimsTtsOrExport at top level. Add --apply-resolve-all when all safe non-render Resolve proofs are approved; it expands to live-write, V1/V3/A3 delivery-structure, and render-settings apply/readback, but still never queues or starts a render. Use the narrower --apply-resolve-live-write, --apply-resolve-delivery-structure, or --apply-resolve-render-settings flags only when debugging one proof. When Resolve apply flags are used, the report must expose readbackIdentityProof, readbackIdentityAccepted, and sourcePathsMatch; a pass requires the readback project/timeline, item counts, and source paths to match this current throwaway apply. The matrix still must not launch Jianying/CapCut, queue renders, start renders, download assets, create TTS, or modify user/source footage.
For no-material transition-smoothness regression testing, run:
python3 <skill-dir>/scripts/run_no_material_transition_smoothness_smoke.py --output-dir /tmp/travel-video-studio-transition-smoothness --overwrite --jsonThis synthetic smoke tests the Skill's transition rules without real footage or Resolve writes. It must pass the good transition rows and block the bad trap, surfacing badTransitionTrapBlocked=true, smoothImportantTransitionsHaveBridgeOrMatch=true, motionAccentRarityPassed=true, motionAccentBgmHitPassed=true, motionAccentTitleSafePassed=true, noBackToBackMotionEffects=true, noTemplateEffectLanguage=true, requiresRealFootageForFinalSmoothness=true, and claimsFinalTransitionSmoothness=false. Passing this smoke proves the rules reject random/template rotation, hard important-boundary cuts, missing bridge/match evidence, missing BGM hit, title-unsafe motion, short landing holds, source-voice leakage, and back-to-back flashy effects; it does not prove a real trip's final transitions are smooth.
For no-material music-pacing regression testing, run:
python3 <skill-dir>/scripts/run_no_material_music_pacing_smoke.py --output-dir /tmp/travel-video-studio-music-pacing --overwrite --jsonThis synthetic smoke tests the Skill's BGM rhythm rules without real footage, real music, or Resolve writes. It must pass the good music cue rows and block the bad trap, surfacing badMusicPacingTrapBlocked=true, allRowsHaveBgmFileOrSearchBrief=true, allRowsHaveBeatGridEvidence=true, importantCutsLandOnBgmHitOrPhrase=true, scenicBridgesHaveMusicBreath=true, sourceVoiceMutedForBgmOnly=true, noHumOrPlaceholderBgm=true, rhythmVarietyPassed=true, requiresRealBgmForFinalMusicPacing=true, and claimsFinalMusicPacing=false. Passing this smoke proves the rules reject hum/tone/placeholder BGM, source-voice leakage, beat-spam cutting, missing cue/source evidence, missing phrase or BGM-hit anchors, short scenic breathing room, and mismatched mood; it does not prove a real film's music edit is final.
For no-material BGM musicality regression testing, run:
python3 <skill-dir>/scripts/run_no_material_bgm_musicality_smoke.py --output-dir /tmp/travel-video-studio-bgm-musicality --overwrite --jsonThis synthetic smoke materializes real audio probes and runs the BGM musicality contract without user footage, Resolve writes, downloads, or Jianying/CapCut. It must pass the good local fixture and block the hum/tone trap, surfacing goodBgmMusicalityPassed=true, badBgmMusicalityTrapBlocked=true, badBgmMusicalityRejectedAsHumTone=true, goodBgmActiveBandCount, goodBgmDynamicRangeDb, requiresRealBgmForFinalMusicality=true, humanListenStillRequiredForFinalBgm=true, and claimsFinalBgmMusicality=false. Passing this smoke proves the Skill rejects single-frequency/flat procedural BGM and keeps a human-listen gate for real final music taste; it does not prove a real trip's selected BGM is emotionally right.
For no-material cover/title composition regression testing, run:
python3 <skill-dir>/scripts/run_no_material_cover_title_composition_smoke.py --output-dir /tmp/travel-video-studio-cover-title --overwrite --jsonThis synthetic smoke tests the Skill's opening cover/title rules without real footage or Resolve writes. It must pass the good cover-title rows and block the bad trap, surfacing badCoverTitleTrapBlocked=true, singleMainTitleLayer=true, cleanDestinationTitlePassed=true, bilingualHierarchyPassed=true, noDuplicateOrGhostedTitle=true, noRouteDateInternalOverlay=true, titleSubtitleSafeZonePassed=true, scenicEstablishingEvidencePassed=true, noPortraitOpeningRegression=true, requiresRealFrameProofForFinalCoverTitle=true, and claimsFinalCoverTitle=false. Passing this smoke proves the rules reject ghosted/stacked titles, duplicate city text, route/date/internal labels, subtitle-title collisions, portrait opening regressions, non-scenic backgrounds, low contrast, missing support title hierarchy, and source-voice leakage on title cards; it does not prove a real cover/title frame is final.
For no-material viewer-friction regression testing, run:
python3 <skill-dir>/scripts/run_no_material_viewer_friction_smoke.py --output-dir /tmp/travel-video-studio-viewer-friction --overwrite --jsonThis synthetic smoke tests whether a first draft avoids obvious viewer-facing friction without real footage or Resolve writes. It must pass the good viewer rows and block the bad trap, surfacing badViewerFrictionTrapBlocked=true, viewerFacingCaptionsPassed=true, noInternalWorkflowText=true, noBlackSlateOpeningOrEnding=true, noPortraitRegression=true, bgmOnlyNoSourceVoicePassed=true, noHumPlaceholderBgmPassed=true, bridgeContinuityPassed=true, subtitleDensityCuePassed=true, endingAftertastePassed=true, requiresRealRenderWatchdownForFinalViewerFriction=true, and claimsFinalViewerFriction=false. Passing this smoke proves the rules reject AI-looking delivery failures such as editor-report captions, black/slate openings, portrait regressions, source voice under scenic/title sections, hum/placeholder BGM, sparse captions, missing route/scene bridge, random/template transition language, missing viewer purpose, and no ending aftertaste; it does not prove a real render has been watched down.
For no-material rendered-watchdown regression testing, run:
python3 <skill-dir>/scripts/run_no_material_rendered_watchdown_smoke.py --output-dir /tmp/travel-video-studio-rendered-watchdown --overwrite --jsonThis smoke creates real synthetic MP4 samples and verifies ffprobe streams, frame samples, landscape layout, nonblank frames, and non-hum-like audio without touching user footage, Resolve, or Jianying/CapCut. It must pass the good rendered watchdown probe and block the bad trap, surfacing badRenderedWatchdownTrapBlocked=true, goodFrameSamplesNonblank=true, goodFrameSamplesLandscape=true, goodAudioStreamPresent=true, goodAudioNotHumLike=true, badBlackFrameTrapBlocked=true, badPortraitTrapBlocked=true, badInternalTextTrapBlocked=true, badHumAudioTrapBlocked=true, badFinalClaimTrapBlocked=true, requiresRealRenderWatchdownForFinalQuality=true, and claimsFinalRenderedWatchdown=false. Passing this smoke proves the Skill no longer relies only on table rows for watchdown-level claims; it does not prove a real trip render has final BGM, subtitles, transitions, or viewer polish.
For no-material final-render bundle regression testing, run:
python3 <skill-dir>/scripts/run_no_material_final_render_quality_bundle_smoke.py --output-dir /tmp/travel-video-studio-final-render-bundle --overwrite --jsonThis smoke creates a synthetic good package with a real MP4 plus bound final-render reports, then creates a bad package with weak/missing proof. It must surface goodFinalRenderQualityBundlePassed=true, badFinalRenderQualityBundleTrapBlocked=true, goodFinalRenderQualityBundleReady=true, goodAllRequiredReportsPassed=true, goodOutputMatchesRenderVerification=true, requiresRenderReportBundle=true, claimsDaVinciLevelWithoutBundle=false, and claimsFinalRenderQualityFromNoMaterial=false. Passing this smoke proves the final-render quality bundle audit rejects missing final MP4/report closure, but it does not prove a real trip is DaVinci-level.
For no-material whole-film satisfaction regression testing, run:
python3 <skill-dir>/scripts/run_no_material_whole_film_satisfaction_smoke.py --output-dir /tmp/travel-video-studio-whole-film-satisfaction --overwrite --jsonThis smoke creates a synthetic good package with accepted whole-film source reports, then creates a bad package with missing reports, open watchdown rows, and metric failures. It must surface goodWholeFilmSatisfactionPassed=true, badWholeFilmSatisfactionTrapBlocked=true, goodRequiredWholeFilmReportCount, goodPassedWholeFilmReportCount, requiresCurrentFinalOutputWatchdown=true, requiresNoOpenUnattendedRepairRows=true, claimsReferenceLevelWithoutWholeFilmGate=false, and claimsWholeFilmSatisfactionFromNoMaterial=false. Passing this smoke proves the whole-film satisfaction gate rejects missing opening/chapter/rhythm/audio/transition/reference/director/watchdown closure, but it does not prove a real trip film is satisfying.
For no-material one-shot autonomy regression testing, run:
python3 <skill-dir>/scripts/run_no_material_one_shot_autonomy_smoke.py --output-dir /tmp/travel-video-studio-one-shot-autonomy --overwrite --jsonThis smoke creates a synthetic good package with every one-shot source report accepted, then creates a bad package with missing reports and metric failures across raw intake, opening, transition sequence, unattended repair, and whole-film closure. It must surface goodOneShotAutonomyPassed=true, badOneShotAutonomyTrapBlocked=true, goodRequiredOneShotReportCount, goodPassedOneShotReportCount, requiresRawFolderToFinalChain=true, requiresNoExtraDiagnosis=true, requiresResolveBlueprintPreflight=true, claimsOneShotV14FromNoMaterial=false, and claimsDaVinciLevelFirstRunFromNoMaterial=false. Passing this smoke proves the raw-folder-to-reference-level first-draft gate rejects incomplete evidence before another AI receives the Skill; it does not prove a real trip can be cut perfectly without real footage QA.
For no-material forward-test contract regression testing, run:
python3 <skill-dir>/scripts/run_no_material_forward_test_smoke.py --skill-dir <skill-dir> --output-dir /tmp/travel-video-studio-forward-test-smoke --overwrite --jsonThis smoke creates a synthetic good forward-test fixture and a bad trap fixture, then runs audit_skill_forward_test_contract.py against a temporary installed-shape copy of the Skill. It must surface goodForwardTestContractPassed=true, badForwardTestTrapBlocked=true, requiresKnownGoodRenderedPackage=true, requiresMatchedBlockedProject=true, requiresUnknownMountedRoot=true, requiresBlockedProjectRecoveryPlan=true, claimsCrossTripGeneralizationFromNoMaterial=false, and claimsFutureTripPerfectionFromNoMaterial=false. Passing this smoke proves the forward-test contract still rejects stale single-trip evidence, missing unknown-root handling, unsafe matched projects, and missing blocked-project recovery plans; it does not prove future real trips will cut perfectly without real footage QA.
For a single no-material release-confidence drill that ties the release audit, editor matrix, forward-test smoke, focused Jianying/CapCut smoke, and optional Resolve export smoke together, run:
python3 <skill-dir>/scripts/run_no_material_full_editor_drill.py --skill-dir <skill-dir> --output-dir /tmp/travel-video-studio-full-editor-drill --expected-version v0.1.198 --overwrite --apply-resolve-all --json
python3 <skill-dir>/scripts/run_no_material_full_editor_drill.py --skill-dir <skill-dir> --output-dir /tmp/travel-video-studio-full-editor-drill-4k --expected-version v0.1.198 --overwrite --apply-resolve-all --apply-resolve-render-export --quality-profile delivery-4k --json
python3 <skill-dir>/scripts/run_no_material_full_editor_drill.py --skill-dir <skill-dir> --output-dir /tmp/travel-video-studio-full-editor-drill-jianying-required --expected-version v0.1.198 --overwrite --apply-resolve-all --require-jianying-installed --jsonThe first command is no-render and should surface expected warnings rather than claiming full editor proof. Its top-level summary must expose releaseAuditStatus, editorMatrixStatus, noMaterialDrillStageStatuses, noMaterialDrillStageBlockerCounts, noMaterialDrillStageWarningCounts, transition fields including badTransitionTrapBlocked and claimsFinalTransitionSmoothness=false, music pacing fields including badMusicPacingTrapBlocked, importantCutsLandOnBgmHitOrPhrase, noHumOrPlaceholderBgm, and claimsFinalMusicPacing=false, BGM musicality fields including goodBgmMusicalityPassed, badBgmMusicalityTrapBlocked, badBgmMusicalityRejectedAsHumTone, goodBgmActiveBandCount, goodBgmDynamicRangeDb, humanListenStillRequiredForFinalBgm=true, and claimsFinalBgmMusicality=false, cover/title fields including badCoverTitleTrapBlocked, noDuplicateOrGhostedTitle, noRouteDateInternalOverlay, titleSubtitleSafeZonePassed, and claimsFinalCoverTitle=false, viewer-friction fields including badViewerFrictionTrapBlocked, viewerFacingCaptionsPassed, noInternalWorkflowText, noBlackSlateOpeningOrEnding, bridgeContinuityPassed, and claimsFinalViewerFriction=false, final-render bundle fields including finalRenderQualityBundleSmokeStatus, goodFinalRenderQualityBundlePassed, badFinalRenderQualityBundleTrapBlocked, goodFinalRenderQualityBundleReady, requiresRenderReportBundle=true, claimsDaVinciLevelWithoutBundle=false, and claimsFinalRenderQualityFromNoMaterial=false, whole-film satisfaction fields including wholeFilmSatisfactionSmokeStatus, goodWholeFilmSatisfactionPassed, badWholeFilmSatisfactionTrapBlocked, goodRequiredWholeFilmReportCount, claimsReferenceLevelWithoutWholeFilmGate=false, and claimsWholeFilmSatisfactionFromNoMaterial=false, one-shot autonomy fields including oneShotAutonomySmokeStatus, goodOneShotAutonomyPassed, badOneShotAutonomyTrapBlocked, goodRequiredOneShotReportCount, requiresRawFolderToFinalChain=true, requiresNoExtraDiagnosis=true, requiresResolveBlueprintPreflight=true, claimsOneShotV14FromNoMaterial=false, and claimsDaVinciLevelFirstRunFromNoMaterial=false, forward-test fields including forwardTestSmokeStatus, goodForwardTestContractPassed, badForwardTestTrapBlocked, requiresKnownGoodRenderedPackage=true, requiresMatchedBlockedProject=true, requiresUnknownMountedRoot=true, requiresBlockedProjectRecoveryPlan=true, claimsCrossTripGeneralizationFromNoMaterial=false, and claimsFutureTripPerfectionFromNoMaterial=false, and the Resolve apply/readback proof fields from the matrix, including resolveLiveWriteReadbackIdentityAccepted, resolveLiveWriteReadbackSourcePathsMatch, resolveDeliveryStructureReadbackIdentityAccepted, resolveDeliveryStructureReadbackSourcePathsMatch, resolveRenderSettingsApplied, resolveSetRenderSettingsAccepted, resolveRenderStructurePrerequisiteReadbackIdentityAccepted, and resolveRenderStructurePrerequisiteSourcePathsMatch, so another agent does not have to inspect nested reports to know which stage blocked or whether the throwaway Resolve writes matched current source paths. The second command may queue/start exactly one synthetic Resolve render and must report resolveRenderExportCompleted=true, 3840x2160 or better, FPS at least 59, resolveRenderExportVideoQuality>=80000, resolveRenderExportClaimsFinalRender=false, toolchainOnlyNoRealFootage=true, and jianyingClaimsTtsOrExport=false unless real GUI proof was supplied elsewhere. The third command is only for a machine that claims Jianying/CapCut is installed and ready; it must expose jianyingInstalledRequired=true, jianyingMissingAppBlocksWhenRequired=true when the app is absent, and jianyingHandoffOnlyNotGuiProof=true unless a real GUI export proof exists. It must never use user footage, launch Jianying/CapCut, assume a Jianying direct API, download assets, modify a source drive, or claim Bilibili/Malta/V14 film quality from synthetic evidence.
Do not run Resolve --apply smoke tests in parallel. Resolve scripting has global current-project/current-timeline state, so parallel smokes can cross-read each other's timeline; use readbackIdentityProof and sourcePathsMatch to block stale or cross-read evidence.
No-material tests prove the toolchain, not the film's taste. Do not claim Bilibili/Malta/V14-level viewer quality from synthetic fixtures alone; that still requires real footage or reference-package evidence through the normal package QA gates.
When DaVinci Resolve itself must be proven without user footage, run the stronger live-write smoke test:
python3 <skill-dir>/scripts/run_resolve_live_write_smoke.py --output-dir /tmp/travel-video-studio-resolve-live-smoke --overwrite --jsonThis default command creates the same read-only synthetic fixture, writes a Resolve blueprint and write contract, and performs a dry-run summary without changing Resolve. Add --apply only when the current operator explicitly approves a throwaway Resolve write: it must create a new smoke-test project/timeline, import only synthetic fixture clips as video-only V1 media, save the project, read it back with audit_resolve_timeline.py, require accepted readbackIdentityProof with matching source paths, and still never queue renders, download assets, generate TTS, or modify user footage.
When no user footage is available but the DaVinci delivery track structure must be guarded, run:
python3 <skill-dir>/scripts/run_resolve_delivery_structure_smoke.py --output-dir /tmp/travel-video-studio-resolve-structure-smoke --overwrite --jsonThis dry-run creates a synthetic V1/V3/A3 delivery blueprint with landscape V1 clips, a transparent V3 subtitle-overlay probe, and an A3 BGM-structure bed. Add --apply only after explicit approval for a throwaway Resolve project/timeline write; the readback must show accepted readbackIdentityProof, matching V1/V3/A3 source paths, V1 video items, V3 overlay items, A3 audio items, zero A1 source-camera items, zero A2 voiceover items, no render jobs, no downloads, and no source-footage writes. Treat this as editor-structure proof only: synthetic A3 audio is not approved music, and synthetic V3 overlay readback is not final subtitle visibility proof.
When no user footage is available but Resolve export defaults must be guarded, run:
python3 <skill-dir>/scripts/run_resolve_render_readiness_smoke.py --output-dir /tmp/travel-video-studio-resolve-render-readiness --overwrite --jsonThis creates a synthetic package, calls prepare_resolve_render.py in dry-run mode, and audits that the default render plan targets 4K, high frame rate, numeric high bitrate VideoQuality of at least 80000, video+audio export, and no queued or started render job. It intentionally expects real-package blockers such as missing delivery_audit.json and resolve_audit.json; passing this smoke proves the render-settings contract is safe, not that a Resolve timeline or final MP4 exists. Add --apply-resolve-settings only when a throwaway Resolve project/timeline write is approved: it creates a synthetic V1/V3/A3 project, requires the prerequisite structure report to have accepted readback identity plus sourcePathsMatch, applies render format/codec/settings, reads back current format/codec/mode, verifies zero render-job delta, and still never calls AddRenderJob or StartRendering. If Resolve's Python API exposes full GetRenderSettings, compare those fields too; if the method is unavailable in the current Resolve build, report that as a warning rather than pretending full settings readback exists.
When no user footage is available but the actual DaVinci Resolve export path must be proven, run:
python3 <skill-dir>/scripts/run_resolve_render_export_smoke.py --output-dir /tmp/travel-video-studio-resolve-render-export --overwrite --apply --json
python3 <skill-dir>/scripts/run_resolve_render_export_smoke.py --output-dir /tmp/travel-video-studio-resolve-render-export-4k --overwrite --apply --quality-profile delivery-4k --jsonThis is the only no-material smoke that may queue and start a render, and only when --apply is supplied. It first creates a throwaway synthetic V1/V3/A3 Resolve project/timeline with accepted readback identity and sourcePathsMatch, then sets render settings, calls AddRenderJob/StartRendering, waits for completion, finds the exported MP4/MOV, runs ffprobe plus sample-frame extraction, and reports qualityProfile, renderStarted, renderCompleted, renderVideoQuality, output duration/resolution/FPS/bitrate/audio, sample-frame count, and claimsFinalRender=false. Use --quality-profile delivery-4k when the actual high-quality export path must be proven: it must request 3840x2160, 59.94fps, VideoQuality=80000, and require ffprobe output at least 3840x2160 and 59fps. It must never use user footage, launch Jianying/CapCut, download assets, modify the source drive, or claim route/style/subtitle/BGM quality from the synthetic output. Keep it separate from the default editor matrix because the normal matrix must not queue or start renders.
Start with read-only inspection:
python3 <skill-dir>/scripts/check_project_state.py --project-dir "$VIDEO_CLAW_STUDIO_DIR"Then create or update a 20-minute long-form delivery package:
python3 <skill-dir>/scripts/build_delivery_package.py --project-dir "$VIDEO_CLAW_STUDIO_DIR" --target-duration-minutes 20For the safe local end-to-end workflow, prefer:
python3 <skill-dir>/scripts/run_delivery_workflow.py --project-dir "$VIDEO_CLAW_STUDIO_DIR" --target-duration-minutes 20This writes workflow_run_report.json/.md, checks Resolve API reachability, prepares route review when needed, prepares a route decision sheet, dry-runs route decision application, builds or refreshes the package, prepares local title cards, refreshes asset sourcing/enrichment, runs audience-caption, large-source unattended-readiness, transition source coverage, motion-accent repair, rendered transition proof, transition reference-readiness, transition-sequence-satisfaction, story-style, reference-alignment, director-intent, route-texture, title-bridge, stock/aerial closure, director-polish, final-viewer-friction, first-draft-satisfaction, unattended repair queue, whole-film-satisfaction, unattended-first-draft, one-shot-autonomy, Skill maturity, and V14 baseline audits, normalizes any blocked* audit status into top-level workflow blockers, dry-runs asset sourcing reconciliation, dry-runs the Resolve blueprint, prepares a Resolve apply approval contract, prepares a safe render_plan.json, and re-audits delivery readiness. It never writes Resolve, queues render jobs, downloads external assets, applies route/asset decisions, or generates local TTS unless the corresponding explicit flag is passed. Use --skip-render-plan only when a package-level render plan is intentionally deferred.
Use scripts/make_voiceover_audio.py after the narration script is approved or when the user explicitly asks for local TTS audio.
Use scripts/prepare_delivery_assets.py after delivery_plan.json and resolve_timeline_blueprint.json exist. It generates local title/place card media, refreshes Resolve enrichment, and writes delivery_assets_report.json/.md. It only generates local TTS voiceover when called with --generate-local-voiceover.
Use scripts/check_resolve_api.py after DaVinci Resolve is installed. Use scripts/audit_resolve_writeability_state.py --json before any Resolve --apply or whenever the Resolve API is reachable but project creation, timeline creation, current database, or current page evidence is missing. If this audit reports that the project library database is not exposed to scripting, inspect the Resolve UI for foreground modals such as Software Update, dismiss them, select the local project library, and rerun the audit before claiming DaVinci is write-ready. Use scripts/audit_jianying_capcut_state.py --json before claiming Jianying/CapCut support or attempting GUI/TTS/export work; it must not launch the app, write projects, queue renders, or treat handoff readiness as proof of in-app TTS/export. Use scripts/audit_editor_integration_contract.py --json after editor setup changes, before claiming DaVinci or Jianying/CapCut support, and when a user asks what editor path is available. The audit must distinguish Resolve app/scripting installation from live API reachability: missing Resolve app or scripting files blocks the default finishing path; API unreachable is a warning unless the next step writes an actual Resolve timeline, in which case Resolve must be open with local external scripting enabled. It must not assume a direct Jianying API.
Use scripts/build_resolve_timeline.py only after the package writes resolve_timeline_blueprint.json.
Use scripts/prepare_jianying_handoff_package.py when the user wants Jianying/CapCut, Jianying TTS, or a CapCut-style handoff but no verified direct API is available. Run scripts/audit_jianying_capcut_state.py --json first: if the app is absent, deliver only the handoff package and state that in-app TTS/export are unverified; if the app is present, GUI/Computer Use may be attempted only after approval. The package should contain media, SRT, TXT text-for-TTS, tts_import/tts_script.txt, tts_import/tts_segments.json, timing references, approved BGM assets for GUI import, and gui_smoke_checklist.json/Jianying_GUI_SMOKE_CHECKLIST.md for real GUI proof fields. Then run scripts/audit_jianying_handoff_contract.py --handoff-dir <handoff> to prove media exists, TTS text is nonempty and audience-facing, GUI smoke checklist proof fields exist, the manifest checklist path matches the current handoff folder, guiProofPendingFields is surfaced until real GUI evidence is filled, direct API/TTS/export claims are not fabricated, and source footage remains untouched. Use scripts/prepare_jianying_gui_verification_pack.py when the next operator needs one folder containing the handoff, GUI steps, proof fields, proof-filler command, and post-export audit shell command. After the real GUI export, run scripts/fill_jianying_gui_proof_fields.py --apply before the post-export smoke so checklist completion is machine-checked instead of hand-edited. Do not claim Jianying TTS, effects, or export were generated from a copied/stale handoff, or unless Jianying/CapCut was actually opened, operated, exported, GUI proof fields were completed by the filler or equivalent audited evidence, and the output was read back with ffprobe plus normal travel-video QA. Computer Use remains a fallback only for GUI-only import/TTS/export after explicit approval.
Use scripts/audit_jianying_tts_export_readiness.py --handoff-dir <handoff> after a Jianying/CapCut handoff is prepared, or use scripts/run_jianying_gui_tts_export_smoke.py as the combined state/handoff/readiness entrypoint. Run readiness again with --export-file <mp4> --export-origin gui --output-dir <audit-dir> after any real GUI export. This audit is the gate for Jianying's in-app TTS/export path: without an installed app it must remain warning/blocked readiness, without an audited handoff it blocks, with nonempty guiProofPendingFields it cannot claim GUI TTS/export completion, if checklist proofStatus is not completed_gui_proof it cannot claim GUI completion, if required proof paths such as stateAuditJson, ttsScriptSource, or exportFile are missing it cannot claim GUI completion, and postExportAuditJson must either point to a prior passed readiness audit for the same handoff/export or to the current <audit-dir>/jianying_tts_export_readiness_audit.json that this run will write. If appPathMatchesStateApplication or trusted Applications-root identity fails the app proof is not valid, if exportFileMatchesChecklist is false the supplied export is not bound to the GUI checklist, if exportFileIsPreparedInput is true the export is only source/handoff input media, if postExportProofIdentity is not accepted by either a prior report or acceptedByCurrentRun the post-export audit is not bound to this handoff/export, if --export-origin gui is supplied without --export-file it must block with missingExportFileForGuiOrigin, and without an ffprobe-readable GUI-origin exported file it cannot claim TTS/export delivery. The report must surface currentAuditJsonWillBeWritten and currentAuditJsonMatchesChecklist so the first real GUI export can be audited without a circular proof requirement. Never pass --export-origin gui for a synthetic fixture, Resolve export, arbitrary MP4, source/handoff input media, or missing export file. It never launches Jianying/CapCut, writes editor projects, queues renders, downloads assets, or modifies source footage; it only records the GUI smoke contract and the proof still required.
Use scripts/discover_external_media.py --volume-root /Volumes after the user plugs in a travel footage drive. It discovers likely mounted travel media roots, filters ._ AppleDouble shadow files, reports video counts/sizes/sample paths, and flags Japan/Tokyo/Osaka/Hong Kong/Macau naming cues without modifying the drive.
Use scripts/prepare_external_media_intake.py --volume-root /Volumes when a mounted drive contains multiple trips, when the app has multiple candidate projects, or when a project title/route may not match its media root. It writes an auditable project/media-root choice packet and prevents the workflow from silently using a mismatched default project.
Use scripts/run_videoclaw_media_index.py when a selected VideoClaw project has mounted mediaRoots but no media_index.json. Run it without --apply first to verify video counts and missing roots; add --apply only when writing media_index.json, duplicate_groups.json, and scan.json into the project directory is approved. It never modifies the source drive.
Use scripts/run_videoclaw_route_pipeline.py after media_index.json exists but route/location artifacts are missing. By default it runs local project writes only: media index refresh, frame extraction, frame index, visual scoring, local prefilter, route scaffolding attempts, and reports. It keeps real cloud location recognition disabled unless --allow-cloud-call is explicitly passed.
Use scripts/run_local_ollama_vision_recognition.py only when the user explicitly requests a local 7B/8B vision-model pass. It reads extracted frames, sends representative frames to an Ollama vision model such as qwen2.5vl:7b, and writes local_vision_recognition/<timestamp>/local_ollama_vision_recognition.md plus a local location-map candidate. By default it does not overwrite video_location_map.json; use --update-project-location-map only after reviewing the local results.
Use scripts/run_local_tesseract_ocr.py only as an optional helper when the user allows local OCR or when visible signs/station names need text extraction. It runs Tesseract locally with Japanese/English/Chinese language packs and writes local_ocr_recognition/<timestamp>/local_tesseract_ocr_recognition.md plus an OCR-only location-map candidate. OCR evidence is not enough for GPS-grade certainty, but it is useful for route review.
Use scripts/prepare_footage_recognition_report.py after media indexing and location recognition, before building or refreshing any delivery package. It writes recognition_reports/<timestamp>/footage_recognition_route_report.md and .json, plus latest_footage_recognition_route_report.json. This is a required customer-facing evidence document: it must list all source videos, recognized/unknown places, confidence, route-readiness, orientation, derived-source warnings, and next actions. If it says blocked, do not cut.
Use scripts/audit_location_truth_contract.py after the footage recognition report and before any route/location claim. It distinguishes route-aware edit readiness from verified per-video location truth: full visual/Codex coverage may be passed_with_caveats, but exact per-clip geolocation can only be claimed when GPS, user-confirmed, or verified cloud/per-video evidence exists. Run with --require-verified-per-clip-location only when the user requires GPS-grade/per-video truth; otherwise keep the caveat explicit and do not label visual reconstruction as exact.
Use scripts/prepare_blocked_project_recovery_plan.py whenever prepare_footage_recognition_report.py, audit_location_truth_contract.py, or the forward-test contract blocks a matched project before cutting. This writes a blocked-project recovery plan with ordered phases, exact next commands, approval gates, and safety flags so the next agent can move from "matched but unsafe" to route-ready without cutting the wrong material, modifying the source drive, calling cloud vision, writing Resolve, downloading assets, or applying route files by default. If a ready confirmed-route candidate already exists, the recovery plan must surface it in summary.confirmedRouteCandidate, mark route confirmation as candidate_ready_awaiting_approval, and keep editingAllowedNow=false until the route is explicitly applied and truth gates pass.
Use scripts/prepare_codex_visual_confirmed_route.py after Codex visual inspection has produced a stable route review markdown file such as codex_visual_route_review.md. It converts Codex-reviewed day/place chapters into a fresh confirmed_route_timeline.json, backs up the previous route file, marks the review decision as codex_visual_confirmed, and removes human-review blockers when all source videos are covered. This is the preferred route confirmation path for this user's workflow; do not run a local 7B/Ollama pass just to create the confirmed route unless the user explicitly asks for it. When multiple route nodes occur on the same date, the Codex visual report must provide explicit videoNames, videoIds, or videoPaths for each chapter so the script does not duplicate all same-day videos into every chapter. Never hard-code country/region from a previous project such as Japan; infer it from the project and Codex visual chapter, and keep Hong Kong/Macau, Europe, or other multi-region trips labeled honestly.
Use scripts/audit_confirmed_route_candidate.py after prepare_codex_visual_confirmed_route.py or prepare_confirmed_route_candidate.py writes a candidate and before any route --apply. It must prove the candidate is apply-ready, matches the selected project/media index, assigns every active source video exactly once, has no unknown/excluded/duplicated source references, keeps same-date multi-stop chapters explicitly mapped, and does not inherit the wrong trip country such as Japan on a Hong Kong/Macau project. A passed_with_caveats result may allow route-aware editing only with explicit non-GPS/visual-reconstruction wording; a blocked result forbids writing confirmed_route_timeline.json.
Use scripts/prepare_footage_select_plan.py --project-dir <project> after media indexing and route/location recognition, before build_delivery_package.py. Read references/footage-select-engine.md, references/source-selection-repair-contract.md, and references/large-source-unattended-readiness-contract.md first when cutting from a large unordered source folder or when the user wants the first draft closer to the Parallel World/Malta references. The script writes footage_select_plan/footage_select_plan.json and .md with one row per active source video, selection score, hero/main/texture/utility/reject tier, orientation repair risk, derived-source rejection, chapter-pool coverage, local bridge candidates, and exact decision fields. After package build, run scripts/audit_raw_intake_completeness.py --project-dir <project> --package-dir <package>, scripts/prepare_source_selection_repair_plan.py --package-dir <package> --project-dir <project>, scripts/audit_source_selection_coverage_contract.py --package-dir <package>, and scripts/audit_large_source_unattended_readiness_contract.py --package-dir <package> so the full selected source tree is indexed, every active source video is recognized, routed exactly once, scored, non-derived, fresh, chapter-covered, first-assembled by scored selection, connected to unattended first-draft/preflight, protected from source-drive writes, backed by resume checkpoints, and covered by an explicit workspace free-space budget before effects or stock fallback. build_delivery_package.py uses this plan when present to sort chapter media by selected local footage quality rather than raw file order. This prevents a 100GB folder from becoming a filename-order montage or a half-finished run that fills the MacBook or writes generated artifacts into the source footage root.
build_delivery_package.py must produce a Resolve blueprint whose longFormCoverage.finalVideoCoverageSeconds can sustain the requested long-form target when enough source media exists. Opening, bridge, and ending gaps should be filled with labeled visual-bed clips instead of silently leaving a 20-minute timeline under-covered.
Use scripts/prepare_opening_story_plan.py --package-dir <package> immediately after build_delivery_package.py and before trusting title, BGM, visual-establishing, edit-rhythm, creator-cut, or director-intent claims. Read references/opening-story-engine.md first when the user wants Parallel World/Malta quality or when the first minutes feel generic. The script writes opening_story_plan/opening_story_plan.json and .md with six required first-three-minute beats: viewer promise, destination proof, clean hero title, practical arrival, lived-in texture, and first chapter handoff. It does not write Resolve, download assets, or modify source footage.
Use scripts/prepare_chapter_arc_plan.py --package-dir <package> after the opening story plan and before edit-rhythm, creator-cut, transition, BGM, caption, or Resolve trust. Read references/chapter-arc-engine.md first for Parallel World/Malta quality. The script writes chapter_arc_plan/chapter_arc_plan.json and .md with one row per chapter covering context, movement, lived-in texture, destination payoff, and aftertaste/handoff; after rhythm/creator/source/transition audits, read references/chapter-story-spine-contract.md, references/shot-flow-continuity-contract.md, and references/scene-flow-arc-contract.md, then run scripts/audit_chapter_story_spine_contract.py, scripts/audit_shot_flow_continuity_contract.py, and scripts/audit_scene_flow_arc_contract.py so missing beats, random chapter shot order, or landmark-stack scene arcs are not hidden by effects.
Use scripts/enrich_resolve_blueprint.py after delivery_plan.json, subtitles.srt, voiceover audio, title cards, BGM cues, and asset search/ledger data change. It writes resolve_timeline_enrichment.json and updates resolve_timeline_blueprint.json with subtitle cues, voiceover/BGM mix plan, stock/aerial placeholders, transition cues, and Resolve timeline markers.
Use scripts/audit_resolve_blueprint.py --blueprint <package>/resolve_timeline_blueprint.json --package-dir <package> before any Resolve --apply. It writes resolve_blueprint_preflight.json/.md and verifies missing media, source ranges, source-duration bounds, same-track overlaps, V1 coverage gaps, title/place cards, subtitle sidecar, markers, BGM/stock/transition placeholders, and source-audio policy without writing Resolve.
Use scripts/analyze_reference_video.py for an optional local reference film:
python3 <skill-dir>/scripts/analyze_reference_video.py --reference /path/to/reference-travel-film.mp4 --output-dir <package>/reference --timeline-strip-seconds 2The local reference analysis must be a reusable style profile, not only a contact sheet. It must decode scene scores across at least 95 percent of the film, suppress sustained-motion frames into spaced boundary candidates, generate ordered beginning-to-end timeline sheets, generate before/after sheets for every candidate boundary, materialize whole-film waveform/spectrogram evidence, and preserve the mandatory human review gate. Automated candidates are navigation evidence: classify each as a real cut, stylized transition, hidden cut, or fast-motion false positive and still play the opening, phase changes, audio decisions, and ending continuously. Use the confirmed observations to calibrate shot rhythm, route texture, BGM/no-voiceover support, subtitle density, and breathing room before judging an edit as Bilibili/reference-like.
Run the analyzer regression after changing reference learning:
python3 <skill-dir>/scripts/run_no_material_reference_full_timeline_smoke.py --output-dir /tmp/travel-video-studio-reference-full-timeline --overwrite --jsonIt must prove full-frame coverage, ordered timeline and boundary sheets, whole-film audio evidence, adaptive peak suppression, a valid ordered shot-length target, a passing full-timeline evidence gate, and a blocked shallow-reference trap. It cannot claim that a synthetic fixture taught the Skill final style.
Use scripts/prepare_reference_batch_profile.py when the user supplies multiple creator/reference videos or a reference folder, especially the four Parallel World videos plus a Malta final. Read references/reference-batch-profile-engine.md first. The script writes reference/reference_batch_profile.json, .md, and a compatibility reference/reference_analysis.json, aggregating per-video scene-cut pacing, audio loudness, sample-frame worksheet rows, and non-copying style targets for rhythm, scene grammar, opening, transitions, captions, and ending.
Use scripts/prepare_reference_review_repair_plan.py --package-dir <package> --json immediately after prepare_reference_batch_profile.py whenever the user supplies full reference videos. Read references/reference-review-completeness-contract.md first. This plan enforces full-film reference review evidence before learning: full timeline strip evidence, opening/title observations, chapter rhythm, transition language, ending aftertaste, BGM/audio/caption behavior, and non-copying Skill takeaways. ready_with_reference_review_repair_plan is a repair state, not a delivery pass; close its decision fields until it returns ready_no_reference_review_repairs_needed before final QA, V14, Skill maturity, or any claim that the Skill learned from the references.
When the supplied reference is a first-person departure/homeward chain through hotel, road, airport, gate, and aircraft, read references/homeward-flight-pov-style.md. Inherit its task-chain clarity, action anchors, transport compression, threshold shots, and state-change ending. Do not inherit its repeated horizontal-slice effect, missing BGM, absent viewer captions, or absent clean title. In Jianying, map the useful accent to the free native 横向分割 transition for about 0.34-0.42 seconds, keep it at or below 18 percent of visual boundaries, leave at least five stable boundaries before another motion accent, and downgrade to a clean/action match or 叠化 whenever movement, BGM hit, title safety, or landing evidence is weak.
When the user provides multiple downloaded creator-reference videos, especially 叽叽歪歪的平行世界, do not learn from a few random frames only. Review full-film timeline strips, opening strips, ending strips, scene-cut pacing, audio continuity, transition context, and any provided cover/title screenshots before writing Skill rules. Do not rely on memory or conversation context to preserve the v0.1.2 Parallel World lessons; keep them in durable references, scripts, or audits. Then read references/parallel-world-vlog-style.md, references/reference-profile-application-contract.md, references/reference-transition-profile-contract.md, references/chapter-story-spine-contract.md, references/shot-flow-continuity-contract.md, references/scene-flow-arc-contract.md, references/final-cut-smoothness-contract.md, references/transition-continuity-rehearsal-contract.md, references/pacing-watchability-contract.md, references/narrative-adjacency-contract.md, references/transition-viewer-orientation-contract.md, references/transition-scene-settlement-contract.md, references/transition-execution-readiness-engine.md, references/transition-microstructure-contract.md, references/transition-scene-arc-contract.md, references/transition-effect-palette-contract.md, references/transition-motif-coherence-contract.md, references/transition-visual-match-contract.md, references/transition-source-coverage-contract.md, references/transition-choreography-engine.md, references/transition-choreography-contract.md, references/transition-motion-direction-contract.md, references/transition-motion-accent-contract.md, references/transition-effect-recipe-contract.md, references/transition-cutpoint-contract.md, references/transition-action-anchor-contract.md, references/transition-sensory-continuity-contract.md, references/transition-bridge-visual-evidence-contract.md, references/transition-preview-packet-engine.md, references/transition-preview-quality-contract.md, references/transition-audition-packet-engine.md, references/transition-audition-quality-contract.md, references/transition-audition-visual-proof-contract.md, references/transition-audition-role-integrity-contract.md, references/transition-storyboard-contract.md, references/transition-breathing-room-contract.md, references/reference-scene-grammar-engine.md, and references/timeline-variety-contract.md, run scripts/audit_transition_execution_readiness_contract.py, scripts/audit_transition_microstructure_contract.py, scripts/audit_transition_scene_arc_contract.py, scripts/audit_transition_effect_palette_contract.py, scripts/audit_transition_motif_coherence_contract.py, scripts/audit_transition_visual_match_contract.py, scripts/audit_transition_source_coverage_contract.py, scripts/prepare_transition_choreography_plan.py, scripts/audit_transition_choreography_contract.py, scripts/audit_transition_motion_direction_contract.py, scripts/audit_transition_motion_accent_contract.py, scripts/audit_transition_effect_recipe_contract.py, scripts/audit_transition_cutpoint_contract.py, scripts/audit_transition_action_anchor_contract.py, scripts/audit_transition_sensory_continuity_contract.py, scripts/audit_transition_bridge_visual_evidence_contract.py, scripts/prepare_transition_preview_packet.py, scripts/audit_transition_preview_quality_contract.py, scripts/prepare_transition_audition_packet.py --build-clips, scripts/audit_transition_audition_quality_contract.py, scripts/audit_transition_audition_visual_proof_contract.py, scripts/audit_transition_audition_role_integrity_contract.py, scripts/audit_transition_storyboard_contract.py, scripts/audit_reference_transition_profile_contract.py, scripts/audit_reference_scene_grammar_contract.py, scripts/audit_reference_profile_application_contract.py, scripts/audit_chapter_story_spine_contract.py, scripts/audit_shot_flow_continuity_contract.py, scripts/audit_scene_flow_arc_contract.py, scripts/audit_final_cut_smoothness_contract.py, scripts/audit_transition_continuity_rehearsal_contract.py, scripts/audit_pacing_watchability_contract.py, scripts/audit_narrative_adjacency_contract.py, scripts/audit_transition_viewer_orientation_contract.py, scripts/audit_transition_scene_settlement_contract.py, and scripts/audit_timeline_variety_contract.py after pair-continuity/source/creator audits, and apply their non-copying cover/title, opening, scene-function, chapter story spine, shot-flow continuity, source-backed transition coverage, scene-flow arc, final-cut smoothness, transition-continuity rehearsal, pacing watchability, narrative adjacency, reference-profile application, reference-transition profile, timeline-variety, choreography, motion-direction, motion-accent restraint, effect-recipe parameter restraint, cutpoint timing, action-anchor proof, sensory continuity, bridge visual evidence, transition audition/storyboard, effect, audio, caption, and ending rules.
Use scripts/generate_title_cards.py after delivery_plan.json exists to create cinematic title/place card MP4 assets and inject them into the Resolve blueprint.
Use scripts/make_city_aerial_title.py for the opening and major city chapter hooks. It composites clean English city typography such as TOKYO, OSAKA, PARIS, or LOS ANGELES onto licensed aerial/establishing footage. Do not use a black title slate as the opening hook for a client delivery.
Use scripts/build_asset_ledger.py after delivery_plan.json exists to create the BGM/aerial/font license ledger. Final render is not allowed while BGM or stock/aerial rows remain unverified.
Use scripts/prepare_asset_sourcing_packet.py after the asset ledger exists. It writes asset_sourcing/asset_sourcing_packet.json and .md with official provider/license URLs, exact decision fields, approval evidence requirements, and next actions for BGM, aerial/stock, and font sourcing.
Use scripts/prepare_bgm_sourcing_brief.py after prepare_asset_sourcing_packet.py and before asset decisions. It writes bgm_sourcing/bgm_sourcing_brief.json and .md with a proactive long-form travel BGM search strategy: Mixkit/Pixabay-first searches, paid-library fallbacks, mood buckets by chapter, continuous-bed/opening/transition/ending section plans, decision fields, and a selection rubric. It does not download music or claim licensing; it prevents the recurring missing-BGM failure by making the exact search/selection work explicit even when no BGM has been chosen yet.
Use scripts/prepare_bgm_selection_package.py after the BGM sourcing brief and before transition/audio planning. It writes bgm_selection_package/bgm_selection_package.json and .md, plus track_manifest_for_build_bed.json when local source tracks exist. The package proves whether the selected BGM is local, license-traceable, target-duration-covering, referenced by the active Resolve blueprint, explicitly auditioned, real-music identified, non-procedural, non-tone, Content-ID checked, section-fit approved, and rebuildable with build_bgm_bed.py; after prepare_bgm_phrase_blueprint.py, read references/bgm-musicality-contract.md and run scripts/audit_bgm_musicality_contract.py so hum/tone/silence/placeholder beds cannot pass as music. It never downloads music or writes Resolve; it turns "find a suitable travel BGM" into an auditable selection/build contract.
Use scripts/prepare_transition_bridge_plan.py after the BGM sourcing brief and before asset/stock decisions. It writes transition_bridge_plan/transition_bridge_plan.json and .md with one boundary row per day/place/chapter transition, local-footage-first search hints, licensed stock/aerial fallback queries, BGM-only/no-camera-voice audio policy, subtitle/title-zone policy, restrained effect guidance, bridge evidence read from the Resolve blueprint, exact decision fields, and pass/reject rubric. It does not download assets or write Resolve; it prevents hard-cut day jumps, black-card transitions, and generic AI-looking route changes before the edit is built.
Use scripts/prepare_caption_story_plan.py after the transition bridge plan and before subtitle overlay generation. It writes caption_story_plan/caption_story_plan.json, .md, and text_only_narration_export.txt with full-film and per-chapter subtitle density targets, cue/gap evidence, title-zone suppression policy, no-voiceover/TXT/SRT handoff policy, caption function rows, rewrite decision fields, and pass/reject rubric. It does not generate TTS or write Resolve; it prevents the recurring sparse-subtitle and unwanted-voiceover failures by making the text-only narration/SRT plan explicit before the edit is rendered.
Final subtitles, SRT cues, TXT narration exports, and any burned-in caption text must be audience-facing travel-film text only. Never write captions that report to the user what was edited, fixed, removed, exported, rendered, QA-checked, delivered, or changed in the workflow. Do not expose terms such as V14, QA, DaVinci, Resolve, Codex, skill, 交付包, 时间线, 修复, 去掉, 本次剪辑, 已经完成, SRT, TXT, A1/A2/A3, or BGM-only inside final viewer-facing captions. Use scripts/audit_audience_caption_contract.py --package-dir <package> before subtitle overlay generation, after subtitle rewrites, and inside final QA. If it blocks, rewrite the captions as natural travel-film lines for the viewer before rendering.
After visible subtitles are required, run scripts/prepare_subtitle_overlay_asset.py --package-dir <package> --update-blueprint, then run scripts/audit_subtitle_overlay_contract.py --package-dir <package> before Resolve preflight or final QA. This contract must prove the subtitle manifest passed, dense overlay cue counts are materialized as package-local alpha video files, sampled overlay frames contain non-transparent subtitle pixels, the Resolve blueprint carries the subtitle clips on V3 with source audio disabled, and opening/chapter/ending title zones have zero subtitle-overlap unless the user explicitly allowed title-zone captions.
Use scripts/prepare_title_typography_plan.py before generating or trusting scenic title bridge media, then run scripts/audit_cover_title_contract.py, scripts/audit_title_visual_proof_contract.py --extract-frames, and scripts/audit_title_bridge_contract.py --package-dir <package> after scenic title media exists. After the final MP4 is rendered, run scripts/audit_rendered_title_visibility_contract.py --package-dir <package> so opening/chapter/ending title windows are proven visible over non-flat scenic/establishing background texture in the exported film, not only in source assets or Resolve blueprint rows. The plan writes title_typography_plan/title_typography_plan.json and .md with opening/chapter/ending title rows, approved title/subtitle text fields, font/license evidence, scenic background/segment evidence, title-safe rules, forbidden visible text, subtitle title-zone suppression, and stacked/ghosted-title evidence. The cover, visual-proof, title-bridge, and rendered-title audits enforce the Parallel World/Malta formula with high-recognition scenic video, oversized destination title, short designed English/place subtitle, clean 16:9 local frame proof, matching Resolve V2 title clips, final-MP4 visible title pixels, non-flat scenic background proof, and no route/date/project labels.
When title typography, title bridge, cover/title, or title visual proof blocks, run scripts/prepare_title_typography_repair_plan.py --package-dir <package> --json before Resolve apply, render, or handoff. ready_with_title_typography_repair_plan is a repair state, not a delivery pass; close its owner-script rows until it returns ready_no_title_typography_repairs_needed. Use this gate for ghosted/stacked titles, route/date/internal labels behind the hero title, black slate or stale title_cards media, title-zone subtitle collisions, missing scenic video proof, and weak cover/hero title formula.
Use scripts/prepare_visual_establishing_plan.py after the title typography plan and before trusting aerial/stock/title-bridge coverage. It writes visual_establishing_plan/visual_establishing_plan.json and .md with one row for the opening, every chapter establishing moment, and the ending; each row includes local-footage-first search hints, famous-place/landmark hints derived from the selected trip city, licensed stock/aerial fallback searches, BGM-only/no-camera-voice policy, title typography evidence, existing timeline evidence, exact decision fields, and pass/reject rubric. It does not download assets or write Resolve; it prevents missing city aerials, generic establishing shots, black/title-card openings, and stale previous-trip landmark defaults before the edit is built.
Use scripts/prepare_effect_motion_plan.py after the visual establishing plan and before Resolve effect decisions. It writes effect_motion_plan/effect_motion_plan.json and .md with restrained opening/chapter/ending title reveal rows and route-transition motion rows, tied to title typography, transition bridge, visual establishing, and blueprint effectPlan evidence. It records subtle fade/dissolve/match-cut/route-marker guidance plus motivated whip-pan/rotation match-cut options only when real route motion supports them; after transition/bridge candidate blueprints exist, read references/effect-motion-blueprint-engine.md and references/effect-motion-application-contract.md, run scripts/prepare_effect_motion_blueprint.py, then run scripts/audit_effect_motion_application_contract.py after final blueprint lineage so effects become applied candidate metadata instead of prose-only suggestions.
Use scripts/prepare_feedback_regression_plan.py after effect motion planning and before audio scene policy. It writes feedback_regression_plan/feedback_regression_plan.json and .md with reusable probes for concrete rejected draft failures such as opening_title=0, reported_vertical_clip=7:04, reported_voice_at_7_04=7:04, and opening_bgm_no_voice=0. The plan produces the exact --feedback-timestamps strings for prepare_audio_scene_policy_plan.py, audit_feedback_regressions.py, and run_final_qa_suite.py. It does not write Resolve, queue renders, download assets, or touch source media; it makes the user's complaint set machine-readable before the next edit.
Use scripts/prepare_audio_scene_policy_plan.py after the feedback regression plan and before asset decisions or Resolve writes. It writes audio_scene_policy_plan/audio_scene_policy_plan.json and .md with opening, title, visual-establishing, transition, effect, and feedback-timestamp audio windows; every row must be A3 BGM-led, bgm_only_no_camera_voice, and free of A1/A2 source-camera or voiceover leakage unless an explicit ambient exception is approved. It also consumes feedback_regression_plan.json and keeps known user feedback probes such as 7:04 scenic/voice complaints as reusable regression rows. It does not download assets or write Resolve; it prevents missing-BGM and accidental user/source-voice failures before the timeline is built.
Use scripts/prepare_edit_rhythm_plan.py after the footage select plan, opening story plan, audio scene policy plan, and package build, and before asset decisions or Resolve writes. It writes edit_rhythm_plan/edit_rhythm_plan.json and .md with one row per primary visual shot, one row per chapter, Malta/reference pacing targets, rhythm-role categories, long-shot/cutaway risks, recommended trim/split/cutaway treatments, exact Resolve/readback decision fields, and pass/reject rubric. It does not write Resolve; it prevents bare concatenation and AI-looking flat pacing by forcing every selected shot to have a route, street, lived-in, landmark, scenic, title, transition, or ending function before the cut is trusted.
Use scripts/prepare_creator_cut_plan.py after the edit rhythm plan and before rhythm recut or Resolve writes when the user wants the cut closer to the four Parallel World videos, the Malta final, or creator-quality long-form travel. Read references/creator-cut-engine.md first, then read references/creator-cut-application-contract.md and references/final-source-usage-contract.md before auditing final candidates. The script writes creator_cut_plan/creator_cut_plan.json and .md with one creator-function row per visual clip, hero/main/texture/utility/reject tiers, explicit weak-clip rejection or demotion, chapter coverage rows, and motivated transition recipes including whip-pan/rotation only when movement evidence supports them. Run scripts/audit_final_source_usage_contract.py and scripts/audit_creator_cut_application_contract.py after transition-polish/rhythm candidates so unmatched raw sources, reject/repair clips, utility-dominant source choices, and weak creator-cut rows cannot remain active in the final candidate blueprint. It does not write Resolve; it prevents the Skill from keeping every usable clip and calling that a creator edit.
Use scripts/prepare_transition_grammar_plan.py after the creator cut plan and before rhythm recut or Resolve writes when transitions need to feel closer to the Parallel World/Malta references. Read references/transition-grammar-engine.md first. The script writes transition_grammar_plan/transition_grammar_plan.json and .md with one row per adjacent visual pair, recommended transition type, fallback transition type, bridge evidence, motion evidence, title/caption safety, BGM phrase cue fields, and exact Resolve/readback decision fields. It only allows whip-pan, rotation, and speed-ramp transitions when physical route motion supports them; otherwise it recommends match cuts, short dissolves, straight cuts, or insert_bridge_first. Do not treat field presence as approval: every row must carry a concrete non-generic pre-Resolve decision, BGM cue, preview requirement, frame/sample evidence, and title/motion safety evidence before the plan is trusted.
Use scripts/prepare_transition_execution_plan.py after the transition grammar plan and before rhythm recut, Resolve blueprint updates, or Resolve writes when transitions must become executable rather than advisory. Read references/transition-execution-engine.md first, then run scripts/prepare_transition_reference_candidates.py, scripts/prepare_transition_reference_selection.py, scripts/prepare_transition_motif_plan.py, scripts/prepare_bridge_sequence_plan.py, scripts/prepare_bridge_sequence_blueprint.py, scripts/prepare_transition_choreography_plan.py, and scripts/prepare_transition_execution_blueprint.py; read references/transition-reference-candidate-engine.md, references/transition-reference-selection-engine.md, references/transition-motif-engine.md, references/bridge-sequence-engine.md, references/bridge-sequence-blueprint-engine.md, references/transition-choreography-engine.md, and references/transition-execution-blueprint-engine.md so repeated dissolves, random motion, missing BGM cues, effect-hidden route jumps, and single-effect transitions become reference-calibrated A/B/C candidates, unattended-safe default selections with boundary-specific from/to reasons plus preview/audition/execution/readiness proof plans, Resolve marker/clip metadata carrying the selected candidate plus transitionMotionExecution, transitionCutpointPlan, transitionActionAnchorPlan, and transitionSensoryContinuityPlan, and Resolve-ready bridge clips with repair owners. After BGM phrase and rhythm recut candidates exist, run scripts/prepare_transition_polish_blueprint.py, scripts/audit_transition_quality_contract.py, scripts/audit_shot_transition_boundary_contract.py, scripts/audit_transition_motivation_contract.py, scripts/audit_transition_pair_continuity_contract.py, scripts/audit_transition_execution_readiness_contract.py, scripts/audit_transition_polish_application_contract.py, scripts/audit_resolve_transition_materialization_contract.py, scripts/prepare_resolve_transition_apply_plan.py, scripts/audit_resolve_transition_apply_contract.py, scripts/audit_bridge_sequence_application_contract.py, scripts/audit_transition_bridge_visual_evidence_contract.py, scripts/audit_final_blueprint_lineage_contract.py, scripts/audit_effect_motion_application_contract.py, scripts/audit_transition_cadence_contract.py, scripts/audit_transition_microstructure_contract.py, scripts/audit_transition_scene_arc_contract.py, scripts/audit_transition_effect_palette_contract.py, scripts/audit_transition_motif_coherence_contract.py, scripts/audit_transition_visual_match_contract.py, scripts/audit_transition_source_coverage_contract.py, scripts/prepare_transition_choreography_plan.py, scripts/audit_transition_choreography_contract.py, scripts/audit_transition_motion_direction_contract.py, scripts/audit_transition_motion_accent_contract.py, scripts/audit_transition_cutpoint_contract.py, scripts/audit_transition_action_anchor_contract.py, scripts/audit_transition_sensory_continuity_contract.py, scripts/prepare_transition_preview_packet.py, scripts/audit_transition_preview_quality_contract.py, scripts/prepare_transition_audition_packet.py --build-clips, scripts/audit_transition_audition_quality_contract.py, scripts/audit_transition_audition_visual_proof_contract.py, scripts/audit_transition_audition_role_integrity_contract.py, scripts/audit_transition_storyboard_contract.py, scripts/audit_reference_transition_profile_contract.py, scripts/audit_scene_flow_arc_contract.py, scripts/audit_final_cut_smoothness_contract.py, scripts/audit_transition_continuity_rehearsal_contract.py, scripts/audit_narrative_adjacency_contract.py, scripts/audit_transition_viewer_orientation_contract.py, scripts/audit_transition_scene_settlement_contract.py, and scripts/audit_timeline_variety_contract.py, then read references/transition-polish-blueprint-engine.md, references/transition-choreography-engine.md, references/transition-choreography-contract.md, references/transition-motion-direction-contract.md, references/transition-motion-accent-contract.md, references/transition-cutpoint-contract.md, references/transition-action-anchor-contract.md, references/transition-sensory-continuity-contract.md, references/reference-transition-profile-contract.md, references/scene-flow-arc-contract.md, references/final-cut-smoothness-contract.md, references/transition-continuity-rehearsal-contract.md, references/narrative-adjacency-contract.md, references/transition-viewer-orientation-contract.md, references/transition-scene-settlement-contract.md, references/transition-execution-readiness-engine.md, references/transition-polish-application-contract.md, references/resolve-transition-materialization-contract.md, references/resolve-transition-apply-contract.md, references/bridge-sequence-application-contract.md, references/transition-bridge-visual-evidence-contract.md, references/final-blueprint-lineage-contract.md, references/effect-motion-application-contract.md, references/transition-cadence-contract.md, references/transition-microstructure-contract.md, references/transition-scene-arc-contract.md, references/transition-effect-palette-contract.md, references/transition-motif-coherence-contract.md, references/transition-visual-match-contract.md, references/transition-source-coverage-contract.md, references/transition-preview-packet-engine.md, references/transition-preview-quality-contract.md, references/transition-audition-packet-engine.md, references/transition-audition-quality-contract.md, references/transition-audition-visual-proof-contract.md, references/transition-audition-role-integrity-contract.md, references/transition-storyboard-contract.md, and references/timeline-variety-contract.md so every final transition carries BGM-hit timing, title/subtitle avoidance, sensory-continuity proof, motion-evidence, motion-accent restraint, source-level outgoing/bridge/landing coverage, and direction-match proof, cutpoint leave/hit/landing timing, readable action-anchor proof, restrained Resolve keyframes, three-beat outgoing/bridge-or-motion/landing choreography, reference-profile bridge/breath/match/motion balance, per-boundary from/to coverage, pair-continuity evidence, package-local Resolve recipe/handle readiness, shot-to-shot landing/handle/BGM-only/title-safe microstructure, outgoing/bridge-or-motion/BGM-hit/title-safe/landing scene-arc proof, whole-film effect-palette and motif-coherence balance, pair-level visual-match proof, concrete bridge video probe/frame evidence, generated nonblank preview evidence, muted watchable MP4 audition plus frame-delta and role-integrity proof, viewer-purpose/outgoing/bridge/landing storyboard, row-to-row transition-continuity rehearsal, Resolve marker/readback payload survival, API/manual/bridge apply-path proof, final-blueprint polish survival, final-candidate bridge-beat survival, final-blueprint candidate-chain lineage, effect-motion application proof, whole-film cadence, scene-flow arc proof, final-cut smoothness proof, narrative adjacency proof, viewer-orientation and scene-settlement proof, and route/bridge/motion/title/BGM motivation while the full timeline still varies movement, lived-in texture, payoff, and aftertaste instead of generic hard cuts or random rotations. In unattended/default delivery, prepare_transition_reference_selection.py must return zero decision issues before Resolve apply, and prepare_resolve_transition_apply_plan.py plus audit_resolve_transition_apply_contract.py must block pending manual visible effects; a planned Resolve/Fusion instruction is not proof of application unless the row has completed Resolve readback plus frame-sample evidence, or the effect is replaced by materialized bridge clips.
When scripts/audit_transition_motion_accent_contract.py blocks on random rotation, whip, push, slide, zoom, speed-ramp, overuse, weak direction, missing BGM hit, title/subtitle risk, or unstable landing, run scripts/prepare_transition_motion_accent_repair_plan.py --package-dir <package> --json before another Resolve write. Its ready_with_transition_motion_accent_repair_plan status is a repair state, not a delivery pass; run each owner script in its repair rows and rerun final QA until the plan returns ready_no_motion_accent_repairs_needed.
When transition cadence, microstructure, scene arc, effect palette, motif coherence, visual match, source coverage, choreography, cutpoint, action-anchor, sensory-continuity, preview/audition, breathing-room, final-cut smoothness, pacing, narrative adjacency, viewer orientation, or scene settlement blocks, run scripts/prepare_transition_flow_repair_plan.py --package-dir <package> --json before Resolve apply, render, or handoff. ready_with_transition_flow_repair_plan is a repair state, not a delivery pass; close its owner-script rows until it returns ready_no_transition_flow_repairs_needed. Use this gate for weak adjacent-shot flow, random hard cuts, template-effect cadence, missing bridge/landing footage, marker-only visible effects, unpreviewed transitions, unstable landings, and route/story jumps that still feel unlike the Parallel World/Malta references.
Use scripts/prepare_rhythm_recut_blueprint.py after the BGM phrase candidate exists and before asset decisions or Resolve writes. It writes rhythm_recut_blueprint/resolve_timeline_blueprint_rhythm_recut.json plus JSON/MD reports that convert long-shot diagnosis into a non-destructive Resolve blueprint candidate while preserving transition/effect/BGM phrase metadata: long raw holds are split into shorter main segments with existing-footage cutaways, total timeline duration is preserved, A1/A2/source audio stays disabled for inserted video, and the original resolve_timeline_blueprint.json is not modified unless --update-blueprint is explicitly requested. Read references/rhythm-recut-application-contract.md, run scripts/audit_rhythm_recut_application_contract.py after transition polish/final lineage, and always preflight final candidates with audit_resolve_blueprint.py --blueprint <candidate> --package-dir <package> before any Resolve apply.
Use scripts/prepare_rhythm_recut_apply_package.py after the rhythm-recut candidate is reviewed and before any Resolve write. It forks a new package, copies only reusable input/assets/plans instead of stale final render proof, rewrites package-internal paths, makes the candidate blueprint the new package's active resolve_timeline_blueprint.json, runs optional preflight, and writes rhythm_recut_apply_package_report.json/.md. This is the safe bridge from "candidate looks good" to "new Resolve-ready package"; do not manually overwrite the source package blueprint unless the user explicitly asks for an in-place update.
Use scripts/prepare_reference_style_repair_plan.py after rhythm recut planning, reference-style audits, director-intent audits, director-polish audits, or final QA when the cut still feels unlike the Parallel World/Malta references. Read references/reference-style-repair-engine.md first. The script writes reference_style_repair_plan/reference_style_repair_plan.json and .md with one repair row per blocked style/director/QA gap: owner script, required artifact, repair action, acceptance evidence, reference rule, safety flags, and Resolve/readback/render-frame decision fields. Then run scripts/audit_reference_repair_closure.py so P0 style rows cannot be treated as fixed until required artifacts, post-repair audits, and readback/frame evidence close them. These scripts convert vague "make it better" feedback into a repair queue and closure gate without writing Resolve, rendering, downloading assets, or modifying source footage; after closure/preflight, read references/transition-sequence-satisfaction-contract.md, references/final-viewer-friction-contract.md, references/first-draft-satisfaction-contract.md, references/whole-film-satisfaction-contract.md, and references/unattended-repair-queue-engine.md, then run scripts/audit_transition_sequence_satisfaction_contract.py, scripts/audit_final_viewer_friction_contract.py, scripts/audit_first_draft_satisfaction_contract.py, scripts/prepare_unattended_repair_queue.py, and scripts/audit_whole_film_satisfaction_contract.py so transition-sequence, viewer-facing, blocked_first_draft_satisfaction, blocked_whole_film_satisfaction, and remaining QA blockers have owner scripts, resolved commands, execution order, required artifacts, acceptance evidence, post-repair commands, and forbidden-workaround rules. If whole-film satisfaction blocks, rerun the unattended queue so its embedded repair rows become executable. The unattended repair queue must also route resolve_transition_apply_contract_audit.json blockers: pending manual visible effects are not acceptable repairs until they become API-supported cuts, materialized bridge clips, or completed Resolve readback plus frame-sample evidence. When final_qa_suite_report.json exists, the repair queue must ingest blocked final-QA stages and route each untracked BGM, caption, title, reference-style, source, transition, render, or package-integrity failure to the concrete owner preparation script instead of leaving the next agent to infer repairs from final QA alone. Queue rows with unresolved placeholders such as <project-dir> or <final-mp4> are not unattended-ready.
Use scripts/build_route_coverage_scaffold.py when route_timeline.json covers too little media. It builds a full-media route scaffold from ordered media plus chapter/map filename cues, writes route_coverage_scaffold.json, .md, contact_sheet.jpg, and latest_route_coverage_scaffold.json, and marks every scaffold chapter as needing human review.
Use scripts/prepare_route_review.py whenever route chapters need human review, the project title/route conflicts with recognized media, or confirmed_route_timeline.json is stale. It writes route_review.json, route_review.md, contact_sheet.jpg, and latest_route_review.json.
Use scripts/prepare_route_decision_sheet.py after a route review packet exists. It writes route_decision_sheet.json/.md with suggested per-chapter decisions and a region-mismatch approval block. It never applies decisions or writes confirmed_route_timeline.json.
Use scripts/apply_route_decision_sheet.py after route_decision_sheet.json has been reviewed and approved. By default it writes route_decision_application.json/.md only. Use --apply only after the user explicitly approves writing decisions back into route_review.json; it still never writes confirmed_route_timeline.json.
Use scripts/prepare_confirmed_route_candidate.py after route review decisions are made. It writes a gated confirmed_route_candidate.json/.md and only writes confirmed_route_timeline.json with --apply when all route gates pass and the user explicitly approves.
Use scripts/apply_asset_sourcing_decisions.py after exact BGM/stock/aerial/font choices are filled in asset_sourcing_packet.json. By default it writes asset_decision_reconciliation.json/.md only. Use --apply only after every final asset row has exact asset, license, approval, and local/URL evidence.
Use scripts/audit_unattended_first_draft_contract.py after audience captions, BGM/audio policy, title/cover, rhythm/creator-cut, transition motivation, pair-continuity, execution-readiness, transition-microstructure, transition-scene-arc, transition-effect-palette, transition-motif-coherence, transition-visual-match, transition-choreography, transition-motion-direction, transition-motion-accent, transition-cutpoint, transition-action-anchor, transition-bridge-visual-evidence, transition-preview-packet, transition-preview-quality, transition-audition-packet, transition-audition-quality, transition-audition-visual-proof, transition-audition-role-integrity, transition-storyboard, transition-breathing-room, scene-flow-arc, final-cut-smoothness, transition-continuity-rehearsal, pacing-watchability, narrative-adjacency, transition-viewer-orientation, transition-scene-settlement, transition-sequence-satisfaction, reference-transition-profile, reference scene-grammar, timeline-variety, reference-repair closure, final-viewer-friction, first-draft-satisfaction, whole-film-satisfaction, unattended repair queue, and Resolve blueprint preflight exist; then use scripts/audit_delivery_package.py before claiming the package is ready. The first audit proves the safe first-draft chain is connected before Resolve apply and that blockers are routed to executable repairs, while the delivery audit writes delivery_audit.json and delivery_audit.md with blockers and next actions.
Use scripts/prepare_resolve_apply_contract.py after the Resolve blueprint and delivery audit exist. It writes resolve_apply_contract.json/.md with project/timeline name, tracks, source counts, clip counts, write/readback commands, current blockers, and approval fields. It never writes Resolve.
Use scripts/prepare_resolve_render.py after the Resolve timeline is written and read back. It writes render_plan.json by default without changing Resolve and must include a VideoQuality high-bitrate target, normally numeric 80000 or higher for 4K long-form masters. --queue and --start require explicit user approval plus a clean delivery audit and resolve_audit.json.
Use scripts/verify_render_delivery.py after any Resolve or FFmpeg final render before claiming delivery. It verifies the final MP4 with ffprobe, full-film blackdetect, sampled frame extraction/luma checks, audio/video stream checks, and subtitle evidence. Then read references/rendered-transition-proof-contract.md and run scripts/audit_rendered_transition_proof_contract.py so actual rendered transition windows cannot hide black flashes, white flashes, raw pillarboxed vertical footage, or unstable landings. A render that exists but fails either verification is not deliverable.
Use scripts/audit_longform_delivery.py after verify_render_delivery.py passes. It writes longform_delivery_audit.json/.md and checks the whole 20-minute-film promise: final MP4, duration, 4K video, audio, black-frame scan, DaVinci readback, voiceover, subtitles, BGM, aerial/stock evidence, title cards, transitions, route-recognition artifacts, route honesty, and handoff documents. passed_with_caveats is acceptable for a rough travel film when the caveat is explicitly about non-GPS/per-clip route certainty; it is not acceptable if the user requires verified per-clip locations.
Use scripts/audit_client_delivery_rules.py before claiming a film is usable for a customer. It blocks if recognition did not cover the whole folder, the confirmed route is a single scaffold chapter, derived exports are mixed into raw footage, portrait/rotated media lacks a normalization policy, the actual Resolve blueprint source paths contain any raw portrait/square/unknown video clip in the 16:9 master, the opening does not start with city aerial/establishing footage plus clean city title typography, title text exposes internal IDs or placeholder Chinese, opening/chapter/ending title moments are black slates instead of scenic video bridges, SRT is missing/sparse, BGM is not on A3, transitions are not represented by visual bridge clips, effects are not planned, licenses are unverified, the final render is not valid 4K high-frame-rate/high-bitrate, or render verification has not passed.
When a draft has already rendered but its first frame, chapter cards, or ending feel like generic AI output, create a visual_polish or v8_visual_polish package before re-verification. This package must include a manifest with route-aware opening, chapter, and ending replacement segments. Each segment must use real approved video footage or licensed stock/aerial footage as its background, not PNG/JPG title cards, title_cards black slates, random project IDs, generic JAPAN labels, phone/hand-obstructed frames, or placeholder Chinese.
Do not trust a visual-polish manifest by itself. The final Resolve blueprint must actually reference the scenic title/bridge clips on V2. audit_client_delivery_rules.py must inspect the blueprint source paths and block if any opening/chapter/ending title moment still points to title_cards/*.mp4, PNG/JPG slates, missing media, or long place-description text that can crop at 4K. Use a role such as chapter_title_bridge for scenic chapter title clips that replace old place_card slates.
Use scripts/prepare_quality_recut.py when a draft looks too AI-made, too low frame-rate, too sparse, or too narration-heavy. It prepares a v4-style package with 59.94fps defaults, no rendered voiceover audio, text-only narration export, dense full-film captions, BGM kept as a required audible asset, and opening/ending aerial inserts. After rendering such a package, run verify_render_delivery.py with --min-fps 50 --min-video-bitrate-mbps 60.
Use scripts/prepare_scenic_title_bridges.py whenever opening/chapter/ending title moments contain black slates, stale title_cards, full-route labels, generic date labels, subtitles over the hero title, or template-looking lower-corner route text. It regenerates scenic title bridge videos from approved aerial/establishing/travel footage, draws only a clean main title plus optional short day/place subtitle, writes a contact sheet, and can update the Resolve blueprint. The default title policy forbids global route labels such as TOKYO / OSAKA, JAPAN 2025, OSAKA - TOKYO - OSAKA, or OSAKA -> TOKYO -> OSAKA inside final title bridge media.
Use scripts/audit_feedback_regressions.py after any concrete user complaint about a rendered draft. Pass the exact timestamps from the user, for example --feedback-timestamps opening_title=0,reported_vertical_clip=7:04 --include-title-points. It turns the complaint into a reusable regression gate by checking the final Resolve render, clean title policy, sampled frames, portrait/pillarbox metrics, BGM audibility, A1/A2/A3 Resolve readback, no source-camera/voiceover leakage in scenic sections, dense V3 subtitle overlays, and title-zone subtitle suppression. Do not close a feedback loop until this audit passes or the remaining blockers are written as explicit next actions.
Use scripts/audit_reference_style_alignment.py after audit_story_style_contract.py when the user wants the Skill to approach Bilibili/Malta-style long-form travel quality rather than merely pass technical checks. It scores reference material, long-form duration, route chapters, transport connective tissue, street/lived-in/landmark balance, real-footage variety, scenic title/bridge structure, no-voiceover BGM/caption support, and upstream QA evidence. Treat it as the "does this still feel like a travel film instead of an AI assembly" gate.
Use scripts/audit_director_intent_contract.py after reference-style alignment and before director-polish claims. It writes director_intent_manifest.json plus director_intent_contract_audit.json/.md, proving the cut has an explicit director intent: opening mission and city signal, chapter beat categories, arrival-to-return route arc, long-form shot pacing, caption-led story/honesty, BGM/no-voiceover support, and an ending with scenic aftertaste. This is the reusable guard against technically valid but emotionally flat AI assemblies.
Use scripts/audit_route_texture_contract.py after reference-style alignment and before title/package-integrity handoff. It verifies that route transitions are backed by actual bridge clips on the timeline, chapter title moments have nearby route connective tissue, every chapter has lived-in texture beyond title cards, and the global cut balances movement, street life, daily detail, and landmark payoff. This is the deterministic guard against landmark-only montages, hard-cut day jumps, or AI-looking travel assemblies that technically render but do not feel traveled.
Use scripts/audit_director_polish_contract.py after title, BGM, route-texture, and reference-style audits. It cross-checks the director-level delivery promise: verified aerial/establishing opening, clean typography and font evidence, travel-appropriate BGM mood/licensing, restrained title/transition effects, dense rendered subtitles, Resolve track readback, and 4K high-frame-rate/high-bitrate output. Treat passed_with_warnings as acceptable only when the warnings are explicit handoff risks such as optional stock/aerial search placeholders that have not been materialized; do not hide those warnings.
Use scripts/audit_stock_aerial_closure.py after route-texture and title audits, and before director polish. It verifies that every stock/aerial search placeholder in stockInsertPlan is either materialized as a verified local asset or explicitly closed as not used in the final Resolve render and covered by real local route/title footage. Run with --update-blueprint when you want resolve_timeline_blueprint.json to record the closure policy. Do not fabricate that a stock clip was downloaded; unresolved placeholders must remain blockers.
Use scripts/audit_package_integrity.py before any handoff claim, especially after copying or deriving a package from an older package. It verifies that final render evidence points at the current package, Resolve readback identity matches the current blueprint, core QA reports have acceptable statuses, and stale/cross-package paths are visible. A historical cross-package voiceover marker may be closed only when Resolve readback has zero A1/A2 items, A3 BGM exists, and BGM/story contracts prove BGM-only no-voiceover delivery. Run --strict-portable before giving the package to another editor, another AI, or a client; strict mode blocks when active core package evidence still depends on previous delivery package paths.
Use scripts/audit_title_bridge_contract.py after scenic title bridges are generated and again after the final Resolve render, then run scripts/audit_title_visual_proof_contract.py --package-dir <package> --extract-frames so the clean title claim has actual local probe/frame evidence. These verify that the clean title-bridge manifest, segment files, overlay files, Resolve V2 title clips, single-city opening title, forbidden visible text, no stacked text or subtitle overlay layers inside title windows, video-only scenic source policy, subtitle title-zone suppression, and three-frame 16:9 visual proof all agree. This is the deterministic guard for the user's repeated opening-title complaint; OCR is useful evidence, but the title contracts are the stronger structural proof.
Use scripts/audit_bgm_audio_contract.py after BGM is selected/built and again after the final Resolve render, then run scripts/audit_bgm_musicality_contract.py before Resolve apply/final QA. After the final MP4 exists, read references/final-bgm-mix-contract.md and run scripts/audit_final_bgm_mix_contract.py --package-dir <package> before story/style/V14/maturity claims. The audio contract verifies that the BGM manifest output, Resolve blueprint assets.bgm, A3 cue, current-package materialized audio bed, asset ledger BGM row, DaVinci A1/A2/A3 readback, visual/audio loudness, feedback timestamp audio windows, no-camera/no-voiceover policy, and no A1/A2 voice or source-audio clips overlapping scenic/title/transition windows all agree; the musicality contract rejects sine/hum/tone/silence/placeholder beds, one-band audio, flat dynamics, missing phrase sections, or unnamed/untraceable music; the final mix contract samples the exported MP4 so title, scenic bridge, transition, and ending windows cannot pass with missing, quiet, or hum-like BGM. This is the deterministic guard for the user's repeated BGM complaint: scenic openings, title moments, and transition/landscape sections must be BGM-led and must not leak source-camera/user voice.
Use scripts/audit_skill_maturity_contract.py after package-integrity QA when judging whether the reusable Skill, not just one film, covers the user's repeated delivery failures. It checks Skill instructions, bundled scripts, Bilibili/Malta style anchors, render quality, rendered transition proof, feedback regressions, clean non-duplicated opening title plus actual title visual proof and title repair planning, proactive raw-footage selection, first-assembly source-order proof via audit_first_assembly_source_order_contract.py and first-assembly-source-order-contract.md, large-source unattended readiness via audit_large_source_unattended_readiness_contract.py and large-source-unattended-readiness-contract.md, opening story planning, proactive BGM, BGM musicality, final rendered BGM mix, transition-bridge, caption-story, title-typography, visual-establishing, effect-motion, audio-scene-policy, edit-rhythm planning, creator-cut shot selection/application, final-source usage, timeline-variety, transition-grammar pair decisions, transition cadence, transition microstructure, transition scene-arc, transition effect-palette, transition motif-coherence, transition visual-match, transition-flow repair planning, transition-effect recipe, transition-breathing-room, scene-flow-arc, final-cut-smoothness, transition-continuity-rehearsal, pacing-watchability, narrative-adjacency, transition-viewer-orientation, transition-scene-settlement, reference-transition-profile, transition bridge visual evidence, transition preview-quality, transition pair-continuity, transition execution-readiness, transition-polish application, Resolve transition materialization/apply-path proof, bridge-sequence application, final-blueprint lineage, reference scene-grammar, reference-profile application, rhythm-recut candidate blueprints, rhythm-recut apply package forks, audit_unattended_first_draft_contract.py, audit_first_draft_satisfaction_contract.py, audit_whole_film_satisfaction_contract.py, BGM/no-voiceover, recognition/route evidence, director intent, route texture, stock/aerial closure, director polish, and strict portable handoff. Treat it as one-package evidence; it does not prove the long-term Skill goal complete without more forward tests on other trips.
Use scripts/audit_trip_generalization_contract.py after adding or changing any rescue/repair script that was born from a specific trip failure. It blocks if reusable package, style-fix, orientation-repair, quality-recut, or route-decision scripts still force previous-trip defaults such as TOKYO/Japan/Tokyo-to-Osaka instead of deriving titles, countries, Resolve names, BGM mood, and route labels from the selected project or explicit arguments. Passing it does not prove the film is good; it proves the Skill will not silently contaminate a Hong Kong/Macau, Europe, or future trip with stale Japan-specific rescue logic.
Use scripts/audit_v012_baseline_regression.py --skill-dir <skill-dir> after substantial Skill edits and before publishing a release. It blocks if the original v0.1.2 lessons regress: Parallel World references must still require full-film review rather than random frames, cover/hero titles must still use the high-recognition scenic background plus oversized destination title formula, the main workflow must still load parallel-world-vlog-style.md, title typography and cover contracts must still guard the opening/title style, Skill maturity must still preserve the cover/opening/transition/ending lessons, and private local download/desktop/temp-frame paths from the reference-learning run must not leak into the portable Skill.
Use scripts/run_skill_release_audit.py --skill-dir <skill-dir> before publishing a release or handing the Skill to another agent. It is a portable, no-network, no-Resolve-write release gate that checks SKILL.md trigger metadata, required release-gate files including create_skill_benchmark_fixture.py, audit_editor_integration_contract.py, audit_resolve_writeability_state.py, audit_jianying_capcut_state.py, prepare_jianying_handoff_package.py, audit_jianying_handoff_contract.py, audit_jianying_tts_export_readiness.py, run_no_material_editor_smoke.py, run_no_material_music_pacing_smoke.py, run_no_material_bgm_musicality_smoke.py, run_no_material_rendered_watchdown_smoke.py, run_no_material_final_render_quality_bundle_smoke.py, run_no_material_whole_film_satisfaction_smoke.py, run_no_material_one_shot_autonomy_smoke.py, run_no_material_forward_test_smoke.py, run_no_material_capcut_draft_automation_smoke.py, run_resolve_live_write_smoke.py, run_resolve_delivery_structure_smoke.py, run_resolve_render_readiness_smoke.py, and run_editor_delivery_matrix.py, release-audit wiring, Python compilation, the v0.1.2 baseline audit, and trip-generalization. If it blocks, fix the missing Skill file, integration token, compile error, v0.1.2 regression, or trip-specific default before tagging or publishing.
Use scripts/audit_skill_forward_test_contract.py after substantial Skill revisions or before claiming the Skill is mature across trips. It consumes an external media intake packet, a known-good package, a separate blocked project/location-truth report, and that blocked project's recovery plan to prove the Skill can both deliver a ready trip, refuse unsafe/mismatched trip states, and hand the next agent an actionable recovery route. The known-good package must pass both its full final QA suite and the current client delivery audit, including the latest actual-blueprint source-orientation gate; do not trust a stale final QA report generated before a new regression gate existed. A credible run should look like audit_skill_forward_test_contract.py --intake-json <external_media_intake.json> --ready-package-dir <passed-package> --blocked-project-dir <separate-trip-project> --blocked-location-truth-json <blocked-location-truth.json> --blocked-recovery-plan-json <blocked_project_recovery_plan.json> --output-dir <skill-upgrade>/qa/<forward-test-run>. Passing it is stronger than one-package QA, but still not a universal completion proof.
Use scripts/run_final_qa_suite.py as the final handoff gate after a Resolve render exists. It infers the final MP4, visual title-bridge manifest, and BGM manifest when possible, then runs or verifies render delivery, visual/audio style, BGM/audio and BGM-musicality contracts, location truth contract, client rules, long-form delivery, story style, reference alignment, director intent contract, route texture contract, title bridge/cover/title-visual-proof/title-repair contracts, stock/aerial closure, director polish contract, feedback regression, default package integrity, strict portable package integrity, transition pair-continuity, transition execution-readiness, transition-polish application, Resolve transition materialization/apply contract, bridge-sequence application, transition bridge visual evidence, source-selection coverage, first-assembly source-order, large-source unattended-readiness, final-blueprint lineage, transition cadence, transition microstructure, transition scene-arc, transition effect-palette, transition motif-coherence, transition visual-match, transition motion-direction, transition-flow repair, transition reference-readiness, transition-sequence-satisfaction, transition effect-recipe, rendered transition proof, transition preview-quality, transition audition quality/visual/role proof, transition-breathing-room, scene-flow-arc, final-cut-smoothness, transition-continuity-rehearsal, pacing-watchability, narrative-adjacency, transition-viewer-orientation, transition-scene-settlement, final-source usage, creator-cut application, reference scene-grammar, reference-review repair, reference-profile application, reference-transition-profile, timeline-variety, first-draft-satisfaction, whole-film-satisfaction, unattended-first-draft contract, and Skill maturity contract in one reproducible report. Final QA must require title_typography_repair_plan to be ready_no_title_typography_repairs_needed, reference_review_repair_plan to be ready_no_reference_review_repairs_needed, transition_flow_repair_plan to be ready_no_transition_flow_repairs_needed, transition_sequence_satisfaction_contract_audit to be passed, first_draft_satisfaction_contract_audit to be passed, whole_film_satisfaction_contract_audit to be passed, and unattended_repair_queue to be ready_no_unattended_repairs_needed; repair-plan statuses with rows are actionable repair states, not handoff passes. Do not claim the Skill or a package is ready for another AI, editor, or client unless final_qa_suite_report.json is passed with zero remaining repair rows, or the remaining blockers are explicitly listed as next actions.
Use scripts/audit_v14_baseline_contract.py as the reusable "first draft should already feel like V14" gate. It proves the Skill has internalized the successful V14 lessons rather than only storing a historical edit: DaVinci Resolve finishing and readback, full-source first-assembly ordering instead of filename order or blueprint fallback, 100GB large-source unattended-readiness, first-three-minute opening story plan, clean scenic title bridges with actual frame proof and no duplicate/ghosted route/date text, reusable opening/7:04/BGM regression probes, BGM-only no-voiceover TXT/SRT delivery plus BGM musicality and final rendered mix proof, dense title-safe V3 subtitle overlays, source-orientation scan plus V14-style portrait repair, opening/chapter/ending establishing material with aerial or local scenic evidence, Bilibili/Malta reference rhythm, scene grammar, reference-profile application, and reference-transition-profile, creator-cut shot selection/application, final-source usage, timeline-variety, transition grammar, transition cadence, transition microstructure, transition scene-arc, transition effect-palette, transition motif-coherence, transition visual-match, transition motion-direction, transition-breathing-room, transition-sequence-satisfaction via transition-sequence-satisfaction-contract.md, scene-flow-arc, final-cut-smoothness, transition-continuity-rehearsal, pacing-watchability, narrative-adjacency, transition-viewer-orientation, transition-scene-settlement, transition bridge visual evidence, transition preview-quality, transition audition quality/visual/role proof, pair-continuity, execution-readiness, transition-polish application, Resolve transition materialization/apply-path proof, bridge-sequence application, final-blueprint lineage, rendered transition proof, final-viewer-friction closure, first-draft-satisfaction closure via first-draft-satisfaction-contract.md, whole-film-satisfaction closure via whole-film-satisfaction-contract.md, route texture, director polish, the final QA floor, and the Skill maturity floor. Run it after Skill edits and in final QA. If it blocks, fix the Skill rule/script/report that failed; do not create a V15/V16 package just to work around the missing reusable behavior.
Style QA Upgrade
Read references/bilibili-travel-style.md before any long-form travel structure, title, narration, BGM, transition, or final QA work. Treat the listed creators and the local Malta film as non-copying style references: extract pacing, route rhythm, transition craft, title restraint, BGM energy, and subtitle density, but never copy their exact titles, music, narration, or footage. Read references/parallel-world-vlog-style.md when the user references 叽叽歪歪的平行世界, provides downloaded videos from that creator, asks how the cover/thumbnail is made, or wants a first draft closer to that Bilibili long-form travel style.
For cover, thumbnail, and hero title design, follow the Parallel World cover formula: high-recognition aerial/skyline/coast/landmark/route background; oversized 1-5 word Chinese destination title; smaller English/place subtitle beneath; yellow/orange/white high-contrast typography; no route/date clutter, stacked city names, internal labels, project slugs, or subtitles over the hero title.
Resolve is the default finishing surface when DaVinci Resolve is installed and reachable. Do not stop at an FFmpeg-only assembly when the user asks for DaVinci, a finished film, or a reusable Skill. Build or revise a real Resolve project/timeline through the official API, read it back with audit_resolve_timeline.py, and render from Resolve unless Resolve is unavailable or the user explicitly chooses a non-Resolve route.
For final delivery, block the edit if:
- the opening title has duplicate/ghosted text, stacked city names, route/date labels near the hero title, project IDs, placeholder text, or subtitles sitting in the title safe zone
- a portrait/vertical clip appears inside a 16:9 master with black side bars and no explicit designed-phone-insert exception
- scenic openings, city hooks, or day/place transitions expose source-camera voice after the user asked for BGM-only or no voiceover
- BGM is missing, inaudible, stylistically wrong, or lacks a manifest with local track paths and license URLs
- day/place transitions are only hard cuts or black cards instead of route-aware bridge footage such as train, station, street, skyline, weather, food, hotel-window, or aerial inserts
Use scripts/build_bgm_bed.py to create a continuous, traceable BGM bed from approved local music tracks. Use scripts/make_davinci_stylefix_blueprint.py when an existing Resolve blueprint has title clutter, portrait/pillarbox clips, source-camera voice, or missing BGM; it creates a DaVinci-first v10-style blueprint with clean opening title, video-only footage import, A3 BGM, and explicit replacement segments. It must ffprobe-scan every actual video sourcePath in the blueprint, write manualQualityFix.orientationFixes, and replace or block all raw portrait/square/unknown clips before Resolve import; never hard-code only the user-reported timestamp. Use scripts/prepare_orientation_repair_package.py when a previously rendered/QA-passed package becomes blocked by a newer source-orientation gate. It creates a new package directory, materializes reusable package assets, rewrites package-internal paths including copied asset-directory JSON/text files, syncs title bridge manifest segment paths from the final blueprint, generates a v14-style repaired blueprint, and writes orientation_repair_package_report.json; do not mutate the old package or reuse its stale final QA as current proof. Use scripts/prepare_subtitle_overlay_asset.py when the finished film needs visible subtitles in DaVinci: it converts dense SRT/TXT-style guidance into a transparent QuickTime alpha overlay and can add a V3 subtitle_overlay_video clip to the Resolve blueprint. Use scripts/audit_visual_audio_style.py after every final render and after user feedback timestamps to verify clean title policy, pillarbox/vertical regressions, BGM manifest, audio mode, loudness, silence ratio, and optional OCR. Use scripts/audit_story_style_contract.py after render verification to check the director-level contract: clean opening, visual bridge transitions, scenic ending, subtitle density/rendered subtitle mode, BGM-only readback, loudness/silence, orientation, asset evidence, and long-form pacing. Its opening-title evidence must show exactly one main title value such as TOKYO, not repeated/stacked text such as TOKYO TOKYO, conflicting cityTitle/titleText values, route/date copy, or opening subtitles.
For user-reported regressions, always run scripts/audit_feedback_regressions.py in addition to the broader visual/audio and story audits. The feedback audit is the durable memory of what the user already rejected: duplicate/ghosted opening title text, portrait clips at named timestamps, missing or inaudible BGM, source-camera/user voice during scenic/title moments, sparse subtitles, and captions overlapping title zones.
Before that final feedback audit exists, run scripts/prepare_feedback_regression_plan.py so the same rejected failures are already present as pre-render probes. The plan must carry opening-title, 7:04 portrait, 7:04 BGM/voice, and opening BGM/no-voiceover timestamps into prepare_audio_scene_policy_plan.py, audit_feedback_regressions.py, and run_final_qa_suite.py; do not rely on memory or conversation context to retype them later.
Run scripts/audit_reference_style_alignment.py before saying the Skill can deliver in the style direction the user asked for. Passing audit_story_style_contract.py proves core story/editorial gates; passing reference-style alignment proves the route has enough transport, street texture, lived-in detail, landmarks, varied footage, BGM/caption support, and non-copying Malta/Bilibili reference evidence.
Run scripts/audit_director_intent_contract.py before saying the edit has a real director intent. It must prove the opening tells the viewer what kind of journey this is, the chapters form a route arc rather than a list, shot pacing has long-form breathing room, subtitles carry route/emotion/honesty without voiceover, and the ending leaves aftertaste.
Run scripts/audit_route_texture_contract.py before trusting that the edit feels route-aware. It must prove every planned day/place transition is backed by physical bridge footage, chapter title moments have nearby connective tissue, chapters contain transport/street/lived-in/landmark texture beyond title cards, and opening/ending sections breathe on real visual material. If it blocks, revise the timeline structure or bridge-footage roles instead of only changing titles.
Run scripts/audit_director_polish_contract.py before claiming the Skill can produce a premium travel film rather than a technically valid assembly. It must connect the clean title/aerial evidence, font and asset ledger, BGM mood/license evidence, subtle effect plan, rendered subtitle policy, Resolve readback, and final export quality. A warning about unmaterialized stock/aerial search placeholders is allowed as a visible handoff risk, but a blocker means the package is not director-polished.
Run scripts/audit_stock_aerial_closure.py before director-polish QA if the blueprint has stockInsertPlan rows. The report must prove search-only stock/aerial rows did not enter the final timeline and were either replaced by verified assets or closed by local-footage coverage evidence. If this audit blocks, materialize the required stock/aerial asset, remove stale search-only plan rows, or revise the timeline so real footage covers the need.
Run scripts/audit_title_bridge_contract.py before trusting a clean-title claim. It must prove the opening has one city title, the actual Resolve title clips point to the generated scenic bridge videos, the title text avoids previously rejected route/date labels, title clips import video-only, and V3 subtitle overlays are suppressed during title zones. If OCR fails to recognize the expected title but this contract passes, keep the OCR miss as a warning rather than treating it as the only source of truth.
Run scripts/prepare_bgm_selection_package.py before trusting a BGM/no-voiceover claim. It must prove that the selected BGM bed or source tracks are local, license-traceable, target-duration-covering, blueprint-referenced, explicitly auditioned as real music, marked non-procedural/non-tone, section-fit approved, Content-ID checked, and rebuildable with build_bgm_bed.py; if it blocks, fill exact track/license/local-path/provider/music-identity/audition/section-fit decisions before Resolve apply.
Run scripts/audit_bgm_audio_contract.py before trusting a BGM/no-voiceover claim. It must prove the BGM bed referenced by Resolve is the same file named in the BGM manifest and asset ledger, materialized inside the current delivery package, long enough for the final render, licensed/traceable, mixed on A3, audible in the final MP4, and accompanied by zero A1 source-audio and zero A2 voiceover items. If it blocks on stale BGM paths, repair the package manifest/ledger/blueprint first, then re-run dependent audits.
Run scripts/prepare_audio_scene_policy_plan.py before any Resolve apply when the user has complained about missing BGM, scenic voice leakage, or unwanted voiceover. It must enumerate opening/title/transition/establishing/effect/feedback windows, prove ready A3 BGM coverage, require A1/A2 mute or absence, and preserve exact user complaint times such as reported_voice_at_7_04=7:04 as regression probes.
Run scripts/prepare_footage_select_plan.py before package build, then run prepare_source_selection_repair_plan.py and audit_source_selection_coverage_contract.py after package build and before first-assembly trust when the user provides a large unordered source folder or says the edit should reach the four Parallel World videos/Malta final level. They must score the raw media pool, surface hero/main/texture bridge candidates, reject derived exports, flag portrait/square/unknown clips for repair, and close chapter movement/texture/payoff coverage gaps before any transition effect, stock aerial, or rhythm recut is allowed to compensate for weak source choice. Warning repair rows are not harmless: orientation/weak-source rows must be closed with concrete decision evidence and ready_no_source_selection_repairs_needed, not blank default fields.
Run scripts/prepare_reference_batch_profile.py before edit-rhythm planning or reference-style audits when multiple local reference videos are available. Do not reduce a multi-video reference set to a few screenshots; produce aggregate pacing/audio/sample-frame targets and keep the non-copying contract visible. Then run scripts/prepare_reference_review_repair_plan.py; do not claim reference learning is complete until it returns ready_no_reference_review_repairs_needed.
Run scripts/prepare_chapter_arc_plan.py before edit rhythm or Resolve apply when a long-form travel chapter feels like random clips. It must turn every chapter into context, movement, texture, payoff, and aftertaste rows with owner scripts for missing beats.
Run scripts/prepare_edit_rhythm_plan.py before any Resolve apply when the user says the edit feels AI-made, badly cut, too flat, or unlike the Malta/Bilibili reference. It must enumerate primary visual shots and chapter rhythm rows, compare pacing to the reference profile, identify long raw holds and missing cutaways, and turn them into trim/split/insert decisions instead of relying only on post-render style audits.
Run scripts/prepare_creator_cut_plan.py immediately after edit-rhythm planning when the user asks whether the edit can get closer to the four Parallel World videos or Malta final. It must classify every visual clip into hero, main story, texture bridge, utility, or reject/review; assign creator functions such as opening hook, route movement, lived-in detail, destination payoff, and ending aftertaste; and recommend transition recipes. After the final candidate blueprint exists, run scripts/audit_creator_cut_application_contract.py so the cut proves it applied the selection instead of merely planning it. Do not let a whip, rotation, zoom, or speed-ramp effect rescue weak footage; physical route evidence and selective shot choice come first.
Run scripts/prepare_transition_grammar_plan.py immediately after creator-cut planning when the user says transitions are still weak or asks for more polished shot-to-shot flow. Then read references/transition-source-coverage-contract.md and run scripts/audit_transition_source_coverage_contract.py so adjacent clip pairs prove selected outgoing, bridge, motion, and landing source material before visible effects are trusted. It must inspect adjacent clip pairs, recommend exact transition types, mark boundaries that need bridge inserts, and allow whip/rotation only when both sides carry route-motion energy. Do not approve a flashy transition across static or weak footage; add bridge material or use a simpler cut. Empty or generic transition decisions such as done, blank BGM cue, missing preview/frame evidence, or motion effects without bridge evidence are blockers, not polish notes.
Run scripts/prepare_transition_execution_plan.py, scripts/prepare_transition_reference_candidates.py, scripts/prepare_transition_reference_selection.py, scripts/prepare_transition_motif_plan.py, scripts/prepare_bridge_sequence_plan.py, scripts/prepare_bridge_sequence_blueprint.py, scripts/prepare_transition_execution_blueprint.py, and later scripts/prepare_transition_polish_blueprint.py when the user asks for better transitions or Resolve finishing. They must translate every adjacent-pair decision into a concrete Resolve recipe, non-copying A/B/C candidate ladder, and unattended-safe default selection with boundary-specific reason plus proof plan, audit repeated/template motifs, turn important route/title/timeline-gap changes into 2-5 shot bridge sequences, materialize bridge beats, and after BGM/rhythm recut add final BGM-hit/title-safe/motion-proven micro-transition metadata plus audit_transition_source_coverage_contract.py, prepare_transition_choreography_plan.py, audit_transition_choreography_contract.py, audit_transition_motion_direction_contract.py, audit_transition_motion_accent_contract.py, audit_transition_effect_recipe_contract.py, audit_transition_cutpoint_contract.py, audit_transition_action_anchor_contract.py, audit_transition_sensory_continuity_contract.py, audit_transition_polish_application_contract.py, audit_resolve_transition_materialization_contract.py, prepare_resolve_transition_apply_plan.py, audit_resolve_transition_apply_contract.py, audit_bridge_sequence_application_contract.py, audit_transition_bridge_visual_evidence_contract.py, audit_final_blueprint_lineage_contract.py, audit_transition_cadence_contract.py, audit_transition_microstructure_contract.py, audit_transition_scene_arc_contract.py, audit_transition_effect_palette_contract.py, audit_transition_motif_coherence_contract.py, audit_transition_visual_match_contract.py, prepare_transition_preview_packet.py, audit_transition_preview_quality_contract.py, prepare_transition_audition_packet.py --build-clips, audit_transition_audition_quality_contract.py, audit_transition_audition_visual_proof_contract.py, audit_transition_audition_role_integrity_contract.py, audit_transition_storyboard_contract.py, audit_transition_breathing_room_contract.py, and audit_transition_continuity_rehearsal_contract.py proof instead of hiding missing bridge beats behind an effect, leaving visible effects marker-only, approving rotation/whip/zoom/speed-ramp rows without selected source coverage and restrained keyframes/easing/envelopes, applying an old blueprint, making the next agent manually choose A/B/C rows, accepting selected rows with generic/pending decision text, stacking motion accents without buffer, or making the whole film feel like hard-cut/effect-spam cadence without readable action anchors and sensory continuity.
Treat strong transitions as needing aftercare: audit_transition_continuity_rehearsal_contract.py must block if high-energy route/title/time-jump/BGM/motion boundaries recur inside a short window without a texture bridge, scenic breath, or same-scene continuity buffer. Fix by adding calmer local footage or downgrading motion effects, not by stacking more rotation/whip/zoom.
Treat transition auditions as role-separated proof, not only ordered MP4s: audit_transition_audition_role_integrity_contract.py must block when outgoing, bridge/motion, and landing segments reuse the same rendered file or same source window. Important route/title/time-jump boundaries need a bridge/motion source window that is distinct from both endpoints before storyboard, Resolve apply, V14, or maturity can pass.
Treat BGM-hit transition auditions as evidence-bound, not boolean claims: prepare_transition_audition_packet.py --build-clips must carry concrete BGM cue or phrase evidence plus numeric hit offset/tolerance into each audition row, and audit_transition_audition_quality_contract.py must block when a row only says bgmHitAligned=true without cue, phrase, hit-second, or offset/tolerance proof.
Treat bridge-sequence repair rows as blockers, not as acceptable polish notes: prepare_bridge_sequence_plan.py may claim ready_with_bridge_sequence_plan only when missingBeatRowCount == 0, repairRowCount == 0, blockingBridgeSequenceIssueCount == 0, and every required beat has local candidate evidence or an approved verified fallback.
Treat bridge-sequence source diversity as part of the edit, not metadata: prepare_bridge_sequence_blueprint.py and audit_bridge_sequence_application_contract.py must block if a 2-5 shot bridge repeats one clip across most beats or repeats the same source on adjacent beats, because that reads as AI filler instead of a route/title/day-change bridge.
Treat bridge-sequence source handles as a hard visual-quality gate: prepare_bridge_sequence_blueprint.py must reject candidate clips whose real sourceEndSeconds - sourceStartSeconds cannot cover the planned bridge-beat duration, and audit_bridge_sequence_application_contract.py must block final candidates that would need freeze, stretch, or looped filler to make a scenic bridge beat last long enough.
When applying the Parallel World reference, run scripts/prepare_opening_story_plan.py --package-dir <package> and require the first 3 minutes to contain a viewer promise, destination proof, clean hero title, practical route/arrival footage, lived-in texture, and first chapter handoff; long person/context sections must be supported by B-roll or visual evidence; the ending must include route aftertaste rather than stopping on a leftover clip.
Run scripts/prepare_rhythm_recut_blueprint.py immediately after the BGM phrase candidate when long-shot risks exist, then run scripts/audit_rhythm_recut_application_contract.py after transition polish/final lineage. The output must be a separate candidate blueprint that uses existing local footage as motivated cutaways, keeps transition/effect/BGM phrase candidate metadata, keeps total duration stable, and can be preflighted before any active Resolve blueprint is replaced; the application audit must prove those main segments and cutaways survived into the final candidate.
Run scripts/prepare_rhythm_recut_apply_package.py after the candidate passes review/preflight and before Resolve apply. Prefer a new package fork over in-place blueprint replacement so the source package remains valid evidence, stale final render QA is not reused, and the recut package gets its own active blueprint, preflight, dry-run, apply-contract, readback, render, and final QA chain.
Run scripts/prepare_reference_style_repair_plan.py and scripts/audit_reference_repair_closure.py whenever reference-style, director-intent, director-polish, or final QA checks are blocked. Do not leave style blockers as prose; turn them into repair rows with scripts, artifacts, acceptance evidence, post-repair audits, and closure evidence before another Resolve claim.
Run scripts/prepare_final_delivery_report.py after render verification, client delivery rules, BGM audio contract, story style, and strict package integrity pass. It writes FINAL_DELIVERY_REPORT.json and .md with final output path, Resolve identity, render parameters, BGM/no-voiceover evidence, and explicit non-GPS route caveat wording. Do this before audit_longform_delivery.py and before the final run_final_qa_suite.py pass.
Run scripts/audit_package_integrity.py after the feedback/style audits and again after any blueprint/report path repair. Treat stale contact sheets, old render reports, previous-package subtitle/BGM paths, and disabled voiceover paths as package-integrity risks until the audit explains or clears them. A disabled voiceover path is not clear just because it is unused in prose; it must appear in closedCoreCrossPackagePaths with A1=0, A2=0, A3>0, and passing BGM/story no-voiceover evidence. Do not use a report from an older package as proof of the current Resolve render.
prepare_subtitle_overlay_asset.py suppresses or trims subtitle overlay cues that overlap Resolve title zones by default. Do not let V3 captions appear during opening city titles, chapter title bridges, or ending title moments unless the user explicitly requests that exception with --allow-title-zone-subtitles. The manifest must record the title-zone subtitle policy so missing captions during title cards are understood as intentional title cleanliness, not a dropped-subtitle bug.
audit_subtitle_overlay_contract.py is the delivery gate for visible captions. It blocks when the overlay manifest is missing, cue counts are sparse, overlay files are outside the package, sampled overlay videos are not alpha-capable, sampled frames are blank/fully transparent, files contain audio, V3 clips are missing from the Resolve blueprint, or subtitle clips overlap title zones. Run it again after any subtitle, title, or blueprint change.
After the final MP4 is rendered, run scripts/audit_rendered_subtitle_visibility_contract.py --package-dir <package> when visible subtitles are expected. It samples the final render at V3 subtitle cue times and blocks when the lower-third caption area does not show caption-like bright/dark/contrast pixels. Do not treat overlay assets, sidecar SRT, or Resolve blueprint rows as proof that subtitles survived into the exported MP4.
After the final MP4 is rendered, run scripts/audit_rendered_title_visibility_contract.py --package-dir <package> when opening, chapter, or ending titles are expected. It samples final-render title windows from the Resolve blueprint and blocks when central title pixels are not visible, when the surrounding background is flat enough to read like a black card or pure color slate, when opening/chapter/ending samples are missing, when structural title contracts did not pass, or when OCR detects internal/status text. Do not treat scenic title media, contact sheets, OCR misses, or Resolve blueprint rows as proof that titles survived into the exported MP4.
audit_visual_audio_style.py must be run with a visual manifest and --require-clean-title for final QA. It automatically adds title/bridge timestamps from the manifest, clears stale frame folders before sampling, uses precise frame extraction, and runs OCR across enough title samples to catch hidden route/date/template text. A stale contact sheet, or one generated from old samples, is not valid delivery evidence.
When the user rejects voiceover, keep narration as TXT/SRT and render scenic/title/transition sections with bgm_only_no_camera_voice; do not sneak in generated voiceover or source-camera talking.
Do not assume DaVinci can directly import an SRT through the Python API. Local Resolve 21 smoke testing showed that a new subtitle track can be created, but Timeline.ImportIntoTimeline(<srt>) returned False and produced zero subtitle items. For visible subtitles, prefer a transparent subtitle overlay video on V3 via prepare_subtitle_overlay_asset.py, then read back the V3 item count after build_resolve_timeline.py --apply. Sidecar-only SRT is acceptable only when the user explicitly wants separate TXT/SRT handoff; otherwise it is a warning or blocker in audit_story_style_contract.py.
Definition of Done
Do not call the job complete unless the package contains all required handoff pieces:
- location and route status, with stale/mismatch blockers resolved or clearly marked
- raw intake completeness audit plus footage recognition/route MD report proving the whole selected folder was indexed, recognized, routed exactly once, and scored before editing
- full-folder recognition coverage, or an explicit blocked status; do not cut from a 12-video sample when the folder has 59 videos
- location truth contract audit proving whether the package can only claim visual route reconstruction with caveats or can actually claim verified per-video geolocation
- footage select plan proving every active source video was scored and tiered before first assembly, with hero/main/texture/utility/reject rows, orientation repair flags, derived-export rejection, local bridge candidates, and chapter-pool coverage gaps
- blocked-project recovery plan when recognition/location truth/forward-test blocks a matched project; it must list ordered phases, exact next commands, approval gates, and safety flags before any cutting resumes
- external media intake packet when mounted drives contain multiple trip roots or project/media roots can be confused
- media index readiness for the chosen project, or a safe
run_videoclaw_media_index.py --applyreport when the index had to be created from mounted media roots - frame index, location map, and route timeline readiness, or a safe
run_videoclaw_route_pipeline.pyreport explaining which local/cloud steps remain - Codex visual review notes for contact sheets/sampled frames when route labels are low-confidence or automatic labels are suspicious
- a fresh Codex-visual-confirmed route timeline when Codex visual inspection covered the whole folder and produced enough evidence to cut
- local Ollama vision or Tesseract OCR reports only when the user explicitly authorizes those local helper routes
- route coverage scaffold when automatic route coverage is too low
- route review packet when route/location artifacts need human review
- route decision sheet when route review needs chapter decisions or region mismatch approval
- route decision application report proving whether approved route decisions can be safely copied into
route_review.json - confirmed route candidate or fresh
confirmed_route_timeline.jsonbefore final route-aware cutting - confirmed route candidate audit proving the candidate covers every active source video exactly once, has no duplicated/unknown/excluded refs, preserves honest region labels, and only advances with non-GPS caveats when exact per-video truth is unverified
- voiceover script
- TTS or recorded voiceover audio plan/file
- when the user rejects voiceover, a text-only narration document and proof that no voiceover audio asset is imported/rendered
- subtitle SRT draft; when the user asks for Jianying/CapCut generation, deliver SRT/TXT and do not generate local TTS
- local delivery assets report covering title cards, optional local voiceover, and refreshed Resolve enrichment
- BGM cue plan with licensing/source status
- aerial/establishing-shot search plan or approved local/stock assets
- opening city aerial/establishing clip with clean English city title typography; never expose project slugs, random IDs, or placeholder copy in the first frame
- visual polish manifest proving opening, chapter, and ending titles use scenic route-aware video bridges rather than black slates; include a contact sheet or sampled-frame evidence for these moments
- title typography plan proving every opening/chapter/ending title row has approved text, verified font evidence, scenic background/segment evidence, forbidden-text checks, title-zone subtitle suppression, and no stacked/ghosted text before final title claims
- visual establishing plan proving the opening, every chapter establishing moment, and the ending have local-footage-first search hints, trip-derived famous-place/landmark hints, licensed stock/aerial fallback searches, title typography evidence, existing timeline evidence, exact decision fields, and no previous-trip defaults before aerial/landmark claims
- effect motion plan, blueprint, and application audit proving opening/chapter/ending title reveals and day/place transition motions are restrained, source-evidence-backed, title-zone safe, BGM-only, decision-field ready, candidate-materialized, final-blueprint applied, and free of glitch/random-spin/flash/template-heavy effects before director-polish claims
- feedback regression plan proving concrete rejected draft failures such as opening title ghosting, 7:04 portrait footage, 7:04 source/user voice, and opening BGM/no-voiceover are preserved as reusable pre-render audio-policy probes, post-render feedback-audit probes, and final-QA timestamps
- audio scene policy plan proving opening/title/transition/visual-establishing/effect/feedback windows are A3 BGM-led, have exact mute/readback decision fields, include known complaint probes such as
7:04when applicable, and contain no A1/A2 source-camera or voiceover leakage before Resolve writes - reference batch profile plus application audit proving multiple supplied reference videos were analyzed into aggregate pacing/audio/sample-frame style targets and then consumed by opening, chapter, rhythm, creator, transition, caption, audio, scene-grammar, and style gates before claiming the Skill learned from the four Parallel World videos or Malta final
- first assembly source-order and large-source unattended-readiness contract evidence proving
build_delivery_package.pyused the full-source footage select plan when present to sort local chapter media by selection tier/score instead of raw filename order, blueprint fallback samples, or repair/reject rows, and proving the package can connect media-root intake, whole-folder recognition, source selection, first assembly, unattended first draft, and blueprint preflight for large unordered folders - opening story plan proving the first three minutes have viewer promise, destination proof, one clean hero title, practical arrival, lived-in texture, first chapter handoff, BGM-only opening policy, and title-zone subtitle suppression before rhythm/style claims
- edit rhythm plan proving every primary visual shot has a route/street/lived-in/landmark/scenic/title/transition/ending function, Malta/reference pacing targets, long-shot/cutaway risk rows, chapter variety rows, timeline-variety owner evidence, and trim/split/insert decision fields before any "not AI-made" style claim
- creator cut plan plus application audit proving every visual clip has a creator function, editorial tier, recommended use, weak-clip reject/demotion path, chapter coverage row, motivated transition recipe, and final-candidate matching before claiming the cut approaches the four Parallel World videos or Malta final
- transition grammar plan proving every adjacent visual pair has a recommended transition, fallback transition, concrete non-generic pre-Resolve decision, bridge-evidence decision, title/caption safety fields, BGM phrase cue fields, preview/frame evidence requirements, and no unmotivated whip/rotation effect before Resolve writes
- transition execution plan/blueprint, reference candidate ladder, motif, bridge sequence, bridge sequence blueprint, transition source coverage, transition-polish application, Resolve transition materialization/apply, bridge-sequence application, transition bridge visual evidence, final-blueprint lineage, transition cadence, transition microstructure, transition preview packet, transition storyboard, transition-breathing-room, final-cut-smoothness, narrative-adjacency, and timeline-variety audits proving every transition grammar row has a Resolve-ready recipe and A/B/C candidate metadata, bridge-missing rows remain blocked, motion effects cite route-motion evidence and selected source coverage, BGM-hit/title-safe polish and marker/readback payloads survive into the final blueprint, every adjacent shot has a landed BGM-only/title-safe/handle-ready transition beat and viewer-readable route/place/story-function/bridge/BGM/title reason, visible effects have API/manual/bridge apply paths instead of marker-only metadata, important boundaries have 2-5 shot bridge beats materialized and preserved in the final candidate as video-only clips with local source/video-probe/frame evidence plus viewer-purpose/outgoing/bridge/landing generated preview evidence, motion accents are rare and separated by stable landing footage, the final active blueprint inherits the latest candidate chain, title boundaries suppress subtitles, the whole film avoids bare-cut/repeated-template/effect-spam cadence, final adjacent joins have bridge/match/breathing proof instead of rough hard cuts, movement/texture/payoff/aftertaste vary across the timeline, and scenic/title/transition audio stays BGM-only
- rhythm recut candidate and application audit proving long raw holds were automatically converted into shorter main segments plus existing-footage cutaways, survived into the final candidate blueprint, kept unchanged total timeline duration, A3 BGM-only safety, row-level approval/readback fields, and Resolve preflight readiness before replacing the active blueprint
- rhythm recut apply package proving an approved candidate can become a separate Resolve-ready package fork with active recut blueprint, rewritten package-local paths, no copied final-render proof, preflight evidence, dry-run/apply-contract next actions, and no source package mutation
- reference style repair plan plus unattended repair queue proving every blocked reference/director/QA/style/preflight gap has a concrete repair row with owner script, required artifact, resolved command, execution order, repair key, post-repair commands, acceptance evidence, forbidden workaround, reference rule, and post-repair audit/readback fields before another "make it better" iteration
- final Resolve blueprint proof that the opening, chapter, and ending title moments actually reference scenic bridge video clips, not stale
title_cardsslates or long cropped place descriptions - scenic title bridge contact sheet proving title frames do not contain hidden global route labels, generic date labels, template lower-corner route text, stale black cards, or subtitles sitting over the title safe zone
- machine-readable asset license ledger for BGM, aerial/stock, and fonts
- asset sourcing packet with provider/license URLs, selection fields, approval evidence, and download/import gates
- BGM sourcing brief proving the Skill proactively generated mood-appropriate search rows, section plans, provider/license URLs, and exact decision fields before any BGM/no-voiceover final claim
- BGM selection and phrase-blueprint package proving the selected music bed is local, license-traceable, target-duration-covering, referenced by the active Resolve blueprint, rebuildable from local source tracks, and materialized into section/phrase/transition-cue candidate metadata before BGM/audio contract audits
- asset decision reconciliation report after sourcing decisions are filled or confirmed still missing
- typography plan for titles, place cards, subtitles, and map labels
- day/chapter transition plan
- transition bridge plan proving every day/place/chapter boundary has local bridge-footage search hints, licensed stock/aerial fallback queries, BGM-only audio policy, title-zone subtitle policy, exact decision fields, and final bridge evidence before route-texture claims
- caption story plan proving no-voiceover delivery has dense SRT cues, per-chapter caption targets, gap limits, title-zone suppression policy, text-only narration export, and rewrite decision fields before subtitle overlay generation or maturity claims
- audience caption contract audit proving final SRT/TXT/burned-caption text is for viewers, not a user-facing edit report about fixes, QA, tools, versions, exports, or delivery state
- natural visual transition clips between days/places, such as station, street, skyline, vehicle, signage, food, hotel window, weather, or aerial bridge footage
- effect plan for restrained title reveals, route motion, transitions, or chapter emphasis; do not overuse effects, but a client delivery cannot be a bare concatenation
- 20-minute long-form structure, not a 1-2 minute short-video outline
- 4K high-frame-rate export target, normally 59.94/60fps for DJI/action/phone travel footage unless source or platform requirements justify otherwise
- high-bitrate final output target, normally at least 60 Mbps for 4K long-form H.264/H.265 masters
- DaVinci Resolve API timeline blueprint and a dry-run/apply command
- Resolve source-footage clips preserve camera/source audio on A1 unless a clip is explicitly video-only
- long-form coverage evidence showing initial selected seconds, gap-fill seconds, final covered seconds, and target seconds
- Resolve timeline enrichment report with subtitle cues, audio plan, stock/aerial placeholders, transition markers, and chapter markers
- subtitle delivery mode proof: native subtitle items, V3 transparent subtitle overlay readback, or an explicitly accepted sidecar-only SRT/TXT handoff
- subtitle title-zone policy proof showing V3 subtitle overlays were suppressed or trimmed during opening, chapter title bridges, and ending title moments unless explicitly overridden
- rendered subtitle visibility proof showing final MP4 frames sampled at subtitle cue times visibly contain lower-third caption pixels
- rendered title visibility proof showing final MP4 opening, chapter, and ending title windows visibly contain clean central title pixels over non-flat scenic/establishing background texture
- Resolve blueprint preflight proving source files, source ranges, track overlaps, V1 coverage, title cards, subtitles, markers, and source-audio policy are safe before
--apply - generated title/place card media or a clear reason they are pending
- Resolve apply approval contract before any actual
build_resolve_timeline.py --apply - Resolve readback audit after any actual timeline write
- delivery package audit with no blockers before final render
- safe workflow run report showing which local steps ran, command return codes, project-state summary, Resolve API summary, route decision summary, route decision application summary, asset decision summary, audience-caption, large-source unattended-readiness, motion-accent repair, rendered transition proof, transition-reference-readiness, transition-sequence-satisfaction, story-style, reference-alignment, director-intent, route-texture, stock/aerial closure, director-polish, final-viewer-friction, first-draft-satisfaction, unattended repair queue, whole-film-satisfaction, one-shot-autonomy, shot-flow continuity, unattended-first-draft, Skill maturity, V14 baseline contract summaries, normalized
blocked*status handling, Resolve dry-run summary, Resolve apply contract summary, render-plan summary, audit status, safety flags, and remaining blockers - Resolve render plan with final export settings
- queued/rendered Resolve job status only after explicit approval
- final render delivery verification plus rendered transition proof proving the output file duration, resolution, audio stream, sample frames, black-frame scan, subtitle evidence, and actual transition-window frames are clean
- final render delivery verification proving frame rate and bitrate meet the quality target
- final render quality bundle audit proving the final MP4 is bound to render verification, visual/audio style, BGM audio, final BGM mix, rendered subtitle visibility, rendered title visibility, rendered transition proof, editorial watchdown, final viewer friction, whole-film satisfaction, and package integrity before any DaVinci-level claim
- long-form delivery audit proving the 20-minute film requirements are met, or explicitly listing route/location caveats that still prevent a claim of perfect per-clip geolocation
- location truth contract audit proving full-source accounting, per-video recognition rows, frame evidence, provider provenance, confirmed-route linkage, derived-source exclusion, and whether exact per-video location claims are allowed
- client delivery rules audit proving the opening, route, actual blueprint source orientation scan, SRT-only/no-voiceover mode, BGM, transitions, effects, titles, assets, and export quality satisfy the product bar
- story style contract audit proving the cut does not merely pass technical checks but also has Bilibili/Malta-style travel rhythm: one non-duplicated opening title value, dense captions, BGM-led scenic sections, route-aware bridges, scenic ending, no portrait/pillarbox regressions, traceable assets, and DaVinci readback evidence
- reference style alignment audit proving the edit has non-copying Malta/Bilibili reference evidence, route chapters, transport connective tissue, street/lived-in/landmark balance, real-footage variety, scenic title/bridge structure, and BGM/caption-led no-voiceover storytelling
- director intent contract audit proving the cut has an explicit opening mission, route arc, chapter beat categories, long-form pacing, caption story/honesty, and ending aftertaste before any premium style claim
- route texture contract audit proving planned day/place transitions are backed by actual bridge clips, chapter titles have nearby connective tissue, chapters contain lived-in route texture beyond title cards, and the timeline balances transport, streets, daily detail, and landmarks
- stock/aerial closure audit proving search-only stock/aerial placeholders are either materialized as verified local assets or explicitly closed as not used in the final Resolve render and covered by real local route/title footage
- director polish contract audit proving the aerial/establishing opening, typography/font evidence, BGM mood and license, restrained title/transition effects, dense rendered subtitles, Resolve track readback, and premium export settings form one coherent delivery chain; list any unmaterialized stock/aerial search placeholders as warnings
- title bridge contract audit proving clean scenic title manifests, segment/overlay files, Resolve V2 title clips, opening city title policy, forbidden visible text, video-only import, and subtitle title-zone suppression are consistent
- BGM/audio contract audit proving the actual BGM bed is current-package materialized, traceable/licensed, long enough, referenced by Resolve, present on A3, audible in the MP4, and not mixed with source-camera or voiceover audio
- final BGM mix contract audit proving the exported MP4 has audible multi-band music across timeline samples and scenic/title/bridge/ending windows, with no hum/tone collapse
- feedback regression audit for every concrete user complaint timestamp proving the same failure cannot silently recur in the next run
- package integrity audit proving final render evidence, Resolve readback identity, core QA statuses, and cross-package/stale paths are coherent for the current package; disabled voiceover leftovers must be explicitly closed with A1/A2/A3 and BGM/story evidence; strict portable mode must not block before external handoff
- Skill maturity contract audit proving the reusable Skill itself covers the user's repeated failures: clean title, no portrait regression in final render or actual Resolve blueprint source paths, feedback regression planning, proactive BGM sourcing and selection/build packaging, proactive audio-scene BGM/no-voiceover planning, chapter-arc structure, proactive edit-rhythm/shot-purpose planning, creator-cut selective shot choice, final-source usage, timeline-variety, shot-flow continuity, final-candidate application, transition-grammar/execution/transition-blueprint/transition-cutpoint/transition-action-anchor/transition-sensory-continuity/motif/bridge-sequence/bridge-blueprint/transition-polish-application/resolve-transition-materialization/resolve-transition-apply/bridge-application/final-blueprint-lineage/transition-microstructure/pair-continuity/execution-readiness decisions, transition-sequence-satisfaction, reference scene-grammar, rhythm-recut candidate blueprints and apply-package forks, large-source unattended-readiness, final-viewer-friction aggregation, first-draft-satisfaction closure, whole-film-satisfaction closure, one-shot-autonomy/
blocked_one_shot_autonomyclosure viaaudit_one_shot_autonomy_contract.pyandreferences/one-shot-autonomy-contract.md, unattended repair queue, unattended-first-draft chain closure, dense subtitles, director intent, route texture, Bilibili/Malta style anchors, DaVinci delivery, location-truth honesty, stock/aerial closure, and portable handoff - V14 baseline contract audit proving the Skill has converted the V1-V14 correction history into a reusable first-draft baseline, not a one-off Tokyo/Osaka package
- trip generalization contract audit proving rescue scripts do not force stale previous-trip defaults such as TOKYO/Japan/Tokyo-to-Osaka on future projects
- Skill forward-test contract audit after substantial Skill revisions, proving the Skill handles at least one known-good package, one matched-but-blocked separate trip, and one unknown or ambiguous mounted media root without silently cutting the wrong material
- final QA suite report proving all final gates were run or intentionally reused: render verification, visual/audio style, BGM/audio contract, BGM musicality, final BGM mix, location truth contract, client rules, long-form delivery, story style, reference alignment, director intent contract, route texture contract, title bridge contract, rendered title visibility contract, stock/aerial closure, director polish contract, feedback regression, final-viewer-friction, first-draft-satisfaction, whole-film-satisfaction, one-shot-autonomy, default package integrity, strict portable package integrity, transition pair-continuity, transition execution-readiness, transition reference candidates, transition reference selection, transition source coverage, transition-polish application, Resolve transition materialization/apply contract, bridge-sequence application, transition bridge visual evidence, final-blueprint lineage, transition cadence, transition microstructure, transition scene-arc, transition effect-palette, transition motif-coherence, transition visual-match, transition flow repair, transition-sequence-satisfaction, transition action-anchor, transition sensory-continuity, transition storyboard, transition-breathing-room, final-cut-smoothness, pacing-watchability, narrative-adjacency, transition-viewer-orientation, transition-scene-settlement, final-source usage, creator-cut application, reference scene-grammar, chapter-story-spine, shot-flow continuity, timeline-variety, large-source unattended-readiness, unattended repair queue, unattended-first-draft contract, and Skill maturity contract
- QA checklist covering black frames, audio levels, subtitle sync, licenses, route accuracy, and export settings
If any required item is missing, report the missing item and the next action instead of saying it is deliverable.
Workflow
- Inspect project state and artifacts with
check_project_state.py. - Read
references/editor-integration.mdbefore choosing an editing route. - Read
references/delivery-workflow.mdbefore building a package. - Read
references/davinci-resolve-api.mdbefore touching Resolve. - Read
references/long-form-travel-style.mdbefore drafting structure or narration.
5a. Readreferences/bilibili-travel-style.mdbefore cutting style, titles, BGM, transitions, or final QA when the user asks for Bilibili/travel-vlog polish or provides a local reference film.
5b. Readreferences/parallel-world-vlog-style.mdwhen the user provides叽叽歪歪的平行世界videos/screenshots, asks how their cover/title is made, or wants the Skill to learn that creator's opening, transition, cover, and ending style.
5c. Readreferences/multicamera-roadtrip-story-engine.mdwhen the source mixes Mini-series drone, Action camera, phone/synchronized dual capture, dash-mounted driving footage, authentic camera speech, and local user-supplied music.
5d. Readreferences/homeward-flight-pov-style.mdfor hotel/car/airport/gate/aircraft departure or return-home chapters, then use its task-chain and restrained Jianying horizontal-split policy without inheriting the reference's missing BGM/title/captions or repeated effect habit. - Read
references/narration-subtitles.mdbefore writing narration, TTS, or subtitles. - Read
references/music-stock-fonts.mdbefore searching for BGM, aerials, stock inserts, or fonts. - Read
references/output-contracts.mdwhen interpreting route/location JSON artifacts. - Run
discover_external_media.pywhen an external drive such as/Volumes/<drive-name>is mounted and the source media root is not yet confirmed. - Run
prepare_external_media_intake.pybefore any long-form package build when multiple mounted trip roots or project/media mismatches exist. - Run
run_videoclaw_media_index.pywhen the selected project has no media index but mounted media roots are present; use--applyonly after the dry-run shows the expected source videos. - Run
run_videoclaw_route_pipeline.pywhen frame/location/route artifacts are missing; add--allow-cloud-callonly after the user approves real cloud recognition. - Use Codex visual inspection on contact sheets and sampled frames to reject bad automatic labels, identify obvious route nodes, and write auditable route review notes. For same-date multi-stop travel days, write explicit per-chapter
videoNames/videoIdscoverage instead of relying on date-only grouping. - Run
prepare_codex_visual_confirmed_route.py --project-dir <project>without--applywhen Codex visual inspection has covered the whole folder and the route evidence is sufficient. Then runaudit_confirmed_route_candidate.py --project-dir <project>and use--applyonly after the candidate audit is not blocked and the user explicitly approves writingconfirmed_route_timeline.json; this is the preferred confirmation path for this user. - Run
run_local_ollama_vision_recognition.pyorrun_local_tesseract_ocr.pyonly when the user explicitly requests those local helper routes. - Run
prepare_footage_recognition_report.py; if it is blocked, fix recognition/route coverage before cutting.
16a. Runaudit_location_truth_contract.py; if it ispassed_with_caveats, the edit may proceed with visual-route language, but do not claim exact per-video GPS/per-clip geolocation. If the user requires exact location truth, rerun with--require-verified-per-clip-locationand fix blockers before cutting.
16b. If the recognition report or location truth audit is blocked for a matched project, runprepare_blocked_project_recovery_plan.pyimmediately. Treat the blocked-project recovery plan as the handoff contract for the next AI: it must say whether to fix media/frame artifacts, choose Mimo/cloud approval or Codex visual review, resolve route review, rerun truth gates, and only then build a package.
16c. Runprepare_footage_select_plan.py --project-dir <project>after recognition/location truth is usable and before package build, then after package build runprepare_source_selection_repair_plan.py --package-dir <package> --project-dir <project>,audit_source_selection_coverage_contract.py --package-dir <package>, andaudit_large_source_unattended_readiness_contract.py --package-dir <package>, so the first assembly prefers hero/main/texture bridge candidates, rejects derived exports, closes chapter movement/texture/payoff gaps, flags portrait/square/unknown footage for repair, requires warning repair rows to have non-generic closure decisions, and proves large unordered folders connect to unattended first-draft/preflight instead of cutting raw filename order. For 100GB-class or mounted-drive jobs, the same audit must also prove package/project outputs are outside the source footage root, the workspace has the required free-space budget, and resume checkpoints exist before any long render, Resolve write, cleanup, or style-polish pass.
16d. Before footage selection on mixed-camera jobs, runprepare_multicamera_intake_plan.py,prepare_dashboard_reframe_plan.py, andprepare_sync_sound_plan.py. Pass a local transcript directory when available. Treat embedded device identity as authoritative, keep low-quality transcript words out of audience captions, retain only approved authentic speech, and carry dashboard transforms into the Resolve blueprint. - Run
build_route_coverage_scaffold.pyif automatic route coverage is too low for a 20-minute film. - Run
prepare_route_review.pyif route chapters are stale, mismatched, under-covered, or marked for human review. Use--route-source <route_coverage_scaffold.json>when reviewing a full-media scaffold. - Run
prepare_route_decision_sheet.pyso route decisions and region mismatch approval are editable and auditable. - Run
apply_route_decision_sheet.pyafter the decision sheet is approved; use--applyonly after explicit approval to updateroute_review.json. - Run
prepare_confirmed_route_candidate.pyafter review decisions; then runaudit_confirmed_route_candidate.pyand use--applyonly after the user approves confirmed route writes and the candidate audit is not blocked. - Run the safe local workflow with
run_delivery_workflow.pywhen preparing a package from scratch or refreshing all safe local artifacts. - Build a delivery package with
build_delivery_package.pywhen only the package skeleton is needed.
23a. Runprepare_opening_story_plan.py --package-dir <package>immediately after package build and before title, visual establishing, BGM/audio, rhythm, creator-cut, or director-intent planning. If any of the six opening beats lacks evidence, repair with selected local hero/route/lived-in clips before Resolve apply. - Analyze the optional local reference film with
analyze_reference_video.pywhen calibrating long-form pacing.
24a. Reject a stale or shallow local reference analysis when it lackspacingProfile,audioProfile, at least 12 sampled frames, a contact sheet, >=95%fullTimelineReviewdecode/timeline coverage, ordered timeline sheets, complete boundary-candidate sheets, and whole-film waveform/spectrogram evidence; rerunanalyze_reference_video.pybeforeaudit_reference_style_alignment.pyoraudit_skill_maturity_contract.py. - Generate local delivery assets with
prepare_delivery_assets.py; add--generate-local-voiceoveronly after explicit approval for local TTS. - Use
make_city_aerial_title.pyfor opening/city hooks when an approved aerial or establishing clip exists. - Refresh Resolve enrichment with
enrich_resolve_blueprint.pyafter title, subtitle, voiceover, BGM, stock, or transition changes.
27a. When visual title bridges are generic, black, cluttered, or contain global route/date/template text, runprepare_scenic_title_bridges.py --package-dir <package> --update-blueprintbefore subtitle overlay generation and Resolve preflight. Inspect its contact sheet; reject if opening/chapter/ending title frames contain global route labels, subtitles over the main title, black slates, or staletitle_cardsmedia.
27b. When visible final subtitles are required, runprepare_subtitle_overlay_asset.py --package-dir <package> --update-blueprintafter dense SRT approval and title-bridge cleanup, and before Resolve blueprint preflight. Run a short--sample-duration-seconds 5smoke test first on new machines to verify the alpha overlay path. Keep the default title-zone subtitle suppression unless the user explicitly asks for captions over titles. - Generate title/place cards with
generate_title_cards.py --update-blueprintonly when the combined asset-prep script is not appropriate; do not use black slates for the opening hook. - Generate the asset ledger with
build_asset_ledger.py. - Generate the asset sourcing packet with
prepare_asset_sourcing_packet.py.
30a. Generate the BGM sourcing brief withprepare_bgm_sourcing_brief.py --package-dir <package>so missing BGM turns into a concrete Mixkit/Pixabay/paid-library search and selection packet before asset decisions.
30aa. Generate the BGM selection package withprepare_bgm_selection_package.py --package-dir <package>so any selected music bed is proven local, license-traceable, target-duration-covering, blueprint-referenced, explicitly auditioned as real music, non-procedural/non-tone, section-fit approved, Content-ID checked, and rebuildable before audio policy or Resolve writes.
30aa1. When the user supplies a local music folder, runprepare_music_library_plan.py --project-dir <project> --music-dir <music> --blueprint <package>/resolve_timeline_blueprint.json, then build A3 withbuild_bgm_bed.py --placement-plan <music-plan.json> --ducking-plan <blueprint> --update-blueprint <blueprint>. Normalize every selected segment before role gain, cover the intended timeline, and measure that authentic-speech windows duck roughly 8 dB instead of becoming silent.
30ab. After transition/effect candidate blueprints exist, readreferences/bgm-phrase-blueprint-engine.mdand runprepare_bgm_phrase_blueprint.py --package-dir <package>so BGM sections, phrase markers, clip annotations, and transition cue metadata are materialized before rhythm recut or Resolve writes.
30b. Generate the transition bridge plan withprepare_transition_bridge_plan.py --package-dir <package>so every day/place/chapter boundary gets a concrete local-footage-first bridge row, licensed stock/aerial fallback queries, BGM-only transition audio policy, subtitle/title-zone guidance, and exact decision fields before asset decisions or Resolve writes.
30c. Generate the caption story plan withprepare_caption_story_plan.py --package-dir <package>so sparse subtitles and unwanted voiceover become a concrete dense SRT/TXT handoff plan with per-chapter targets, title-zone suppression, and no-voiceover policy before subtitle overlay generation.
30c1. Runaudit_audience_caption_contract.py --package-dir <package>after subtitle/TXT generation and before subtitle overlay rendering. Rewrite any blocked caption or TXT line that reports edit status, repair actions, version labels, QA, tool names, or delivery state to the user instead of speaking naturally to the audience.
30c2. Runaudit_subtitle_overlay_contract.py --package-dir <package>afterprepare_subtitle_overlay_asset.py --update-blueprintand before Resolve preflight/final QA. Do not accept sidecar-only SRT/TXT as visible subtitles unless the user explicitly requested sidecar delivery; for normal Bilibili/Malta-style delivery, V3 overlay clips must be dense, alpha-capable, visibly nonblank, package-local, audio-free, and title-zone safe.
30d. Generate the title typography plan withprepare_title_typography_plan.py --package-dir <package>before generating, trusting, or handing off title bridge media, then runaudit_cover_title_contract.py --package-dir <package>after scenic title media exists, so opening/chapter/ending titles have exact clean text, font evidence, scenic source evidence, no stacked layers, title-zone subtitle suppression, and a reference-style hero cover title. If title typography, title bridge, cover/title, or title visual proof blocks, runprepare_title_typography_repair_plan.py --package-dir <package> --jsonand close every repair row before Resolve apply.
30e. Generate the visual establishing plan withprepare_visual_establishing_plan.py --package-dir <package>before trusting aerial, landmark, or city-establishing coverage, so opening/chapter/ending rows have local footage hints, famous-place/landmark fallback searches, title evidence, timeline evidence, and exact asset decision fields.
30f. Generate the effect motion plan withprepare_effect_motion_plan.py --package-dir <package>, then materialize it withprepare_effect_motion_blueprint.py --package-dir <package>after transition/bridge candidate blueprints exist, and runaudit_effect_motion_application_contract.py --package-dir <package>after final blueprint lineage, so motion rows are restrained, evidence-backed, title-zone safe, candidate-materialized, final-applied, and not template-heavy.
30g. Generate the feedback regression plan withprepare_feedback_regression_plan.py --package-dir <package>so known complaint probes such asopening_title=0,reported_vertical_clip=7:04,reported_voice_at_7_04=7:04, andopening_bgm_no_voice=0become shared timestamps for pre-render audio policy, post-render feedback audit, and final QA.
30h. Generate the audio scene policy plan withprepare_audio_scene_policy_plan.py --package-dir <package>before asset decisions or Resolve writes, adding--feedback-timestamps <label=mm:ss,...>when the user names an extra moment, so opening/scenic/title/transition/effect windows are A3 BGM-led and cannot leak A1/A2 source or voiceover audio.
30h1. If a package was created without a project-level raw selection pass, generate the footage select fallback withprepare_footage_select_plan.py --package-dir <package>, then readreferences/first-assembly-source-order-contract.mdand runprepare_source_selection_repair_plan.py --package-dir <package>,audit_source_selection_coverage_contract.py --package-dir <package>, andaudit_first_assembly_source_order_contract.py --package-dir <package>before edit-rhythm planning, so selected clips still receive source-quality, orientation, derived-export, chapter-pool triage, full-source ordering, and blocking source-coverage repair evidence.
30h2. If a package was created before this opening-story gate existed, generateopening_story_plan/opening_story_plan.jsonbefore edit-rhythm planning and treat missing beats as structure blockers, not only polish notes.
30h3. Generatechapter_arc_plan/chapter_arc_plan.jsonwithprepare_chapter_arc_plan.py --package-dir <package>before edit-rhythm planning, so every chapter has context, movement, texture, payoff, and aftertaste decisions or owner-script repair rows; after rhythm/creator/source/transition audits, runaudit_chapter_story_spine_contract.py --package-dir <package>,audit_shot_flow_continuity_contract.py --package-dir <package>,audit_transition_breathing_room_contract.py --package-dir <package>,audit_transition_continuity_rehearsal_contract.py --package-dir <package>,audit_pacing_watchability_contract.py --package-dir <package>,audit_narrative_adjacency_contract.py --package-dir <package>, andaudit_transition_viewer_orientation_contract.py --package-dir <package>.
30i. Generate the edit rhythm plan withprepare_edit_rhythm_plan.py --package-dir <package>before asset decisions or Resolve writes, so long raw holds, missing cutaways, weak chapter variety, and flat AI-looking pacing become exact shot-purpose and trim/split/insert decision rows.
30j. Generate the creator cut plan withprepare_creator_cut_plan.py --package-dir <package>after edit-rhythm planning and before rhythm recut or Resolve writes, so the Skill selects hero/main/texture/utility/reject tiers, demotes weak clips, assigns creator functions, and only allows whip/rotation transitions when route-motion evidence exists; later runaudit_final_source_usage_contract.py --package-dir <package>andaudit_creator_cut_application_contract.py --package-dir <package>after final candidate blueprint creation.
30k. Generate the transition grammar plan withprepare_transition_grammar_plan.py --package-dir <package>after creator-cut planning and before rhythm recut or Resolve writes, then readreferences/transition-source-coverage-contract.mdand runaudit_transition_source_coverage_contract.py --package-dir <package>,prepare_transition_choreography_plan.py --package-dir <package>,audit_transition_choreography_contract.py --package-dir <package>,audit_transition_motion_direction_contract.py --package-dir <package>,prepare_transition_execution_blueprint.py --package-dir <package>,audit_transition_cutpoint_contract.py --package-dir <package>,audit_transition_action_anchor_contract.py --package-dir <package>,audit_transition_sensory_continuity_contract.py --package-dir <package>,prepare_transition_preview_packet.py --package-dir <package> --extract-frames --update-transition-grammar,audit_transition_preview_quality_contract.py --package-dir <package>,prepare_transition_audition_packet.py --package-dir <package> --build-clips,audit_transition_audition_quality_contract.py --package-dir <package>,prepare_transition_watch_reel.py --package-dir <package> --build-reel --require-muted,audit_transition_watch_reel_review_contract.py --package-dir <package>,prepare_transition_watch_reel_watchdown_repair_plan.py --package-dir <package>,audit_transition_audition_visual_proof_contract.py --package-dir <package> --extract-frames,audit_transition_audition_role_integrity_contract.py --package-dir <package>,audit_transition_motion_accent_contract.py --package-dir <package>, andaudit_transition_effect_recipe_contract.py --package-dir <package>after transition candidate audits so every adjacent clip pair has an exact cut/dissolve/match/whip/rotation/speed-ramp/bridge-insert decision plus concrete non-generic pre-Resolve decision evidence, source-level outgoing/bridge/landing coverage, restrained Resolve keyframes/easing/envelopes, three-beat choreography, motion-direction proof, motion-accent restraint, cutpoint leave/hit/landing timing, readable outgoing/bridge-or-match/landing action anchors, sensory continuity, package-local preview/frame evidence, one ordered muted transition watch reel with sequence-level review plusready_no_transition_watch_reel_watchdown_repairs_neededcurrent-reel watchdown decisions, and muted watchable MP4 audition plus frame-delta and role-integrity proof for important boundaries.
30k1. Generate transition execution, reference candidates, reference selection, motif, bridge-sequence, bridge-sequence candidate-blueprint, transition candidate-blueprint, final transition-polish candidate plans, transition-quality, shot-boundary, motivation, pair-continuity, execution-readiness, transition-polish application, Resolve transition materialization/apply, bridge-sequence application, transition-bridge-visual-evidence, final-blueprint lineage, effect-motion application, transition-cadence, transition-microstructure, transition-scene-arc, transition-effect-palette, transition-motif-coherence, transition-visual-match, transition-source-coverage, transition-choreography, transition-motion-direction, transition-motion-accent, transition-effect-recipe, transition-cutpoint, transition-action-anchor, transition-sensory-continuity, transition-preview-packet, transition-audition-packet, transition-storyboard, transition-breathing-room, final-cut-smoothness, transition-continuity-rehearsal, pacing-watchability, narrative-adjacency, transition-viewer-orientation, transition-scene-settlement, final-source usage, creator-cut application, rhythm-recut application, reference-scene grammar, reference-profile application, chapter-story-spine, shot-flow-continuity, and timeline-variety audits withprepare_transition_execution_plan.py --package-dir <package>,prepare_transition_reference_candidates.py --package-dir <package>,prepare_transition_reference_selection.py --package-dir <package>,prepare_transition_motif_plan.py --package-dir <package>,prepare_bridge_sequence_plan.py --package-dir <package>,prepare_bridge_sequence_blueprint.py --package-dir <package>,prepare_transition_execution_blueprint.py --package-dir <package>,audit_transition_cutpoint_contract.py --package-dir <package>,audit_transition_action_anchor_contract.py --package-dir <package>,audit_transition_sensory_continuity_contract.py --package-dir <package>, then after BGM/rhythm recutprepare_transition_polish_blueprint.py --package-dir <package>,audit_transition_quality_contract.py --package-dir <package>,audit_shot_transition_boundary_contract.py --package-dir <package>,audit_transition_motivation_contract.py --package-dir <package>,audit_transition_pair_continuity_contract.py --package-dir <package>,audit_transition_execution_readiness_contract.py --package-dir <package>,audit_transition_polish_application_contract.py --package-dir <package>,audit_resolve_transition_materialization_contract.py --package-dir <package>,prepare_resolve_transition_apply_plan.py --package-dir <package>,audit_resolve_transition_apply_contract.py --package-dir <package>,audit_bridge_sequence_application_contract.py --package-dir <package>,audit_transition_bridge_visual_evidence_contract.py --package-dir <package> --extract-frames,audit_final_blueprint_lineage_contract.py --package-dir <package>,audit_effect_motion_application_contract.py --package-dir <package>,audit_transition_cadence_contract.py --package-dir <package>,audit_transition_microstructure_contract.py --package-dir <package>,audit_transition_scene_arc_contract.py --package-dir <package>,audit_transition_effect_palette_contract.py --package-dir <package>,audit_transition_motif_coherence_contract.py --package-dir <package>,audit_transition_visual_match_contract.py --package-dir <package>,audit_transition_source_coverage_contract.py --package-dir <package>,prepare_transition_choreography_plan.py --package-dir <package>,audit_transition_choreography_contract.py --package-dir <package>,audit_transition_motion_direction_contract.py --package-dir <package>,audit_transition_motion_accent_contract.py --package-dir <package>,audit_transition_effect_recipe_contract.py --package-dir <package>,audit_transition_cutpoint_contract.py --package-dir <package>,audit_transition_action_anchor_contract.py --package-dir <package>,prepare_transition_preview_packet.py --package-dir <package> --extract-frames --update-transition-grammar,audit_transition_preview_quality_contract.py --package-dir <package>,prepare_transition_audition_packet.py --package-dir <package> --build-clips,audit_transition_audition_quality_contract.py --package-dir <package>,audit_transition_audition_visual_proof_contract.py --package-dir <package> --extract-frames,audit_transition_audition_role_integrity_contract.py --package-dir <package>,audit_transition_storyboard_contract.py --package-dir <package>,audit_transition_breathing_room_contract.py --package-dir <package>,audit_final_cut_smoothness_contract.py --package-dir <package>,audit_transition_continuity_rehearsal_contract.py --package-dir <package>,audit_pacing_watchability_contract.py --package-dir <package>,audit_narrative_adjacency_contract.py --package-dir <package>,audit_transition_viewer_orientation_contract.py --package-dir <package>,audit_transition_scene_settlement_contract.py --package-dir <package>,prepare_transition_flow_repair_plan.py --package-dir <package> --json,audit_transition_reference_readiness_contract.py --package-dir <package>,audit_final_source_usage_contract.py --package-dir <package>,audit_creator_cut_application_contract.py --package-dir <package>,audit_rhythm_recut_application_contract.py --package-dir <package>,audit_reference_scene_grammar_contract.py --package-dir <package>,audit_reference_profile_application_contract.py --package-dir <package>,audit_chapter_story_spine_contract.py --package-dir <package>,audit_shot_flow_continuity_contract.py --package-dir <package>, andaudit_timeline_variety_contract.py --package-dir <package>before Resolve writes, so approved transitions and final shot choices have concrete Resolve recipes/A-B/C candidate metadata, auto-selected default transitions, BGM-hit timing, title/subtitle avoidance, selected outgoing/bridge/landing source coverage, restrained keyframes/easing/envelopes, three-beat choreography, motion-direction match proof, motion-accent rarity/restraint proof, cutpoint leave/hit/landing timing, readable action-anchor proof, sensory continuity, full boundary coverage, exact from/to pair matching, package-local recipe/handle readiness, shot-to-shot landing proof, scene-arc proof, effect-palette and motif-coherence balance, pair-level visual-match proof, local bridge-video probe/frame proof, generated preview evidence, motion-execution-aware muted watchable transition audition plus frame-delta and role-integrity proof, viewer-purpose/outgoing/bridge/landing storyboard proof, post-transition breathing-room proof, final-cut smoothness proof, row-to-row continuity rehearsal proof, reference-calibrated pacing watchability proof, narrative adjacency proof, viewer-orientation and scene-settlement proof, transition-flow repair closure, transition reference-readiness aggregation, reference-profile application proof, chapter story-spine and shot-flow proof, Resolve marker/readback payload survival, visible-effect API/manual/bridge apply paths, final-blueprint polish survival, restrained effect-motion survival, rhythm-recut main/cutaway survival, materialized 2-5 shot bridge clips, whole-film transition cadence, selected raw-source usage, movement/texture/payoff/aftertaste variety, and latest candidate-chain lineage preserved in the final candidate instead of repeated/template effects or stale active blueprints.
30l. Generate the rhythm recut candidate blueprint withprepare_rhythm_recut_blueprint.py --package-dir <package>after the BGM phrase candidate and before asset decisions or Resolve writes, so long raw holds are split with existing-footage cutaways while preserving transition/effect/BGM phrase metadata in a separaterhythm_recut_blueprint/resolve_timeline_blueprint_rhythm_recut.json. Do not replace the active blueprint unless--update-blueprintis explicitly approved; preflight the candidate first.
30m. When the rhythm recut candidate is approved, fork a Resolve-ready package withprepare_rhythm_recut_apply_package.py --source-package <package> --run-preflight --output-dir <new-package>. The new package must make the recut blueprint active, keep the source package unmodified, avoid copying stale final-render proof, and pass blueprint preflight beforeprepare_resolve_apply_contract.py.
30n. Generatereference_style_repair_plan/reference_style_repair_plan.jsonwithprepare_reference_style_repair_plan.py --package-dir <package>after rhythm recut planning and after any blocked reference/director/final QA audit, then runaudit_reference_repair_closure.py --package-dir <package>,audit_transition_reference_readiness_contract.py --package-dir <package>,audit_transition_sequence_satisfaction_contract.py --package-dir <package>,audit_final_viewer_friction_contract.py --package-dir <package>,audit_first_draft_satisfaction_contract.py --package-dir <package>,prepare_unattended_repair_queue.py --package-dir <package>,audit_whole_film_satisfaction_contract.py --package-dir <package>, andaudit_one_shot_autonomy_contract.py --package-dir <package>, so style, transition-readiness, ordered muted transition watch-reel review, current-output editorial watchdown, transition-sequence-satisfaction/blocked_transition_sequence_satisfaction, viewer-friction, first-draft-satisfaction,blocked_whole_film_satisfaction,blocked_one_shot_autonomy, and QA gaps become executable repair rows withexecutionOrder,commandResolved, zero unresolved placeholders, andpostRepairCommands; P0 rows cannot be called fixed without required artifacts plus post-repair evidence. Rerun the queue if whole-film or one-shot autonomy blocks. - Run
apply_asset_sourcing_decisions.pyafter exact asset decisions are filled; use--applyonly after approval evidence is complete. - Run
audit_delivery_package.pyand follow P0 next actions. - Run
audit_client_delivery_rules.py; if it is blocked, fix the product/editorial issue before Resolve writes or final claims. If the blocker is a black/generic title moment, build a visual-polish package with scenic opening/chapter/ending video bridges and re-run the audit. If the blocker isResolve blueprint contains no raw portrait/square/unknown video clips in the 16:9 master, runprepare_orientation_repair_package.py --source-package <old-package> --output-dir <new-package>or repair the stylefix/orientation pass so every actual videosourcePathis landscape or an explicitly designed insert, then re-run blueprint/client audits on the new package. - Run
build_resolve_timeline.py --blueprint <package>/resolve_timeline_blueprint.jsonfor dry-run. - Run
audit_resolve_blueprint.py --blueprint <package>/resolve_timeline_blueprint.json --package-dir <package>,audit_chapter_story_spine_contract.py --package-dir <package>,audit_shot_flow_continuity_contract.py --package-dir <package>,audit_transition_breathing_room_contract.py --package-dir <package>,audit_final_cut_smoothness_contract.py --package-dir <package>,audit_transition_continuity_rehearsal_contract.py --package-dir <package>,audit_pacing_watchability_contract.py --package-dir <package>,audit_narrative_adjacency_contract.py --package-dir <package>,audit_transition_viewer_orientation_contract.py --package-dir <package>,audit_transition_scene_settlement_contract.py --package-dir <package>,audit_transition_motion_accent_contract.py --package-dir <package>,audit_transition_effect_recipe_contract.py --package-dir <package>,prepare_transition_flow_repair_plan.py --package-dir <package> --json,audit_transition_reference_readiness_contract.py --package-dir <package>,audit_transition_sequence_satisfaction_contract.py --package-dir <package>,audit_final_viewer_friction_contract.py --package-dir <package>,audit_first_draft_satisfaction_contract.py --package-dir <package>,prepare_unattended_repair_queue.py --package-dir <package>,audit_whole_film_satisfaction_contract.py --package-dir <package>,audit_unattended_first_draft_contract.py --package-dir <package>,audit_one_shot_autonomy_contract.py --package-dir <package>, andaudit_large_source_unattended_readiness_contract.py --package-dir <package>before any Resolve write approval. - Run
prepare_resolve_apply_contract.py --package-dir <package>before requesting approval forbuild_resolve_timeline.py --apply. - Use
--applyonly after the user approves the new Resolve project/timeline write contract, Resolve blueprint preflight is not blocked, and the delivery audit has no blockers. - After any
--apply, runaudit_resolve_timeline.pyand save the report. - Run
prepare_resolve_render.py --package-dir <package>to writerender_plan.json; confirm the plan recordsVideoQualityat a high-bitrate target, normally numeric80000or higher for 4K long-form masters. - Run
audit_delivery_package.pyagain; final render is allowed only when it reportsready_for_final_render. - Use
prepare_resolve_render.py --queueor--queue --startonly after the user explicitly approves final render queue/start. - Run
verify_render_delivery.py --package-dir <package> --output <final.mp4>after the render completes. Use--expect-subtitles burned-in,embedded, orsidecaraccording to the actual subtitle delivery mode. Do not claim delivery if this report is blocked.
42a. When subtitles are expected in the MP4, runaudit_rendered_subtitle_visibility_contract.py --package-dir <package>afterverify_render_delivery.py. If it blocks, inspect the saved sample frames, fix the Resolve track/export/overlay issue, rerender, and rerun the audit; do not count SRT files or overlay assets as final-render subtitle proof.
42b. When opening/chapter/ending title moments are expected in the MP4, runaudit_rendered_title_visibility_contract.py --package-dir <package>afterverify_render_delivery.pyand after title bridge/cover/title-visual audits. If it blocks, inspect the saved sample frames, fix missing/invisible/black-card/ghosted title layers in Resolve or the blueprint, rerender, and rerun the audit; do not count scenic title assets or blueprint rows as final-render title proof.
42c. When any blueprint clip hasdashboardObstructionDetected=true, runaudit_dashboard_reframe_render.py --blueprint <package>/resolve_timeline_blueprint.json --render <final.mp4>. Do not accept onlySetPropertyreadback; require rendered source-vs-output pixel evidence with no solid black lower edge.
Afterverify_render_delivery.pypasses, runscripts/audit_visual_audio_style.pywith opening, chapter, transition, ending, and user-feedback timestamps, then runscripts/audit_rendered_transition_proof_contract.py --package-dir <package>so final-MP4 transition windows have frame evidence. Include--require-clean-title, the visual manifest, the BGM manifest, and--audio-mode bgm_onlywhenever the user requested no voiceover or BGM-led scenic sections. If either audit is blocked, fix and re-render before running or trustingaudit_client_delivery_rules.py.
42d. After the individual final-render checks pass, runaudit_final_render_quality_bundle.py --package-dir <package> --output <final.mp4>. It must returnfinalRenderQualityBundleReady=true,outputMatchesRenderVerification=true,allRequiredReportsPassed=true, andclaimsDaVinciLevelWithoutBundle=false; if it blocks, regenerate the missing stale report or rerender before claiming a DaVinci-level delivery.
42e. After any user complaint about a rendered draft, runscripts/audit_feedback_regressions.py --package-dir <package> --feedback-timestamps <label=time,...> --include-title-points. Include exact complaint times such asopening_title=0orreported_vertical_clip=7:04. If this audit is blocked, fix the package and Skill rule/script that allowed the failure, then re-render or re-audit until it passes. - Run
audit_location_truth_contract.py --package-dir <package>before long-form/client final claims. Treatpassed_with_caveatsas acceptable only when the final language is honest about visual/non-GPS route reconstruction; run--require-verified-per-clip-locationwhen exact per-video geolocation is required.
43a. Runaudit_longform_delivery.py --package-dir <package>after final render verification and location-truth QA pass. Use--require-verified-per-clip-locationonly when the user requires GPS-grade/per-clip location truth; otherwise keep route uncertainty as an explicit caveat. - Extract a final render contact sheet around the opening, every chapter title/transition, several mid-film subtitles, and the ending. Reject the render if these frames show black slates, generic country titles where city titles are expected, internal labels, hand/phone-obstructed title backgrounds, unreadable text, missing BGM evidence, or incoherent portrait/rotated footage.
- Run
audit_client_delivery_rules.pyagain after final render verification and before saying a client can receive it.
45a. Runaudit_bgm_audio_contract.py --package-dir <package> --audio-mode bgm_onlyandaudit_final_bgm_mix_contract.py --package-dir <package>after visual/audio QA and before story QA. Readreferences/final-bgm-mix-contract.mdfirst when the final MP4 BGM sounds missing, quiet, or hum-like. If either audit blocks on stale BGM manifest output, stale asset-ledger localPath, missing A3 cue, audible silence, leaked A1/A2 audio, non-audible title/bridge windows, or hum-risk windows, repair the package and re-render/re-run before continuing.
45b. Runaudit_story_style_contract.py --package-dir <package> --audio-mode bgm_onlyafter client-rule QA. Add--require-rendered-subtitleswhen subtitles must be visible in the MP4, not merely delivered as SRT/TXT. Treatpassed_with_warningsas not perfect; fix or explain the warning before saying the Skill can deliver unattended.
45c. Runaudit_reference_style_alignment.py --package-dir <package>after the story contract audit when the user asks for Bilibili/Malta/creator-reference quality. If the score is below the configured threshold, revise the route structure, bridge footage, lived-in details, subtitle density, BGM support, or title/ending polish before claiming the Skill is mature.
45cc. Runaudit_director_intent_contract.py --package-dir <package>after reference-style QA. If it blocks, revise the opening mission, chapter arc, shot pacing, caption story, BGM/no-voiceover support, or ending before saying the edit has a real director intent.
45d. Runaudit_route_texture_contract.py --package-dir <package>after director-intent QA. If it blocks, add or relabel real bridge footage around day/place boundaries, strengthen chapter texture with transport/street/food/hotel/weather/detail clips, and re-run before title/package-integrity handoff.
45e. Runaudit_title_bridge_contract.py --package-dir <package>after route-texture QA and before package integrity. If it blocks, regenerate scenic title bridges or repair Resolve blueprint title clips before trusting contact sheets or OCR.
45f. Runaudit_stock_aerial_closure.py --package-dir <package>after title and route-texture audits. Add--update-blueprintwhen the final blueprint should record that search-only stock/aerial placeholders were closed. If it blocks, materialize/verify required stock assets or remove/close stale placeholders with evidence before director-polish QA.
45g. Runaudit_director_polish_contract.py --package-dir <package>after stock/aerial closure and title/BGM/route/style audits. If it blocks, fix the missing director-polish evidence before handoff.
45h. Runaudit_package_integrity.py --package-dir <package>after all final QA reports are regenerated. Runaudit_package_integrity.py --package-dir <package> --strict-portablebefore any external handoff. If strict mode blocks, copy/materialize sidecar assets into the package or update stale blueprint/report paths, then re-run the affected audits.
45i. Runaudit_skill_maturity_contract.py --package-dir <package>after package-integrity QA to prove the Skill's reusable safeguards cover the original complaint set, including first-assembly source-order, large-source unattended-readiness, transition-reference-readiness, transition-sequence-satisfaction, final-viewer-friction, first-draft-satisfaction, whole-film-satisfaction, one-shot-autonomy, unattended repair queue, creator-cut application, rhythm-recut application, chapter-story-spine, shot-flow-continuity, timeline-variety, transition-polish application, restrained effect-motion application, Resolve transition materialization/apply, bridge-sequence application, transition bridge visual evidence, final-blueprint lineage, transition cadence, transition microstructure, transition scene-arc, transition effect-palette, transition motif-coherence, transition visual-match, transition-action-anchor, transition-sensory-continuity, transition-motion-accent, transition-breathing-room, final-cut-smoothness, transition-continuity-rehearsal, pacing-watchability, narrative-adjacency, transition-viewer-orientation, transition-scene-settlement, transition pair-continuity, and execution-readiness. If it blocks, fix the Skill rule/script/report that let the gap through; for orientation failures, prefer actual blueprint source-path repairs over relying only on final-render sampled frames.
45ia. Runrun_skill_release_audit.py --skill-dir <skill-dir>after substantial Skill changes and before tagging/publishing, then runaudit_v012_baseline_regression.py --skill-dir <skill-dir>andaudit_trip_generalization_contract.py --skill-dir <skill-dir>directly if the aggregate report points to one of those child gates. If no real footage is available, runrun_editor_delivery_matrix.pyso fixture generation, DaVinci integration audit, Resolve writeability, Jianying/CapCut state audit, Jianying/CapCut handoff behavior, Jianying/CapCut handoff contract, Jianying/CapCut TTS/export readiness, current-audit bootstrap trapping, no-material transition/music-pacing/BGM-musicality/cover/viewer/rendered/CapCut draft traps, Resolve live-write dry-run, Resolve V1/V3/A3 delivery-structure dry-run, and Resolve render-readiness dry-run are exercised in one report; for release confidence, preferrun_no_material_full_editor_drill.py --expected-version <tag>so release audit, editor matrix, focused Jianying/CapCut smoke, BGM musicality smoke, final-render bundle smoke, whole-film satisfaction smoke, one-shot autonomy smoke, forward-test smoke, and Resolve export smoke evidence live in one report. When a machine is expected to have Jianying/CapCut installed, add--require-jianying-installedtorun_no_material_editor_smoke.py,run_editor_delivery_matrix.py, or the full drill and require top-leveljianyingInstalledRequired=true,jianyingBlockedByMissingApp=false,jianyingHandoffOnlyNotGuiProof=trueuntil real GUI proof exists, andjianyingClaimsTtsOrExport=falseunless a current ffprobe-readable GUI export is supplied. When Resolve live writes and settings must be proven, runaudit_resolve_writeability_state.py --json, then runrun_editor_delivery_matrix.py --apply-resolve-allorrun_no_material_full_editor_drill.py --apply-resolve-all; userun_resolve_live_write_smoke.py --applyplusrun_resolve_delivery_structure_smoke.py --applyplusrun_resolve_render_readiness_smoke.py --apply-resolve-settingsonly when debugging one sub-proof. These apply paths require approved throwaway project/timeline writes plus readback, acceptedreadbackIdentityProof,sourcePathsMatch, render-readinessresolveStructurePrerequisiteSourcePathsMatch, and no parallel Resolve apply smokes;--apply-resolve-allmust still not queue or start a render. When the actual Resolve export path must be proven without user footage, runrun_resolve_render_export_smoke.py --applyseparately orrun_no_material_full_editor_drill.py --apply-resolve-render-export, then requirerenderStarted=true,renderCompleted=true, ffprobe-readable output, nonblank sample frames, andclaimsFinalRender=false; when the actual high-quality export path must be proven, runrun_resolve_render_export_smoke.py --apply --quality-profile delivery-4korrun_no_material_full_editor_drill.py --apply-resolve-all --apply-resolve-render-export --quality-profile delivery-4kand requirequalityProfile=delivery-4k,renderVideoQuality>=80000, output width/height at least 3840x2160, output FPS at least 59, andtoolchainOnlyNoRealFootage=true. Do not merge this queue/start render smoke into the default matrix. Use the individualcreate_skill_benchmark_fixture.py,audit_resolve_writeability_state.py,audit_jianying_capcut_state.py,audit_jianying_handoff_contract.py,audit_jianying_tts_export_readiness.py,audit_editor_integration_contract.py,run_no_material_editor_smoke.py,run_no_material_bgm_musicality_smoke.py,run_no_material_one_shot_autonomy_smoke.py,run_no_material_forward_test_smoke.py,run_jianying_gui_tts_export_smoke.py,run_editor_delivery_matrix.py,run_no_material_full_editor_drill.py,run_resolve_live_write_smoke.py,run_resolve_delivery_structure_smoke.py,run_resolve_render_readiness_smoke.py,run_resolve_render_export_smoke.py, andprepare_jianying_handoff_package.pyscripts only when debugging one sub-step. If any release gate blocks, restore the v0.1.2 Parallel World cover/reference baseline, remove hard-coded trip defaults, fix compile/integration failures, or add explicit/derived title, country, route, Resolve-name, and BGM-mood parameters before forward-testing.
45ia1. When changing Jianying/CapCut behavior, also runrun_jianying_gui_tts_export_smoke.py --output-dir <tmp> --overwrite --json,prepare_jianying_gui_verification_pack.py --output-dir <tmp> --overwrite --json, and thefill_jianying_gui_proof_fields.pytrap throughrun_no_material_full_editor_drill.py; if the app is required, add--require-installedand treatblockedByMissingApp=trueas a real blocker. Do not claim Jianying TTS/export until the proof filler or equivalent checked evidence has safely reachedcompleted_gui_proof, and the post-export focused smoke hasclaimsJianyingTtsOrExport=true,exportCountsAsGuiProof=true, andexportFileIsPreparedInput=false; a verification pack withreadyForInstallThenGuiProof=trueorreadyForGuiOperator=trueis only handoff readiness, not GUI completion.
45ib. Runaudit_skill_forward_test_contract.pyafter substantial Skill changes when cross-trip evidence exists. Use the latest external media intake packet, the known-good package, a separate blocked project/location-truth report, and that blocked project's recovery plan; if it blocks, fix the Skill so it does not overfit one successful trip or leave blocked projects without a next route. When no real forward-test evidence is available, runrun_no_material_forward_test_smoke.py --skill-dir <skill-dir>as a contract-regression trap only, and keepclaimsCrossTripGeneralizationFromNoMaterial=false. Save the report under the Skill upgrade QA folder and summarize it in the regression report before handing the Skill to another AI.
45j. Runrun_final_qa_suite.py --package-dir <package> --feedback-timestamps <label=time,...>after the final individual audits, or when handing work to another AI/editor. Include exact user complaint timestamps such asopening_title=0,reported_vertical_clip=7:04. Treat the suite as the final "nothing got forgotten" gate, including the final render quality bundle audit, first-assembly source-order, large-source unattended-readiness, transition-reference-readiness viareferences/transition-reference-readiness-contract.mdandaudit_transition_reference_readiness_contract.pyreturningpassedinstead ofblocked_transition_reference_readiness, final-viewer-friction viareferences/final-viewer-friction-contract.mdandaudit_final_viewer_friction_contract.pyreturningpassedinstead ofblocked_final_viewer_friction, first-draft-satisfaction viareferences/first-draft-satisfaction-contract.mdandaudit_first_draft_satisfaction_contract.pyreturningpassedinstead ofblocked_first_draft_satisfaction, whole-film-satisfaction viareferences/whole-film-satisfaction-contract.mdandaudit_whole_film_satisfaction_contract.pyreturningpassedinstead ofblocked_whole_film_satisfaction, one-shot-autonomy viareferences/one-shot-autonomy-contract.mdandaudit_one_shot_autonomy_contract.pyreturningpassedinstead ofblocked_one_shot_autonomy, unattended repair queue, rhythm-recut application, transition-polish application, effect-motion application, Resolve transition materialization/apply, final-blueprint lineage, transition cadence, transition microstructure, transition scene-arc, transition effect-palette, transition motif-coherence, transition visual-match, transition-flow repair, transition-action-anchor, transition-sensory-continuity, transition-motion-accent, transition-breathing-room, final-cut-smoothness, transition-continuity-rehearsal, pacing-watchability, narrative-adjacency, transition-viewer-orientation, transition-scene-settlement, transition-watch-reel viareferences/transition-watch-reel-contract.md,references/transition-watch-reel-review-contract.md,prepare_transition_watch_reel.py,audit_transition_watch_reel_review_contract.py, andprepare_transition_watch_reel_watchdown_repair_plan.pyreturningready_with_transition_watch_reel/ready_no_important_transitions,passed/passed_no_important_transitions, andready_no_transition_watch_reel_watchdown_repairs_needed, reference-review repair, editorial-watchdown repair withprepare_editorial_watchdown_repair_plan.pyandready_no_editorial_watchdown_repairs_needed, reference-profile application, chapter-story-spine, shot-flow-continuity, and timeline-variety.
45k. Runaudit_v14_baseline_contract.py --package-dir <package>after final QA or substantial Skill edits. Treat a pass as proof that V14's lessons, including first-assembly source-order, large-source unattended-readiness, transition-reference-readiness, final-viewer-friction, first-draft-satisfaction, whole-film-satisfaction, one-shot-autonomy, unattended repair queue, chapter-story-spine, shot-flow-continuity, final-blueprint transition-polish survival, restrained effect-motion application, Resolve transition payload materialization, apply-path proof, candidate-chain lineage, film-level transition cadence, transition microstructure, transition scene-arc, transition effect-palette, transition motif-coherence, transition visual-match, transition-action-anchor, transition-sensory-continuity, transition-motion-accent, transition-watch-reel and transition-watch-reel-review, transition-breathing-room, final-cut-smoothness, transition-continuity-rehearsal, pacing-watchability, narrative-adjacency, transition-viewer-orientation, transition-scene-settlement, reference-profile application, editorial-watchdown closure, and timeline-variety, are encoded into the Skill gates; treat a block as a Skill integration bug, not as a reason to keep generating V15/V16 drafts. - When the user rejects voiceover or criticizes draft quality, run
prepare_quality_recut.py --source-package <package>before the next Resolve write. The recut must remove voiceover audio, export narration as TXT/SRT, increase caption density, keep BGM audible, insert opening/ending city aerials, and target 59.94/60fps. - Use web search only for current licensed music, stock footage, aerial footage, fonts, or tool documentation; record source URLs and license notes.
- Use Computer Use only when a GUI editor has no reliable API/import-file path or a Resolve modal blocks the scripting API.
Editor Preference
Prefer direct, file/API-based workflows:
- FFmpeg or platform media tools for deterministic preview/final assembly.
- DaVinci Resolve Python/Lua API when Resolve is installed and available. This is the preferred route for 20-minute final assembly.
- FCPXML/EDL/XML import for Final Cut Pro, DaVinci Resolve, or Premiere.
- Computer Use for CapCut/Jianying/GUI-only flows only after explaining why direct control is unavailable.
Safety
- Original footage folders are read-only.
- Cloud vision, TTS, BGM download, stock download, and external asset use require explicit user approval.
- Local Ollama vision may run on extracted local frames, but it is not GPS truth; keep low-confidence results auditable and human-reviewed.
- Local OCR may support route review, but OCR-only place hints must stay low/medium confidence unless corroborated by visual/cloud evidence.
- Never use unlicensed music, fonts, stock footage, or aerial footage in a final delivery.
- Do not fabricate that a Tokyo aerial, BGM track, font, or license has been downloaded. Search, cite, and record it.
- Never put project slugs, random IDs, placeholder Chinese, or internal workflow labels on the opening frame.
- Never claim a customer-ready cut when the opening, chapter cards, or ending are black slates instead of approved aerial/establishing/scenic hooks with clean city/place title typography.
- Never claim a customer-ready cut when any actual Resolve blueprint video
sourcePathffprobe-scans as portrait, square, unknown, or unprobeable unless that exact clip is explicitly declared as a designed phone/split-screen/PiP insert with crop/matte/blur/reframe treatment and the client delivery audit passes. - Never claim GPS-grade, exact, or verified per-video location truth from visual frame review alone; use
audit_location_truth_contract.pyto decide the allowed claim level. - Never overwrite
confirmed_route_timeline.jsonfrom a blocked/pending route review. Useprepare_confirmed_route_candidate.pyorprepare_codex_visual_confirmed_route.pyfirst, runaudit_confirmed_route_candidate.py, and require explicit--applyapproval. - Never queue or start a Resolve render while
delivery_audit.jsonhas blockers, asset rows are unverified, orresolve_audit.jsonis missing. - Keep raw route and recognition artifacts auditable.