完整 final_story JSON
{
"id": "final_story_v2_15_phrases_camera_direction",
"title": "The Tiny Rocket Test",
"status": "15_phrase_story_rhythm_reordered_ready_for_review",
"updated_at": "2026-06-21 17:44 CST",
"provenance": "主 Hermes rewrite per user request: 15 phrases + distinct camera direction per beat",
"logline": "Mia first keeps Leo safe, then the two slow down, cooperate, test, fail, retry, and finally make the tiny rocket light work.",
"story_requirements": {
"phrase_count": 15,
"mini_plot": "setup -> problem -> reaction -> attempts -> careful test -> payoff",
"visual_style": "F soft 3D clay toy style, warm classroom craft corner, Mia/Leo/metal toy rocket consistent",
"camera_rule": "Use 6 camera segments matching the 6 paragraphs of full_story_zh_tw; each segment may contain multiple 4–15s generation clips. Do not use phrase-only simplifications.",
"audio_rules": "Use the 15 taught English phrases as primary dialogue; no BGM unless explicitly requested.",
"dialogue_rule": "The 15 taught phrases remain primary dialogue, but each beat may include short support lines that add character intent, reaction, and story detail.",
"phrase_order_rule": "Final story phrase order follows narrative rhythm and safety logic; it does not need to match p01-p15 production order."
},
"beats": [
{
"beat_id": "s01_p01_watch_out",
"story_order": 1,
"phrase_id": "p01",
"phrase": "Watch out!",
"zh_tw": "小心!",
"plot_function": "safety alert",
"visual_action": "Leo hurries into the craft corner carrying a parts box and nearly steps on a fallen rocket fin. Mia spots it first and points down.",
"dialogue": [
{
"speaker": "Mia",
"line": "Watch out!",
"line_zh_tw": "小心!",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "That was close.",
"line_zh_tw": "差一點。",
"taught_phrase": false
},
{
"speaker": "Mia",
"line": "Safe first.",
"line_zh_tw": "安全第一。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam01_safety_before_work"
},
{
"beat_id": "s02_p11_slow_down",
"story_order": 2,
"phrase_id": "p11",
"phrase": "Slow down.",
"zh_tw": "慢一點。",
"plot_function": "slow the pace",
"visual_action": "Leo starts moving too fast with the parts box and loose pieces. Mia calmly reminds him to slow his hands and arrange the parts one by one.",
"dialogue": [
{
"speaker": "Mia",
"line": "Slow down.",
"line_zh_tw": "慢一點。",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "Okay. Slowly.",
"line_zh_tw": "好,慢慢來。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam01_safety_before_work"
},
{
"beat_id": "s03_p02_hold_on",
"story_order": 3,
"phrase_id": "p02",
"phrase": "Hold on.",
"zh_tw": "等一下。",
"plot_function": "stop before unsafe action",
"visual_action": "Leo reaches toward the separate red button box before the rocket is fixed. Mia places an open stop hand between Leo and the button.",
"dialogue": [
{
"speaker": "Mia",
"line": "Hold on.",
"line_zh_tw": "等一下。",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "I won’t press it yet.",
"line_zh_tw": "我先不按。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam01_safety_before_work"
},
{
"beat_id": "s04_p06_need_help",
"story_order": 4,
"phrase_id": "p06",
"phrase": "Need help?",
"zh_tw": "需要幫忙嗎?",
"plot_function": "offer help",
"visual_action": "Mia steadies the rocket while reaching for tape across the table. Leo notices she needs another pair of hands and steps in.",
"dialogue": [
{
"speaker": "Leo",
"line": "Need help?",
"line_zh_tw": "需要幫忙嗎?",
"taught_phrase": true
},
{
"speaker": "Mia",
"line": "Yes, please. Hold this side.",
"line_zh_tw": "好,請幫我扶這邊。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam02_help_and_handoff"
},
{
"beat_id": "s05_p12_pass_it_here",
"story_order": 5,
"phrase_id": "p12",
"phrase": "Pass it here.",
"zh_tw": "把它遞給我。",
"plot_function": "tool request",
"visual_action": "The blue tape roll is near Leo. Mia keeps one hand on the rocket and asks him to send the tape across the table.",
"dialogue": [
{
"speaker": "Mia",
"line": "Pass it here.",
"line_zh_tw": "把它遞給我。",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "Here it comes.",
"line_zh_tw": "來了。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam02_help_and_handoff"
},
{
"beat_id": "s06_p13_i_got_it",
"story_order": 6,
"phrase_id": "p13",
"phrase": "I got it.",
"zh_tw": "我拿到了。",
"plot_function": "successful catch",
"visual_action": "The tape almost rolls off the edge, but Leo catches it and places it safely into Mia’s hand.",
"dialogue": [
{
"speaker": "Leo",
"line": "I got it.",
"line_zh_tw": "我拿到了。",
"taught_phrase": true
},
{
"speaker": "Mia",
"line": "Nice catch.",
"line_zh_tw": "接得好。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam02_help_and_handoff"
},
{
"beat_id": "s07_p03_my_turn",
"story_order": 7,
"phrase_id": "p03",
"phrase": "My turn.",
"zh_tw": "換我了。",
"plot_function": "turn-taking",
"visual_action": "After Mia demonstrates the first tape/screw step, Leo receives the same tool and takes his turn carefully.",
"dialogue": [
{
"speaker": "Leo",
"line": "My turn.",
"line_zh_tw": "換我了。",
"taught_phrase": true
},
{
"speaker": "Mia",
"line": "Turn it slowly.",
"line_zh_tw": "慢慢轉。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam03_careful_repair"
},
{
"beat_id": "s08_p07_good_idea",
"story_order": 8,
"phrase_id": "p07",
"phrase": "Good idea.",
"zh_tw": "好主意。",
"plot_function": "solution idea",
"visual_action": "Leo notices the support ring will sit straighter if they align it before taping. Mia understands and approves the idea.",
"dialogue": [
{
"speaker": "Mia",
"line": "Good idea.",
"line_zh_tw": "好主意。",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "Ring first, then tape.",
"line_zh_tw": "先支撐環,再膠帶。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam03_careful_repair"
},
{
"beat_id": "s09_p08_almost_there",
"story_order": 9,
"phrase_id": "p08",
"phrase": "Almost there.",
"zh_tw": "快好了。",
"plot_function": "near completion",
"visual_action": "Only one curved support piece remains. Leo slowly lowers the exact piece into the clear gap in the support ring.",
"dialogue": [
{
"speaker": "Mia",
"line": "Almost there.",
"line_zh_tw": "快好了。",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "One last piece.",
"line_zh_tw": "剩最後一塊。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam03_careful_repair"
},
{
"beat_id": "s10_p14_ready",
"story_order": 10,
"phrase_id": "p14",
"phrase": "Ready?",
"zh_tw": "準備好了嗎?",
"plot_function": "readiness check",
"visual_action": "The rocket is upright. Mia checks the table, the separate red button box, and Leo’s readiness before touching the button.",
"dialogue": [
{
"speaker": "Mia",
"line": "Ready?",
"line_zh_tw": "準備好了嗎?",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "Ready.",
"line_zh_tw": "準備好了。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam04_first_test_fail"
},
{
"beat_id": "s11_p09_let_s_go",
"story_order": 11,
"phrase_id": "p09",
"phrase": "Let’s go!",
"zh_tw": "出發!",
"plot_function": "test start",
"visual_action": "Leo looks at the repaired rocket and gives the careful test-start cue, excited but not rushing.",
"dialogue": [
{
"speaker": "Leo",
"line": "Let’s go!",
"line_zh_tw": "出發!",
"taught_phrase": true
},
{
"speaker": "Mia",
"line": "Careful test first.",
"line_zh_tw": "先小心測試。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam04_first_test_fail"
},
{
"beat_id": "s12_p04_no_way",
"story_order": 12,
"phrase_id": "p04",
"phrase": "No way!",
"zh_tw": "不會吧!",
"plot_function": "failed result reaction",
"visual_action": "The first test only makes a small safe puff of smoke; the light does not turn on. Leo reacts in disbelief.",
"dialogue": [
{
"speaker": "Leo",
"line": "No way!",
"line_zh_tw": "不會吧!",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "The light is still off.",
"line_zh_tw": "燈還沒亮。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam04_first_test_fail"
},
{
"beat_id": "s13_p05_try_again",
"story_order": 13,
"phrase_id": "p05",
"phrase": "Try again.",
"zh_tw": "再試一次。",
"plot_function": "retry encouragement",
"visual_action": "Mia finds one tiny loose gap behind the support ring and encourages Leo to try the fix again.",
"dialogue": [
{
"speaker": "Mia",
"line": "Try again.",
"line_zh_tw": "再試一次。",
"taught_phrase": true
},
{
"speaker": "Mia",
"line": "One small gap.",
"line_zh_tw": "還有一個小縫。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam05_retry_success"
},
{
"beat_id": "s14_p15_it_works",
"story_order": 14,
"phrase_id": "p15",
"phrase": "It works!",
"zh_tw": "成功了!",
"plot_function": "success confirmation",
"visual_action": "After the final tape fix, Mia presses the separate button and the rocket’s small round light turns warm yellow.",
"dialogue": [
{
"speaker": "Mia",
"line": "It works!",
"line_zh_tw": "成功了!",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "The light is on!",
"line_zh_tw": "燈亮了!",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam05_retry_success"
},
{
"beat_id": "s15_p10_high_five",
"story_order": 15,
"phrase_id": "p10",
"phrase": "High five!",
"zh_tw": "擊掌!",
"plot_function": "celebration",
"visual_action": "With the rocket safely lit on the display table, Mia and Leo celebrate with a clear high-five.",
"dialogue": [
{
"speaker": "Mia and Leo",
"line": "High five!",
"line_zh_tw": "擊掌!",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "We fixed it.",
"line_zh_tw": "我們修好了。",
"taught_phrase": false
},
{
"speaker": "Mia",
"line": "Together.",
"line_zh_tw": "一起完成的。",
"taught_phrase": false
}
],
"story_detail_level": "rhythm_ordered_with_support_dialogue",
"camera_segment_id": "cam06_final_celebration"
}
],
"full_story_zh_tw": "今天是教室手作角落的「小小發明展示日」。Mia 和 Leo 要把一艘銀色小火箭修好,讓它在展示時亮起溫暖的小燈。桌上有藍色膠帶、小螺絲起子、彎曲支撐環、星星貼紙,還有一個紅色按鈕盒。紅色按鈕盒不是火箭的一部分,而是單獨放在桌面右側,和火箭中間隔著清楚的安全距離。\n\nLeo 抱著零件盒快步走進來,眼睛只看著桌上的火箭,沒注意地上掉了一片小尾翼。Mia 立刻指向他的腳邊說:Watch out! Leo 停住,差一點踩到零件。他剛鬆一口氣,又急著把零件盒放上桌,想馬上開始裝火箭。Mia 看見他的手太快、零件都快散出來,放低聲音提醒:Slow down. Leo 點點頭,深呼吸,把零件一個一個排好。可是他一看到旁邊的紅色按鈕盒,又忍不住伸手想按。Mia 馬上把手掌放在他和按鈕之間,說:Hold on. 她指著還沒固定好的支撐環說:「這裡還鬆鬆的,現在按會不安全。」Leo 把手收回來,小聲說:「好,我先不按。」\n\nMia 一手扶著火箭,一手想拿桌子另一邊的藍色膠帶,身體有點卡住。Leo 發現她快扶不穩,立刻靠近問:Need help? Mia 點頭說:「Yes, please. Hold this side.」Leo 用兩隻手扶住火箭另一側。Mia 伸手指向 Leo 那邊的膠帶說:Pass it here. Leo 小心地把膠帶推過來,膠帶滾到桌邊時差點掉下去,他趕緊接住,穩穩放進 Mia 手裡,帶著一點自豪說:I got it. Mia 笑著說:「Nice catch.」\n\nMia 先示範怎麼貼一小段膠帶固定火箭底部。她貼好後,把小螺絲起子放到桌子中央。Leo 眼睛亮起來,伸手接過同一把工具說:My turn. 他這次沒有搶快,而是照著 Mia 的節奏慢慢轉。轉到一半,他發現如果先把支撐環對齊,再貼膠帶,火箭會更直。他把支撐環和膠帶排給 Mia 看。Mia 看懂後比了大拇指:Good idea. 兩人開始像小工程師一樣分工:Mia 貼膠帶,Leo 對齊支撐環。最後只剩一塊彎曲支撐片還沒放進缺口。Mia 看著那個清楚的空位說:Almost there. Leo 把最後一塊正好形狀的零件慢慢放進去。\n\n火箭終於站直。Mia 把散落工具推到安全區,確認紅色按鈕盒仍然和火箭分開。她的手指停在按鈕上方,沒有按下去,而是看向 Leo 問:Ready? Leo 檢查膠帶、支撐環、桌面空間,再認真點頭。Leo 看著火箭,興奮但小聲地說:Let’s go! Mia 輕輕按下紅色按鈕。火箭抖了一下,大家都以為小燈會亮,結果只有一小團安全黑煙冒出來,小燈還是暗的。Leo 眼睛瞪大,鼻尖沾到一點灰,忍不住說:No way! 他肩膀垂下來,以為自己又弄壞了。\n\nMia 沒有責怪他。她拿起剛剛剩下的一小段膠帶,指著支撐環後面一個不明顯的小縫說:Try again. 她補了一句:「不是失敗,是還少一個小地方。」Leo 重新扶好火箭,這次動作更慢。Mia 把最後一段膠帶貼上去,Leo 用手指輕輕壓平。兩人再次看著獨立的紅色按鈕盒,沒有急著搶按。Mia 按下按鈕後,火箭沒有亂飛,也沒有再冒煙;它穩穩留在軟墊上,身上的小圓燈從暗色慢慢亮成溫暖的黃色。Mia 指著亮起來的小燈,開心地說:It works! Leo 先是愣住,接著整張臉都亮了。他們把火箭放到展示牌前,確定小燈還穩穩亮著。最後,Mia 和 Leo 轉向彼此,清楚地擊掌:High five! Leo 小聲說:「我們真的修好了。」Mia 點點頭:「因為我們慢慢來,也一起做。」",
"highlight_phrases": [
{
"phrase": "Watch out!",
"zh_tw": "小心!",
"phrase_id": "p01",
"class": "phrase-color-1",
"story_order": 1
},
{
"phrase": "Slow down.",
"zh_tw": "慢一點。",
"phrase_id": "p11",
"class": "phrase-color-11",
"story_order": 2
},
{
"phrase": "Hold on.",
"zh_tw": "等一下。",
"phrase_id": "p02",
"class": "phrase-color-2",
"story_order": 3
},
{
"phrase": "Need help?",
"zh_tw": "需要幫忙嗎?",
"phrase_id": "p06",
"class": "phrase-color-6",
"story_order": 4
},
{
"phrase": "Pass it here.",
"zh_tw": "把它遞給我。",
"phrase_id": "p12",
"class": "phrase-color-12",
"story_order": 5
},
{
"phrase": "I got it.",
"zh_tw": "我拿到了。",
"phrase_id": "p13",
"class": "phrase-color-13",
"story_order": 6
},
{
"phrase": "My turn.",
"zh_tw": "換我了。",
"phrase_id": "p03",
"class": "phrase-color-3",
"story_order": 7
},
{
"phrase": "Good idea.",
"zh_tw": "好主意。",
"phrase_id": "p07",
"class": "phrase-color-7",
"story_order": 8
},
{
"phrase": "Almost there.",
"zh_tw": "快好了。",
"phrase_id": "p08",
"class": "phrase-color-8",
"story_order": 9
},
{
"phrase": "Ready?",
"zh_tw": "準備好了嗎?",
"phrase_id": "p14",
"class": "phrase-color-14",
"story_order": 10
},
{
"phrase": "Let’s go!",
"zh_tw": "出發!",
"phrase_id": "p09",
"class": "phrase-color-9",
"story_order": 11
},
{
"phrase": "No way!",
"zh_tw": "不會吧!",
"phrase_id": "p04",
"class": "phrase-color-4",
"story_order": 12
},
{
"phrase": "Try again.",
"zh_tw": "再試一次。",
"phrase_id": "p05",
"class": "phrase-color-5",
"story_order": 13
},
{
"phrase": "It works!",
"zh_tw": "成功了!",
"phrase_id": "p15",
"class": "phrase-color-15",
"story_order": 14
},
{
"phrase": "High five!",
"zh_tw": "擊掌!",
"phrase_id": "p10",
"class": "phrase-color-10",
"story_order": 15
}
],
"camera_segments": [
{
"id": "cam01_safety_before_work",
"label": "運鏡 1|展示日開場:先小心、慢下來、不要急著按",
"estimated_duration": "約 24–28s,3 支 4–15s 片段",
"phrase_ids": [
"p01",
"p11",
"p02"
],
"phrases": [
"Watch out!",
"Slow down.",
"Hold on."
],
"purpose": "建立展示日、手作桌與安全規則;Leo 因太興奮連續差點踩尾翼、零件快散、想按按鈕,Mia 依序提醒小心、慢下來、先別按。",
"camera_direction": "先用中廣角建立教室手作角落:銀色小火箭、藍色膠帶、小螺絲起子、彎曲支撐環、星星貼紙、獨立紅色按鈕盒。接著跟 Leo 快步進入,低角度看地上小尾翼危險;再切桌面看零件盒快散;最後同框紅色按鈕盒、鬆動支撐環與 Mia stop hand。",
"story_beat_coverage": [
{
"source_paragraph_index": 1,
"full_story_excerpt": "小小發明展示日;桌上有小火箭、藍色膠帶、小螺絲起子、彎曲支撐環、星星貼紙、獨立紅色按鈕盒。",
"coverage_requirement": "開場必須建立完整道具與紅色按鈕盒安全距離。"
},
{
"source_paragraph_index": 2,
"full_story_excerpt": "Leo 抱零件盒快步走進來差點踩到小尾翼;又急著放零件盒;又想按紅色按鈕;Mia 依序說 Watch out! / Slow down. / Hold on.",
"coverage_requirement": "必須演出三個具體安全因果,不可只做短句展示。"
}
],
"dialogue_flow": [
{
"speaker": "Mia",
"line": "Watch out!",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "差一點。",
"taught_phrase": false
},
{
"speaker": "Mia",
"line": "Slow down.",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "好,慢慢來。",
"taught_phrase": false
},
{
"speaker": "Mia",
"line": "Hold on.",
"taught_phrase": true
},
{
"speaker": "Mia",
"line": "這裡還鬆鬆的,現在按會不安全。",
"taught_phrase": false
},
{
"speaker": "Leo",
"line": "好,我先不按。",
"taught_phrase": false
}
],
"generation_clips": [
{
"id": "cam01_clip_a_show_day_setup",
"duration_target": "10s",
"main_action": "建立展示日手作桌:小火箭、藍色膠帶、小螺絲起子、彎曲支撐環、星星貼紙、獨立紅色按鈕盒全部清楚。",
"dialogue": [],
"taught_phrases": [],
"coverage_check": [
"所有主要道具可讀",
"紅色按鈕盒獨立且與火箭有距離",
"火箭未發光未測試"
],
"avoid": "不要按鈕連線/腳踏板/發射/煙/文字",
"status": "option_b_provider_prompt_ready_pending_user_review_or_i2v",
"start_key_image": "final_story/keyframes/cam01_full_story/cam01_k1_show_day_setup_start_v1_refs.png",
"start_key_image_prompt": "prompts/final_story_cam01_k1_show_day_setup_start_image_v1_refs.txt",
"start_key_image_qa": "qa/final_story/cam01_k1_show_day_setup_start_v1_refs_qa.md",
"end_key_image": "final_story/keyframes/cam01_full_story/cam01_k2_leo_fast_entry_tail_fin_hazard_v2_refs.png",
"end_key_image_prompt": "prompts/final_story_cam01_k2_leo_fast_entry_tail_fin_hazard_image_v1_refs.txt",
"end_key_image_qa": "qa/final_story/cam01_k2_leo_fast_entry_tail_fin_hazard_v2_refs_qa.md",
"continuity_fix_required": "Use K1 first frame and K2 final frame; prompt must show tail fin slipping from parts box, not appearing suddenly.",
"provider_prompt": "prompts/final_story_cam01_clip_a_show_day_setup_i2v_option_b_provider_prompt_v1.md",
"continuity_strategy": "option_b_no_mid_keyframe_k1_to_k2_prompted_tailfin_fall",
"source_video": "final_story/source_clips/cam01_clip_a_show_day_setup_option_b/cam01_clip_a_show_day_setup_option_b_10s_v1.mp4",
"contact_sheet": "final_story/source_clips/cam01_clip_a_show_day_setup_option_b/cam01_clip_a_show_day_setup_option_b_10s_v1_sheet.jpg",
"provider_video_url": "https://files.chatartpro.com/web-video/20260621/6a3810d34105c.mp4",
"provider_cost": "60 diamonds (balance 614 → 554)",
"qa_status": "ready_for_human_review_semantic_weak",
"qa_summary": "Candidate generated with Option B prompt. Visual style and characters are good, but contact sheet does not clearly prove tail fin slips from Leo parts box to floor; tail fin/hazard appears mostly on tabletop/near rocket, so not final-approved."
},
{
"id": "cam01_clip_b_watch_out_slow_down",
"duration_target": "10–12s",
"main_action": "Leo 抱零件盒快步進來只看火箭,差點踩到地上小尾翼;Mia 指腳邊說 Watch out;Leo 鬆口氣後又太快放零件盒,零件快散;Mia 說 Slow down;Leo 深呼吸並一個個排好。",
"dialogue": [
"Mia: Watch out!",
"Leo: 差一點。",
"Mia: Slow down.",
"Leo: 好,慢慢來。"
],
"taught_phrases": [
"Watch out!",
"Slow down."
],
"coverage_check": [
"地上小尾翼清楚",
"Leo 差點踩到但未踩壞",
"零件盒快散是 Slow down 的原因",
"Leo 有深呼吸/變慢"
],
"avoid": "不要改成桌上零件滑落;不要讓 Leo 摔倒;不要按按鈕",
"status": "start_key_image_pending_tailfin_source_continuity_fix",
"start_key_image": "final_story/keyframes/cam01_full_story/cam01_k2_leo_fast_entry_tail_fin_hazard_v2_refs.png",
"start_key_image_prompt": "prompts/final_story_cam01_k2_leo_fast_entry_tail_fin_hazard_image_v1_refs.txt",
"start_key_image_qa": "qa/final_story/cam01_k2_leo_fast_entry_tail_fin_hazard_v2_refs_qa.md"
},
{
"id": "cam01_clip_c_hold_on_button_safety",
"duration_target": "8–10s",
"main_action": "Leo 看見獨立紅色按鈕盒想伸手按;Mia 手掌擋在 Leo 和按鈕之間說 Hold on;她指向未固定的支撐環說現在按不安全;Leo 收手。",
"dialogue": [
"Mia: Hold on.",
"Mia: 這裡還鬆鬆的,現在按會不安全。",
"Leo: 好,我先不按。"
],
"taught_phrases": [
"Hold on."
],
"coverage_check": [
"Leo 手靠近按鈕但未按",
"Mia stop hand 擋在中間",
"支撐環鬆動可見",
"Leo 收回手"
],
"avoid": "不要按下按鈕;不要冒煙/發射;按鈕盒不可接火箭",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
}
],
"keyframe_chain": [
{
"id": "cam01_k1_show_day_setup_start",
"role": "K1 / cam01_clip_a_show_day_setup start",
"file": "final_story/keyframes/cam01_full_story/cam01_k1_show_day_setup_start_v1_refs.png",
"prompt": "prompts/final_story_cam01_k1_show_day_setup_start_image_v1_refs.txt",
"qa": "qa/final_story/cam01_k1_show_day_setup_start_v1_refs_qa.md",
"status": "qa_pass_but_needs_tailfin_source_continuity_plan",
"note": "K1 is usable as clean setup, but K1->K2 requires an intermediate/source frame showing tail fin falling from parts box; otherwise floor tail fin pops in."
},
{
"id": "cam01_k1_5_tail_fin_slipping_from_parts_box",
"role": "K1.5 / cam01_clip_a mid continuity source frame",
"file": null,
"prompt": null,
"qa": null,
"status": "not_used_user_chose_option_b",
"note": "Not generated. User chose option B: solve tail-fin continuity in I2V motion prompt using K1->K2 only."
},
{
"id": "cam01_k2_leo_fast_entry_tail_fin_hazard",
"role": "K2 / cam01_clip_a end + cam01_clip_b start",
"file": "final_story/keyframes/cam01_full_story/cam01_k2_leo_fast_entry_tail_fin_hazard_v2_refs.png",
"prompt": "prompts/final_story_cam01_k2_leo_fast_entry_tail_fin_hazard_image_v1_refs.txt",
"qa": "qa/final_story/cam01_k2_leo_fast_entry_tail_fin_hazard_v2_refs_qa.md",
"status": "usable_as_end_frame_for_option_b_pending_i2v_test",
"note": "Use as final frame for option B I2V. Must test whether tail fin visibly falls from parts box instead of popping in."
}
],
"keyframe_continuity_note": "User chose option B: no K1.5 generation. Use K1 as first frame and K2 as final frame, with I2V prompt explicitly showing the tail fin slipping/falling from Leo parts box to avoid pop-in."
},
{
"id": "cam02_help_and_handoff",
"label": "運鏡 2|合作扶火箭:幫忙、遞膠帶、接住",
"estimated_duration": "約 18–22s,2 支 4–15s 片段",
"phrase_ids": [
"p06",
"p12",
"p13"
],
"phrases": [
"Need help?",
"Pass it here.",
"I got it."
],
"purpose": "Mia 一手扶火箭拿不到膠帶;Leo 發現她快扶不穩,先幫忙扶火箭,再遞膠帶;膠帶差點滾下桌,Leo 接住並交給 Mia。",
"camera_direction": "桌面高度 two-shot。重點不是拿膠帶,而是 Mia 需要第二雙手扶火箭;Leo 先扶住火箭另一側,再完成藍色膠帶遞送與接住。",
"story_beat_coverage": [
{
"source_paragraph_index": 3,
"full_story_excerpt": "Mia 一手扶火箭一手想拿遠處藍色膠帶;Leo 問 Need help?;Leo 用兩手扶火箭另一側;Mia 說 Pass it here;膠帶差點滾下桌,Leo 接住說 I got it 並交給 Mia。",
"coverage_requirement": "必須保留扶火箭困境、Leo 幫扶、膠帶差點掉、接住後交到 Mia 手中。"
}
],
"dialogue_flow": [
{
"speaker": "Leo",
"line": "Need help?",
"taught_phrase": true
},
{
"speaker": "Mia",
"line": "Yes, please. Hold this side.",
"taught_phrase": false
},
{
"speaker": "Mia",
"line": "Pass it here.",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "I got it.",
"taught_phrase": true
},
{
"speaker": "Mia",
"line": "Nice catch.",
"taught_phrase": false
}
],
"generation_clips": [
{
"id": "cam02_clip_a_need_help_hold_side",
"duration_target": "9–11s",
"main_action": "Mia 一手扶尚未穩固的火箭,另一手伸向遠處藍色膠帶而卡住;Leo 看到她快扶不穩,問 Need help;Mia 請他 Hold this side;Leo 用兩手扶火箭另一側;Mia 指向 Leo 那邊膠帶說 Pass it here。",
"dialogue": [
"Leo: Need help?",
"Mia: Yes, please. Hold this side.",
"Mia: Pass it here."
],
"taught_phrases": [
"Need help?",
"Pass it here."
],
"coverage_check": [
"Mia 必須扶火箭所以拿不到膠帶",
"Leo 必須先扶火箭再拿膠帶",
"藍色膠帶在 Leo 那邊"
],
"avoid": "不要只演普通遞物;不要讓 Mia 已拿到膠帶;不要按按鈕",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
},
{
"id": "cam02_clip_b_tape_almost_falls_i_got_it",
"duration_target": "8–10s",
"main_action": "Leo 小心把藍色膠帶推向 Mia;膠帶滾到桌邊差點掉下去但未掉;Leo 接住,說 I got it,穩穩放進 Mia 手裡;Mia 說 Nice catch。",
"dialogue": [
"Leo: I got it.",
"Mia: Nice catch."
],
"taught_phrases": [
"I got it."
],
"coverage_check": [
"膠帶從 Leo 那邊移向 Mia",
"膠帶差點到桌邊但不掉地",
"Leo 接住後交到 Mia 手裡"
],
"avoid": "膠帶不可變形/消失/掉地;火箭不可倒下",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
}
]
},
{
"id": "cam03_careful_repair",
"label": "運鏡 3|慢慢輪流修:換我、好主意、快好了",
"estimated_duration": "約 24–30s,3 支 4–15s 片段",
"phrase_ids": [
"p03",
"p07",
"p08"
],
"phrases": [
"My turn.",
"Good idea.",
"Almost there."
],
"purpose": "Mia 示範修理,Leo 接同一把工具慢慢操作;Leo 發現支撐環先對齊會更直,Mia 認同;最後一塊彎曲支撐片放進缺口。",
"camera_direction": "手部操作與桌面工程感。先看 Mia 示範貼膠帶與小螺絲起子交接,再俯視支撐環/膠帶排列,最後推近到支撐環缺口與最後彎曲支撐片。",
"story_beat_coverage": [
{
"source_paragraph_index": 4,
"full_story_excerpt": "Mia 示範貼一小段膠帶固定底部;Leo 接過同一把工具說 My turn 並慢慢轉;Leo 發現先對齊支撐環再貼膠帶,Mia 說 Good idea;最後只剩一塊彎曲支撐片,Mia 說 Almost there,Leo 放進缺口。",
"coverage_requirement": "必須演出示範、同一工具交接、Leo 變慢、支撐環方案、分工、最後缺口。"
}
],
"dialogue_flow": [
{
"speaker": "Leo",
"line": "My turn.",
"taught_phrase": true
},
{
"speaker": "Mia",
"line": "慢慢轉。",
"taught_phrase": false
},
{
"speaker": "Leo",
"line": "先對齊支撐環,再貼膠帶。",
"taught_phrase": false
},
{
"speaker": "Mia",
"line": "Good idea.",
"taught_phrase": true
},
{
"speaker": "Mia",
"line": "Almost there.",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "剩最後一塊。",
"taught_phrase": false
}
],
"generation_clips": [
{
"id": "cam03_clip_a_my_turn_tool_handoff",
"duration_target": "8–10s",
"main_action": "Mia 示範貼一小段膠帶固定火箭底部,貼好後把小螺絲起子放到桌中央;Leo 接過同一把工具說 My turn,這次慢慢轉。",
"dialogue": [
"Leo: My turn.",
"Mia: 慢慢轉。"
],
"taught_phrases": [
"My turn."
],
"coverage_check": [
"Mia 必須先示範",
"同一把小螺絲起子交接",
"Leo 動作變慢"
],
"avoid": "不要讓 Leo 搶工具;不要省略示範;不要大型電鑽",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
},
{
"id": "cam03_clip_b_good_idea_support_ring",
"duration_target": "9–11s",
"main_action": "Leo 發現先把彎曲支撐環對齊再貼膠帶,火箭會更直;他把支撐環和膠帶排給 Mia 看;Mia 看懂比大拇指說 Good idea;兩人分工:Mia 貼膠帶,Leo 對齊支撐環。",
"dialogue": [
"Leo: 先對齊支撐環,再貼膠帶。",
"Mia: Good idea."
],
"taught_phrases": [
"Good idea."
],
"coverage_check": [
"支撐環與膠帶順序清楚",
"Good idea 有具體原因",
"Mia 貼膠帶、Leo 對齊支撐環"
],
"avoid": "不要改成星星貼紙點子;支撐環不可消失",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
},
{
"id": "cam03_clip_c_almost_there_last_piece",
"duration_target": "8–10s",
"main_action": "火箭接近站直,只剩支撐環上一個清楚缺口;最後一塊彎曲支撐片在桌上;Mia 說 Almost there;Leo 慢慢把形狀吻合的零件放進缺口。",
"dialogue": [
"Mia: Almost there.",
"Leo: 剩最後一塊。"
],
"taught_phrases": [
"Almost there."
],
"coverage_check": [
"最後缺口清楚",
"最後彎曲支撐片形狀吻合",
"Leo 慢慢放入",
"火箭未測試"
],
"avoid": "不要提前亮燈/慶祝;不要把零件換成星星貼紙",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
}
]
},
{
"id": "cam04_first_test_fail",
"label": "運鏡 4|第一次測試:準備好了、開始、結果沒亮",
"estimated_duration": "約 22–27s,3 支 4–15s 片段",
"phrase_ids": [
"p14",
"p09",
"p04"
],
"phrases": [
"Ready?",
"Let’s go!",
"No way!"
],
"purpose": "火箭站直後第一次正式測試:Mia 先整理安全區與確認按鈕盒分離;Ready 後 Leo 檢查;按下後只有安全黑煙,小燈沒亮,Leo 失落。",
"camera_direction": "穩定中景讓火箭與獨立紅色按鈕盒同框。先拍工具推到安全區、Mia 手指停在按鈕上方未按;再拍 Leo 檢查膠帶/支撐環/桌面空間;最後按鈕 close-up、火箭抖一下、小黑煙、小燈暗與 Leo 鼻尖灰/肩膀垂。",
"story_beat_coverage": [
{
"source_paragraph_index": 5,
"full_story_excerpt": "火箭站直;Mia 把工具推到安全區,確認紅色按鈕盒仍和火箭分開;Mia 問 Ready?;Leo 檢查後點頭;Leo 說 Let’s go!;Mia 按按鈕;火箭抖一下,只有安全黑煙,小燈暗;Leo 說 No way! 鼻尖沾灰、肩膀垂下。",
"coverage_requirement": "必須保留 Ready 前安全檢查、第一次失敗為小黑煙且燈未亮、Leo 失落。"
}
],
"dialogue_flow": [
{
"speaker": "Mia",
"line": "Ready?",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "準備好了。",
"taught_phrase": false
},
{
"speaker": "Leo",
"line": "Let’s go!",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "No way!",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "小燈還是暗的。",
"taught_phrase": false
}
],
"generation_clips": [
{
"id": "cam04_clip_a_ready_safety_check",
"duration_target": "8–10s",
"main_action": "火箭終於站直;Mia 把散落工具推到安全區,確認紅色按鈕盒仍獨立在桌面右側、和火箭分開;她手指停在按鈕上方未按,問 Ready;Leo 檢查膠帶、支撐環、桌面空間後點頭。",
"dialogue": [
"Mia: Ready?",
"Leo: 準備好了。"
],
"taught_phrases": [
"Ready?"
],
"coverage_check": [
"工具推到安全區",
"按鈕盒分離",
"Mia 未按先問",
"Leo 實際檢查"
],
"avoid": "不要跳過安全檢查;不要提前按或亮燈",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
},
{
"id": "cam04_clip_b_lets_go_careful_start",
"duration_target": "5–7s",
"main_action": "Leo 看著站直火箭,興奮但小聲、不魯莽地說 Let’s go;Mia 手仍在按鈕附近,測試即將開始。",
"dialogue": [
"Leo: Let’s go!"
],
"taught_phrases": [
"Let’s go!"
],
"coverage_check": [
"Leo 興奮但不搶快",
"Mia 準備輕按",
"火箭與按鈕盒仍分離"
],
"avoid": "不要大喊衝動;不要讓 Leo 搶按;不要提前冒煙",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
},
{
"id": "cam04_clip_c_no_way_light_off",
"duration_target": "9–11s",
"main_action": "Mia 輕輕按下獨立紅色按鈕;火箭只抖一下,大家期待小燈亮,但只有一小團安全黑煙,小圓燈仍暗;Leo 鼻尖沾一點灰、眼睛瞪大說 No way,肩膀垂下。",
"dialogue": [
"Leo: No way!",
"Leo: 小燈還是暗的。"
],
"taught_phrases": [
"No way!"
],
"coverage_check": [
"獨立按鈕被按",
"火箭只抖不飛",
"小黑煙安全",
"小燈仍暗",
"Leo 鼻尖灰/失落"
],
"avoid": "不要大爆炸/泡泡;不要讓小燈亮;不要火箭散架",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
}
]
},
{
"id": "cam05_retry_success",
"label": "運鏡 5|再試一次:找到小縫、慢慢修、成功亮燈",
"estimated_duration": "約 24–30s,3 支 4–15s 片段",
"phrase_ids": [
"p05",
"p15"
],
"phrases": [
"Try again.",
"It works!"
],
"purpose": "Mia 不責怪 Leo,而是找到支撐環後方小縫;兩人慢慢補最後膠帶,再次按鈕後火箭穩在軟墊上,小圓燈由暗轉暖黃。",
"camera_direction": "由情緒低點轉向成功。先看 Leo 失落與 Mia 溫和鼓勵;再用手部 close-up 看 Leo 扶火箭、Mia 貼最後膠帶、Leo 壓平;最後同框獨立按鈕盒與火箭,按下後無煙穩定亮燈。",
"story_beat_coverage": [
{
"source_paragraph_index": 6,
"full_story_excerpt": "Mia 沒有責怪 Leo,拿剩下小段膠帶指支撐環後方小縫說 Try again,補一句不是失敗是少一個小地方;Leo 更慢扶好火箭,Mia 貼最後膠帶,Leo 壓平;再次看按鈕盒沒有搶按;Mia 按下後火箭不亂飛不冒煙,穩在軟墊上,小圓燈由暗轉暖黃;Mia 說 It works,Leo 臉亮起來。",
"coverage_requirement": "必須保留不責怪、具體小縫、慢慢修補、安全亮燈成功。"
}
],
"dialogue_flow": [
{
"speaker": "Mia",
"line": "Try again.",
"taught_phrase": true
},
{
"speaker": "Mia",
"line": "不是失敗,是還少一個小地方。",
"taught_phrase": false
},
{
"speaker": "Mia",
"line": "It works!",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "燈亮了!",
"taught_phrase": false
}
],
"generation_clips": [
{
"id": "cam05_clip_a_try_again_find_gap",
"duration_target": "8–10s",
"main_action": "Leo 失落肩膀垂下;Mia 沒責怪,拿起剩下小段藍色膠帶,指支撐環後方不明顯小縫說 Try again;她說不是失敗,是還少一個小地方。",
"dialogue": [
"Mia: Try again.",
"Mia: 不是失敗,是還少一個小地方。"
],
"taught_phrases": [
"Try again."
],
"coverage_check": [
"Mia 溫和不責怪",
"剩下小段膠帶清楚",
"支撐環後方小縫可見",
"Try again 是鼓勵修正"
],
"avoid": "不要讓 Mia 生氣;不要大破洞;不要從頭重做",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
},
{
"id": "cam05_clip_b_final_tape_slow_fix",
"duration_target": "8–10s",
"main_action": "Leo 重新扶好火箭,這次動作更慢;Mia 把最後一段膠帶貼在小縫處,Leo 用手指輕輕壓平;兩人看向獨立紅色按鈕盒但沒有急著搶按。",
"dialogue": [
"可無台詞或 Mia: 慢慢來。"
],
"taught_phrases": [],
"coverage_check": [
"Leo 動作更慢",
"Mia 貼最後膠帶",
"Leo 壓平膠帶",
"兩人不搶按",
"軟墊可見"
],
"avoid": "不要讓 Leo 搶按;不要提前亮燈;不要省略壓平",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
},
{
"id": "cam05_clip_c_it_works_warm_light",
"duration_target": "10–12s",
"main_action": "Mia 再次按下獨立紅色按鈕盒;火箭沒有亂飛、沒有再冒煙,穩穩留在軟墊上;小圓燈從暗色慢慢亮成溫暖黃色;Mia 指著燈說 It works;Leo 先愣住,接著整張臉亮起來。",
"dialogue": [
"Mia: It works!",
"Leo: 燈亮了!"
],
"taught_phrases": [
"It works!"
],
"coverage_check": [
"火箭穩在軟墊上",
"無煙無飛行",
"小圓燈由暗轉暖黃",
"Mia 指著燈後說 It works",
"Leo 由愣住到開心"
],
"avoid": "不要發射/爆炸/彩帶;不要再冒煙;不要在燈亮前說成功",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
}
]
},
{
"id": "cam06_final_celebration",
"label": "運鏡 6|展示牌前收尾:亮燈展示與清楚擊掌",
"estimated_duration": "約 10–14s,1 支 4–15s 片段",
"phrase_ids": [
"p10"
],
"phrases": [
"High five!"
],
"purpose": "火箭放到展示牌前,小燈仍穩穩亮著;Mia 和 Leo 確認真的修好了,清楚擊掌,收束主題:慢慢來、一起做。",
"camera_direction": "先 close-up 亮著暖黃小燈的銀色火箭在展示牌前,再慢慢 pull back 到 Mia 和 Leo 分站兩側。兩人轉向彼此,手掌在畫面中央清楚 high-five;背景火箭小燈持續亮。",
"story_beat_coverage": [
{
"source_paragraph_index": 6,
"full_story_excerpt": "他們把火箭放到展示牌前,確定小燈還穩穩亮著;Mia 和 Leo 轉向彼此清楚擊掌:High five! Leo 說我們真的修好了;Mia 說因為我們慢慢來,也一起做。",
"coverage_requirement": "必須保留展示牌、穩定亮燈、清楚擊掌、合作與慢慢來的收尾主題。"
}
],
"dialogue_flow": [
{
"speaker": "Mia and Leo",
"line": "High five!",
"taught_phrase": true
},
{
"speaker": "Leo",
"line": "我們真的修好了。",
"taught_phrase": false
},
{
"speaker": "Mia",
"line": "因為我們慢慢來,也一起做。",
"taught_phrase": false
}
],
"generation_clips": [
{
"id": "cam06_clip_a_display_high_five",
"duration_target": "10–14s",
"main_action": "Mia 和 Leo 把修好的銀色小火箭放到展示牌前,確認小圓燈仍穩穩暖黃發光;鏡頭從亮燈火箭拉到兩人同框;兩人轉向彼此清楚擊掌說 High five;Leo 說我們真的修好了,Mia 回因為我們慢慢來,也一起做。",
"dialogue": [
"Mia and Leo: High five!",
"Leo: 我們真的修好了。",
"Mia: 因為我們慢慢來,也一起做。"
],
"taught_phrases": [
"High five!"
],
"coverage_check": [
"展示牌前的亮燈火箭",
"小圓燈持續暖黃",
"手掌清楚接觸",
"收尾台詞回扣慢慢來和合作"
],
"avoid": "不要火箭飛走;不要新增群眾/老師;不要煙火舞台;不要燈熄",
"status": "planned_from_full_story_pending_keyframes_and_provider_prompt"
}
]
}
],
"logline_zh_tw": "Mia 先提醒 Leo 小心、慢一點、先停住;兩人合作修理、第一次測試失敗後再試一次,最後讓小火箭安全亮燈。",
"production_notes": [
"This version should not feel like a phrase list; support dialogue and prop details explain why each phrase is spoken.",
"Keep support lines simple and fewer than taught phrase moments; final production can shorten or omit support lines if timing is tight.",
"The red button remains a separate button box beside the rocket, with a visible gap."
],
"story_order_note": "Final story order follows narrative rhythm, not production phrase order p01-p15.",
"camera_rewrite_source": "final_story.full_story_zh_tw is the source of truth; previous phrase-only camera summaries are obsolete.",
"camera_rewrite_status": "rewritten_by_story_editor_pending_user_review"
}