# Checklist 19 Steps

Project ID: <DDMMYYYY-XXX-Slug>
Channel: Vet Muc Thoi Gian
Workflow version: v1-19-step-history-video
Current step: 1
Updated at: 2026-05-27T18:40:04

Rule: After completing any step, update this checklist JSON and the Markdown mirror immediately before reporting completion.

## [ ] Step 01 - Receive story/input and create project folder

Status: pending

Input:
- story_input
- main_character
- topic

Output:
- project_folder
- checklist_19_steps.json
- checklist_19_steps.md

Validation:
- [ ] Project folder exists
- [ ] Checklist JSON/MD exists

## [ ] Step 02 - Clean story and split scene/dense plan

Status: pending

Input:
- script/source_story.txt

Output:
- script/cleaned_story.txt
- script/scenes.json
- script/scenes_validation.json

Validation:
- [ ] Cleaned story exists
- [ ] Scenes valid
- [ ] Metadata not turned into scenes

## [ ] Step 03 - Create character bible

Status: pending

Input:
- script/cleaned_story.txt
- script/scenes.json

Output:
- script/character_bible.json

Validation:
- [ ] Character bible exists
- [ ] Main/supporting characters covered

## [ ] Step 04 - Create/validate/approve scenes dense plan

Status: pending

Input:
- script/scenes.json
- script/character_bible.json

Output:
- script/scenes.json approved dense plan

Validation:
- [ ] Dense plan has scene_id/summary/narration/visual_prompt
- [ ] Approved for next step

## [ ] Step 05 - Generate character references before scene images

Status: pending

Input:
- script/scenes.json
- script/character_bible.json

Output:
- script/character_reference_plan.json
- characters/*_ref.png

Validation:
- [ ] Required refs generated before scene images
- [ ] Refs approved/recorded

## [ ] Step 06 - Generate scene images and final thumbnails

Status: pending

Input:
- approved character refs
- script/scenes.json

Output:
- images/scenes/scene_*.png
- output/thumbnails/thumb_16x9_final.png
- output/thumbnails/thumb_9x16_final.png

Validation:
- [ ] All scenes have 16:9 images
- [ ] Both thumbnails exist

## [ ] Step 07 - Generate TTS audio for each scene

Status: pending

Input:
- script/scenes.json

Output:
- audio/scenes/scene_*.wav
- logs/step_07_tts_manifest.json

Validation:
- [ ] One TTS file per scene
- [ ] OmniVoice payload lowercased while subtitles/source keep original casing
- [ ] Manifest/log written

## [ ] Step 08 - Build master narration timeline on worker

Status: pending

Input:
- audio/scenes/scene_*.wav
- script/scenes.json

Output:
- audio/master_narration.wav
- audio/master_narration_timeline.json

Validation:
- [ ] Master narration exists
- [ ] Timeline is source of truth

## [ ] Step 09 - Probe real audio durations on worker

Status: pending

Input:
- audio/master_narration.wav

Output:
- audio/master_audio_probe.json

Validation:
- [ ] Worker probe duration locked

## [ ] Step 10 - ASR master narration word timestamps

Status: pending

Input:
- audio/master_narration.wav

Output:
- subtitles/master_narration_asr_words.json

Validation:
- [ ] ASR output has word timestamps

## [ ] Step 11 - Map original narration to ASR word timing

Status: pending

Input:
- script/scenes.json
- subtitles/master_narration_asr_words.json

Output:
- subtitles/master_subtitles.srt
- subtitles/master_subtitles_mapping.json

Validation:
- [ ] Subtitle text from original narration
- [ ] Heading scenes hard cue boundaries

## [ ] Step 12 - Clamp subtitle safe gaps and validate no overlap

Status: pending

Input:
- subtitles/master_subtitles.srt
- audio/master_audio_probe.json

Output:
- subtitles/master_subtitles_clamped.srt
- subtitles/master_subtitles_validation.json

Validation:
- [ ] Zero overlaps/invalid cues
- [ ] Within master duration

## [ ] Step 13 - Split render into sync-safe parts

Status: pending

Input:
- audio/master_narration.wav
- subtitles/master_subtitles_clamped.srt

Output:
- parts/part_ranges.json
- parts/audio/part_XX.wav
- parts/subtitles/part_XX.srt

Validation:
- [ ] Part audio/subtitles rebased
- [ ] Part durations valid

## [ ] Step 14 - Render each part with exact part audio/subtitle on worker

Status: pending

Input:
- parts/part_ranges.json
- parts/audio/part_XX.wav
- parts/subtitles/part_XX.srt

Output:
- render_parts/part_XX.mp4
- render_parts/render_validation.json

Validation:
- [ ] All part MP4s valid
- [ ] Exact part audio/subtitle used
- [ ] Smooth/crossfade timing compensated

## [ ] Step 15 - Concat rendered parts into main story video on worker

Status: pending

Input:
- render_parts/part_XX.mp4
- render_parts/render_validation.json

Output:
- output/main_story.mp4
- output/main_story_probe.json
- output/concat_report.json

Validation:
- [ ] Part order matches part_ranges
- [ ] Main has audio/video
- [ ] Duration close to sum parts

## [ ] Step 16 - QA early/mid/late main story video

Status: pending

Input:
- output/main_story.mp4
- output/concat_report.json

Output:
- output/main_story_qa_report.json

Validation:
- [ ] Early/mid/late and joins QA report written
- [ ] No blocker

## [ ] Step 17 - Create project intro with locked format

Status: pending

Input:
- series/title metadata
- logo
- thumbnail
- voice refs

Output:
- output/intro/intro_audio.wav
- output/intro/intro.mp4
- output/intro/intro_probe.json

Validation:
- [ ] Locked intro form metadata respected
- [ ] TTS payload lowercase
- [ ] Intro audio/video valid

## [ ] Step 18 - Final package intro + main + outro + BGM audio-safe

Status: pending

Input:
- output/intro/intro.mp4
- output/main_story.mp4
- outro asset
- BGM asset

Output:
- output/final/final_video.mp4
- output/final/final_video_probe.json
- output/final/final_package_report.json

Validation:
- [ ] Audio-safe package on worker
- [ ] BGM volume default 0.20
- [ ] Probe/blackdetect report

## [ ] Step 19 - QA final, write output/info.json, approve output

Status: pending

Input:
- output/final/final_video.mp4
- thumbnails
- prior reports

Output:
- output/final/final_qa_report.json
- output/info.json

Validation:
- [ ] Final QA passed
- [ ] output/info.json complete
- [ ] Hashtags include #vetmucthoigian
