Interior Reels
將原始室內專案片段轉換為可直接上傳的 9:16 Reels。腳本只是工具。編輯決策(選擇哪個鏡頭、哪個部分、什麼順序)是 Claude 的任務,且必須基於查看每個片段的圖像,而非猜測檔名。
SKILL = 此技能的資料夾。所有腳本:python3 SKILL/scripts/<名稱>.py。
開始之前(每個會話一次)
執行 bash SKILL/setup.sh。如果有任何失敗,請先解決。閱讀 SKILL/brand.json 以了解工作室名稱、CTA、Logo、預設 Pattern 和客戶偏好。
絕對規則(不得違反)
- 文字和 Logo 不是助理的任務。 文字和 Logo 由客戶在 GUI 中設定,並儲存在
<folder>/_edit/overlay.json中。render.py會讀取此檔案並覆蓋 plan 中的所有text和logo。請勿在plan.json中寫入text或logo,請勿詢問客戶文字內容,也請勿自行在overlay.json中新增文字(包括來自brand.json的 CTA),除非客戶要求。 - Pattern 僅控制剪輯和視覺效果。 從 Pattern 取得的是:片段順序、時長、動態、轉場和色調。Pattern 中的
text、contoh_isi和logo僅為參考影片的註記,不會被渲染。 - 透過聊天更改文字或 Logo = 編輯
overlay.json。 如果客戶要求更改文字內容、字型、位置、出現時間、大小、顏色或 Logo,請編輯<folder>/_edit/overlay.json(格式請參閱PLAN.md的overlay.json部分),然後重新渲染。GUI 會在您回覆後重新載入此檔案。字型僅限來自SKILL/fonts/。字型清單、類別、特徵和用途位於fonts/fonts.json;請根據客戶要求的氛圍從中選擇。每行不同的字型或大小(例如「第二行使用 Great Vibes」)透過teks[].per_baris設定。Logo 僅有黑色(brand/logo.png)或白色(brand/logo-putih.png)。工作室資料(名稱、網站keziakarin.com、Instagram@keziakarin.studio)仍來自brand.json。 - 音訊也來自
overlay.json(audio)。 請勿自行選擇或更換音樂,也請勿在 plan 中寫入musik。如果客戶透過聊天要求(更換歌曲、音量、開始點、最終版有/無音樂、節奏同步),請編輯overlay.json中的audio(格式請參閱PLAN.md)。音樂僅能來自 Pattern 指南音訊(patterns/audio/)或工作室庫(brand/musik/)。如果客戶想在最終版中使用他人的參考音訊,請提醒他們該音訊屬於他人。 - 如果
overlay.json尚不存在,渲染仍會執行,但不會包含 Pattern 中的文字和 Logo。請告知客戶,可以在 GUI 的「詳細資料」部分填入文字和 Logo。 - 未經要求,請勿刪除或取代
overlay.json。 此檔案是客戶的選擇。 - 晃動會自動處理。
render.py會測量每個片段的晃動程度並自行穩定("stabil": "auto",預設值)。除非有特殊原因,否則請勿填入stabil:true強制穩定,false關閉穩定(例如刻意的手持動態)。請閱讀渲染日誌中的「穩定」表格:! sisa goyang terlihat= 檢查結果;! GAGAL= 渲染停止,請為該片段選擇其他範圍或片段。在審查時,對於明顯晃動或失焦的部分,仍請在_review/*.json中填入goyang:該範圍不會在渲染調整mulai時被使用。 - 選擇值得使用的部分,不要使用片段的所有秒數。 渲染時,
render.py會自動分析片段(_kualitas/)並標記過暗、空白(無物體)或模糊的部分。包含超過 0.3 秒不良部分的片段將被拒絕,並提供mulai建議。必須:將mulai移至建議位置,或減少durasi,或更換片段。未經使用者許可,不得使用--abaikan-kualitas。 - 時長跟隨素材,而非 Pattern。 如果片段的可用優質範圍比 Pattern 的片段短,則縮短該片段。總 Reels 時長可以比 Pattern 的
durasi_total短。請勿用不良部分填充片段。 - 在最終確定前查看影格。 分析提供的建議必須透過查看該範圍內的影格(網格或預覽)來確認。分析無法判斷主體是否好看,或該部分是否為合適的開場。
- 先審查所有素材片段。 執行
scripts/review_bahan.py <folder-bahan>,查看_review/中的每張圖片直到結束,然後填寫每個片段的 JSON(sudah_dilihat、goyang、rentang_layak、keputusan)。如果片段尚未被審查或片段位於rentang_layak之外,render.py將拒絕渲染(除非使用--abaikan-kualitas)。 - 渲染後檢查文字。 文字位置由客戶選擇(3x3 網格)。渲染後,查看
*_teks<N>_cek.jpg(紅色框 = 預估文字區域)。如果文字遮擋了臉部或主要物體,請告知客戶並建議其他位置。未經同意,請勿自行更改位置。 - 客戶選擇的片段來自
<folder>/_edit/klip.json。 在製作 plan 之前先讀取此檔案(格式請參閱PLAN.md的klip.json部分)。pembuka= 第一個片段的片段,penutup= 最後一個片段的片段,jangan= 不得在任何片段中使用。客戶的選擇優先於 Pattern 的jenis_shot;如果所選片段的鏡頭類型與 Pattern 的插槽不同,請告知客戶。在所選片段中,最佳秒數仍由助理選擇。render.py會拒絕違反此檔案的 plan(無法透過--abaikan-kualitas跳過)。請勿更改或刪除klip.json;此檔案由 GUI 寫入。
流程:將片段編輯成 Reels
- 收集資訊。 必要資訊:片段資料夾。可選資訊:Pattern 和音訊檔案(旁白/配音,mp3/m4a/wav)。文字和 Logo 已在
_edit/overlay.json中,請勿詢問。僅詢問真正缺失的資訊,最多 1 個問題。如果有音訊檔案,請在 plan 中填入suara(請參閱PLAN.md)。此技能不錄製音訊:使用者必須自行提供音訊檔案。 比較資料夾中的片段數量與 Pattern 的min_klip。如果數量不足,請告知客戶,並建議使用min_klip較小的 Pattern 或增加片段。如果客戶同意,仍可繼續進行。 - 掃描。 執行
scan_clips.py <folder>以在<folder>/_scan/中建立掃描結果。 - 使用檢視工具查看
_scan/<klip>.jpg的每個網格。對於每個片段,在表格中記錄:鏡頭類型(wide / medium / detail / walk-through / pan)、房間、品質(晃動、過暗、過亮、有人或雜亂物品)、最佳秒數(manifest.json中的detik_frame將網格方塊對應到秒數)以及攝影機移動方向。在檢視所有網格之前,請勿繼續。 - 從
SKILL/patterns/*.json中選擇 Pattern,根據要求或預設值。如果是自動選擇,請選擇cocok_untuk與片段數量和內容最匹配的 Pattern。 閱讀所選 Pattern 的catatan_training(如果有的話),並在填入插槽時應用其教訓。 - 填入插槽。 對於
alur中的每個插槽,選擇一個鏡頭類型與jenis_shot匹配的片段和mulai秒數,並遵循以下的故事規則。從 Pattern 複製durasi、gerak、transisi_masuk、efek_masuk、efek_keluar、redup和色調。同時將bingkai和akhir複製到 plan,將logo_slot更改為logo_segmen(該插槽的片段索引),並填入pembuka_segmen,其值為 Pattern 第一個文字插槽的片段索引(teks[0].slot),以便 GUI 的開場文字顯示在該插槽中。如果 Pattern 有teks[0].durasi,也請將pembuka_durasi_teks(數字值,秒)寫入 plan — 這可確保開場文字顯示足夠長的時間以便閱讀。如果 Pattern 有teks[0].sampai_slot,也請將pembuka_teks寫入 plan:從teks[0]複製mulai、animasi、fade、keluar,並將sampai_segmen設為插槽sampai_slot的片段索引。請勿複製文字和 Logo。根據SKILL/PLAN.md將<folder>/_edit/plan.json寫入,並使用絕對路徑。- 帶有
bingkai信箱效果的 Pattern: 優先使用橫向片段。直向片段將被裁剪成 16:9 的帶狀;如果必須使用,請告知客戶。 - 允許重複使用片段,當片段數量少於插槽數量時:同一片段中
mulai範圍之間的距離至少為 1 秒,且不得在兩個連續的片段中使用。如果違反此規則,渲染時會發出警告。 - 如果 Pattern 有
belum_didukung,請在渲染前將該效果告知客戶。 - 來自 GUI 的編輯模式(在「開始編輯」訊息中提到):
ikuti referensi(預設):嚴格複製 Pattern 流程,請勿刪除、交換或合併插槽。覆蓋文字已根據 Pattern 插槽分配了鏡頭編號(kapan),Logo 使用logo_segmen,因此片段順序必須與alur相同。如果片段不足,請重複使用片段(上述規則),請勿刪除插槽。custom:Pattern 僅作為風格起點(色調、轉場、效果、邊框)。時長和片段數量可根據素材調整。在 plan 中寫入"mode": "custom",以便參考音訊與節拍同步。
- 帶有
- 預覽。 執行
render.py <plan> --preview,然後查看*_preview_cek.jpg。檢查:順序是否合理、是否有不良鏡頭、來自 overlay 的文字是否可讀且未遮擋主要物體、是否有異常的凍結影格。必要時修正 plan 並重複。 - 最終版。 執行
render.py <plan>,再次查看*_cek.jpg,然後用 1-2 句話報告影片路徑以及鏡頭順序摘要。
室內故事規則
- 前 3 秒決定人們是否會停止滑動。 開場必須是最強的鏡頭:明亮、平穩、完整展示空間。
- 遵循平面圖。 空間順序應從入口到公共區域(客廳、餐廳、廚房),然後到私人區域(臥室、浴室)。請勿在房間之間來回跳躍。
- 交錯規模。 廣角,然後特寫,然後廣角。來自不同房間的兩個連續廣角最好用轉場連接,而不是直接切換。
- 連接移動方向。 向左平移的鏡頭應連接向左移動的鏡頭或
slideleft/smoothleft轉場。避免在一個連接點出現相反的移動方向。 - 選取穩定的部分。 選擇移動過程中的中間秒數,而不是攝影機開始或停止的時刻。跳過晃動、模糊或有人出現的部分。
- 結尾 使用最美麗且具有足夠空白區域來放置 CTA 和 Logo 的鏡頭。
- 文字:由客戶透過
overlay.json設定。如果被要求提供建議,建議每個文字最多 6 個詞。 - 片段少於插槽:先刪除
detail插槽。片段過多:僅使用最好的,不需要使用所有片段。 - 橫向片段:如果構圖很重要,請使用
"isi": "blur"。如果主要物體在中央,crop就足夠了。
流程:結果後的修訂
當客戶訊息結尾為 [mode revisi: ...] 時適用(GUI 在 _edit/plan.json 已存在時添加此標記)。目標:在進行任何更改之前理解修訂意圖,因為重新渲染需要很長時間。客戶只會點擊按鈕,因此所有問題都必須透過 pertanyaan 區塊發送,而不是自由文字。
- 新的修訂訊息(非回覆,非「執行」):
- 閱讀
plan.json並查看最後結果的*_cek.jpg。請勿更改任何檔案。 - 發送一輪:最多 4 個問題。內容應包括意圖問題(哪個鏡頭、多少、什麼風格)以及最多 2 個來自結果的發現(例如鏡頭過暗、文字遮擋物體),每個發現附帶選項,例如「修正」/「保持」)。
- 每個問題應有 2-4 個簡短選項(≤ 6 個詞),其中恰好一個選項的
"disarankan": true。"multi": true僅用於允許選擇多個選項的情況(例如要更換哪些鏡頭)。請勿添加「其他」選項;GUI 已提供。 - 寫最多 1 句引言,然後是區塊,然後停止並等待。
- 閱讀
- 以
Jawaban:開頭的訊息 = 對一輪問題的回覆。如果仍有不明確之處且這是第一輪,請發送第二輪(規則相同)。之後(或如果已經清楚),請發送ringkasan區塊:即將進行的更改清單,每個更改一行。停止並等待。 Langsung kerjakan: ...= 對所有最近的問題使用disarankan選項,然後在沒有摘要的情況下執行。Kerjakan sesuai ringkasan.= 嚴格按照最後摘要的內容執行(編輯 plan/overlay、預覽、最終版),然後像往常一樣報告。- 卡片開啟時的自由文字訊息 = 自由回覆。將其視為
Jawaban:。 - 每次修訂最多 2 輪問題。已經非常明確的要求(例如「將字型改為 Great Vibes」)仍需通過 1 輪簡短溝通(足夠的發現,或 1 個確認問題),然後是摘要。
- 訊息「klip pilihan berubah」(客戶更改開場、結尾或不使用片段後由 GUI 發送)= 常規修訂:閱讀最新的
_edit/klip.json並透過上述步驟 1-4 將其應用於 plan(絕對規則 13)。
區塊格式(有效的 JSON,每次回覆一個區塊):
```pertanyaan
{"jenis": "tanya", "pertanyaan": [
{"id": "q1", "judul": "想更換哪個鏡頭?", "multi": true,
"opsi": [{"label": "鏡頭 2(廚房)", "disarankan": true}, {"label": "鏡頭 4(臥室)"}]},
{"id": "q2", "judul": "發現:鏡頭 3 有點暗", "multi": false,
"opsi": [{"label": "修正", "disarankan": true}, {"label": "保持"}]}
]}
```
```pertanyaan
{"jenis": "ringkasan", "ringkasan": ["鏡頭 2 替換為廚房片段第 4 秒", "鏡頭 3 調亮"]}
```
流程:風格訓練
當訊息結尾為 [mode training: ...] 時適用(從 GUI 的風格訓練標籤頁發送)。目標:根據其參考影片重新測試現有 Pattern,報告不匹配之處,並在客戶同意下修正 Pattern。所有問題都必須透過 pertanyaan 區塊發送(格式請參閱「流程:結果後的修訂」)。
- 來自 GUI 訊息的輸入: Pattern 名稱、模式(
ikuti referensi/custom)和片段資料夾。 - 素材。 閱讀
SKILL/patterns/<pattern>.json,包括catatan_training。參考影片 =skill/contoh-video/<video_contoh>(技能資料夾旁邊的contoh-video資料夾)。參考表:使用已存在的SKILL/_ref/<name>/(搜尋 Pattern 名稱或video_contoh檔案名稱(不含副檔名);查看filmstrip.jpg/shots.jpg)。如果不存在,請執行analyze_ref.py <video contoh> --name <pattern> --out <folder>/_training/<pattern>/ref。 - 工作資料夾 =
<folder>/_training/<pattern>/。 請勿觸碰<folder>/中的其他任何內容。複製必要的腳本(scripts/中)到<folder>/_training/<pattern>/scripts/,並複製SKILL/PLAN.md到<folder>/_training/<pattern>/PLAN.md。 - 測試。 (...)(原文已截斷)