Communitygithub.com

interior-reels

將原始室內設計、建築或房地產影片剪輯,編輯成適用於 Instagram Reels / TikTok 的 9:16 格式,包含轉場和文字,或將範例 Reels 轉換為可重複使用的編輯模式。

interior-reels 是什麼?

此技能專門用於將原始室內設計專案的影片素材,製作成適用於社群媒體的 9:16 直式 Reels 影片。它會自動分析素材品質,並根據內容選擇最佳片段,而非依賴檔案名稱。技能遵循嚴格的編輯規則,例如僅從 `overlay.json` 檔案讀取文字和 Logo(而非從 Pattern 複製),並確保音訊選擇也來自此檔案,避免助理自行決定。它支援多個平台,包括 Claude Code、Cursor 和 Codex。此技能提供完整的編輯工作流程,從素材審查、Pattern 選擇、自動渲染到最終輸出,並內建嚴謹的品質控制機制,例如禁止使用品質不佳的片段。它還包含一個訓練模式,用於根據參考影片測試和改進 Pattern。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/alfianwilfredo/edit-skill/tree/main/skill/interior-reels

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Interior Reels

將原始室內專案片段轉換為可直接上傳的 9:16 Reels。腳本只是工具。編輯決策(選擇哪個鏡頭、哪個部分、什麼順序)是 Claude 的任務,且必須基於查看每個片段的圖像,而非猜測檔名。

SKILL = 此技能的資料夾。所有腳本:python3 SKILL/scripts/<名稱>.py。

開始之前(每個會話一次)

執行 bash SKILL/setup.sh。如果有任何失敗,請先解決。閱讀 SKILL/brand.json 以了解工作室名稱、CTA、Logo、預設 Pattern 和客戶偏好。

絕對規則(不得違反)

  1. 文字和 Logo 不是助理的任務。 文字和 Logo 由客戶在 GUI 中設定,並儲存在 <folder>/_edit/overlay.json 中。render.py 會讀取此檔案並覆蓋 plan 中的所有 text 和 logo。請勿在 plan.json 中寫入 text 或 logo,請勿詢問客戶文字內容,也請勿自行在 overlay.json 中新增文字(包括來自 brand.json 的 CTA),除非客戶要求。
  2. Pattern 僅控制剪輯和視覺效果。 從 Pattern 取得的是:片段順序、時長、動態、轉場和色調。Pattern 中的 text、contoh_isi 和 logo 僅為參考影片的註記,不會被渲染。
  3. 透過聊天更改文字或 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。
  4. 音訊也來自 overlay.json(audio)。 請勿自行選擇或更換音樂,也請勿在 plan 中寫入 musik。如果客戶透過聊天要求(更換歌曲、音量、開始點、最終版有/無音樂、節奏同步),請編輯 overlay.json 中的 audio(格式請參閱 PLAN.md)。音樂僅能來自 Pattern 指南音訊(patterns/audio/)或工作室庫(brand/musik/)。如果客戶想在最終版中使用他人的參考音訊,請提醒他們該音訊屬於他人。
  5. 如果 overlay.json 尚不存在,渲染仍會執行,但不會包含 Pattern 中的文字和 Logo。請告知客戶,可以在 GUI 的「詳細資料」部分填入文字和 Logo。
  6. 未經要求,請勿刪除或取代 overlay.json。 此檔案是客戶的選擇。
  7. 晃動會自動處理。 render.py 會測量每個片段的晃動程度並自行穩定("stabil": "auto",預設值)。除非有特殊原因,否則請勿填入 stabil:true 強制穩定,false 關閉穩定(例如刻意的手持動態)。請閱讀渲染日誌中的「穩定」表格:! sisa goyang terlihat = 檢查結果;! GAGAL = 渲染停止,請為該片段選擇其他範圍或片段。在審查時,對於明顯晃動或失焦的部分,仍請在 _review/*.json 中填入 goyang:該範圍不會在渲染調整 mulai 時被使用。
  8. 選擇值得使用的部分,不要使用片段的所有秒數。 渲染時,render.py 會自動分析片段(_kualitas/)並標記過暗、空白(無物體)或模糊的部分。包含超過 0.3 秒不良部分的片段將被拒絕,並提供 mulai 建議。必須:將 mulai 移至建議位置,或減少 durasi,或更換片段。未經使用者許可,不得使用 --abaikan-kualitas。
  9. 時長跟隨素材,而非 Pattern。 如果片段的可用優質範圍比 Pattern 的片段短,則縮短該片段。總 Reels 時長可以比 Pattern 的 durasi_total 短。請勿用不良部分填充片段。
  10. 在最終確定前查看影格。 分析提供的建議必須透過查看該範圍內的影格(網格或預覽)來確認。分析無法判斷主體是否好看,或該部分是否為合適的開場。
  11. 先審查所有素材片段。 執行 scripts/review_bahan.py <folder-bahan>,查看 _review/ 中的每張圖片直到結束,然後填寫每個片段的 JSON(sudah_dilihat、goyang、rentang_layak、keputusan)。如果片段尚未被審查或片段位於 rentang_layak 之外,render.py 將拒絕渲染(除非使用 --abaikan-kualitas)。
  12. 渲染後檢查文字。 文字位置由客戶選擇(3x3 網格)。渲染後,查看 *_teks<N>_cek.jpg(紅色框 = 預估文字區域)。如果文字遮擋了臉部或主要物體,請告知客戶並建議其他位置。未經同意,請勿自行更改位置。
  13. 客戶選擇的片段來自 <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

  1. 收集資訊。 必要資訊:片段資料夾。可選資訊:Pattern 和音訊檔案(旁白/配音,mp3/m4a/wav)。文字和 Logo 已在 _edit/overlay.json 中,請勿詢問。僅詢問真正缺失的資訊,最多 1 個問題。如果有音訊檔案,請在 plan 中填入 suara(請參閱 PLAN.md)。此技能不錄製音訊:使用者必須自行提供音訊檔案。 比較資料夾中的片段數量與 Pattern 的 min_klip。如果數量不足,請告知客戶,並建議使用 min_klip 較小的 Pattern 或增加片段。如果客戶同意,仍可繼續進行。
  2. 掃描。 執行 scan_clips.py <folder> 以在 <folder>/_scan/ 中建立掃描結果。
  3. 使用檢視工具查看 _scan/<klip>.jpg 的每個網格。對於每個片段,在表格中記錄:鏡頭類型(wide / medium / detail / walk-through / pan)、房間、品質(晃動、過暗、過亮、有人或雜亂物品)、最佳秒數(manifest.json 中的 detik_frame 將網格方塊對應到秒數)以及攝影機移動方向。在檢視所有網格之前,請勿繼續。
  4. 從 SKILL/patterns/*.json 中選擇 Pattern,根據要求或預設值。如果是自動選擇,請選擇 cocok_untuk 與片段數量和內容最匹配的 Pattern。 閱讀所選 Pattern 的 catatan_training(如果有的話),並在填入插槽時應用其教訓。
  5. 填入插槽。 對於 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",以便參考音訊與節拍同步。
  6. 預覽。 執行 render.py <plan> --preview,然後查看 *_preview_cek.jpg。檢查:順序是否合理、是否有不良鏡頭、來自 overlay 的文字是否可讀且未遮擋主要物體、是否有異常的凍結影格。必要時修正 plan 並重複。
  7. 最終版。 執行 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 區塊發送,而不是自由文字。

  1. 新的修訂訊息(非回覆,非「執行」):
    • 閱讀 plan.json 並查看最後結果的 *_cek.jpg。請勿更改任何檔案。
    • 發送一輪:最多 4 個問題。內容應包括意圖問題(哪個鏡頭、多少、什麼風格)以及最多 2 個來自結果的發現(例如鏡頭過暗、文字遮擋物體),每個發現附帶選項,例如「修正」/「保持」)。
    • 每個問題應有 2-4 個簡短選項(≤ 6 個詞),其中恰好一個選項的 "disarankan": true。"multi": true 僅用於允許選擇多個選項的情況(例如要更換哪些鏡頭)。請勿添加「其他」選項;GUI 已提供。
    • 寫最多 1 句引言,然後是區塊,然後停止並等待。
  2. 以 Jawaban: 開頭的訊息 = 對一輪問題的回覆。如果仍有不明確之處且這是第一輪,請發送第二輪(規則相同)。之後(或如果已經清楚),請發送 ringkasan 區塊:即將進行的更改清單,每個更改一行。停止並等待。
  3. Langsung kerjakan: ... = 對所有最近的問題使用 disarankan 選項,然後在沒有摘要的情況下執行。
  4. Kerjakan sesuai ringkasan. = 嚴格按照最後摘要的內容執行(編輯 plan/overlay、預覽、最終版),然後像往常一樣報告。
  5. 卡片開啟時的自由文字訊息 = 自由回覆。將其視為 Jawaban:。
  6. 每次修訂最多 2 輪問題。已經非常明確的要求(例如「將字型改為 Great Vibes」)仍需通過 1 輪簡短溝通(足夠的發現,或 1 個確認問題),然後是摘要。
  7. 訊息「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 區塊發送(格式請參閱「流程:結果後的修訂」)。

  1. 來自 GUI 訊息的輸入: Pattern 名稱、模式(ikuti referensi / custom)和片段資料夾。
  2. 素材。 閱讀 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。
  3. 工作資料夾 = <folder>/_training/<pattern>/。 請勿觸碰 <folder>/ 中的其他任何內容。複製必要的腳本(scripts/ 中)到 <folder>/_training/<pattern>/scripts/,並複製 SKILL/PLAN.md 到 <folder>/_training/<pattern>/PLAN.md。
  4. 測試。 (...)(原文已截斷)

相關技能