Communitygithub.com

m4bwav/sfxwright

規劃、製作、編輯、檢查和記錄遊戲、電影、影片和應用的音效,並在磁碟上保留每個檔案的來源和授權。

sfxwright 是什麼?

sfxwright 是一個以腳本驅動的音效設計工具,專為遊戲、電影、影片和應用程式開發而建立。它透過結構化的 8 步驟流程,將簡短描述、鏡頭清單或遊戲事件清單轉化為可用的音效檔案。該工具支援多種來源,包括程序化合成(無需模型)、本機或可連線的 ComfyUI 節點、託管 API 以及 CC0 授權的音效庫。sfxwright 具備內建檢查功能,可自動偵測削波、點擊聲、直流偏移、截斷結尾、填充錯誤和不良接縫等常見問題,最終以「ship」命令彙整狀態報告,回答「我們可以出貨嗎?」,詳細記錄每個檔案的來源、模型、提示詞、種子、授權與編輯歷程,以確保版權合規與可追溯性。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/m4bwav/sfxwright/tree/HEAD/skills/sfxwright

在你喜歡的 AI 中提問

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

說明文件

sfxwright 是做什麼的?

成果:每個音效都作為 sounds.json 列表中的一行,包含其事件、圖層、變體、長度、路線和狀態,而每個檔案都記錄了其來源、模型、提示詞、種子、授權和編輯。數字用來抓出錯誤;耳朵來決定好壞。說出哪些音效還沒有人聽過。

SFX 代表從此資料夾執行 python scripts/sfx.py(執行它,不要讀取程式碼;sfx_audio.py 和 sfx_synth.py 是其模組)。在需要時,閱讀對應步驟的參考文件。

步驟 0:新鮮度

讀取 evergreen.json。如果 contradiction 已設定,或今天在 next_due 當天或之後,請用一句話說明,執行該任務,然後執行 evergreen-refresh。如果 verify_at_use 為 true,則在依賴模型和授權聲明前重新檢查它們。ai-sfx 長青偵察兵會在存在時提供更新。

步驟 1:權利優先

  • 來自知名電影或節目的音效,或著名的聲音商標(光劍、THX Deep Note、NBC 音效、Intel 提示音、MGM 獅吼、Netflix ta-dum):用一句話拒絕複製,並提供一個基於聲學特徵原創的聲音。不要將該標題或名稱放入提示詞或檔案中:references/rights.md。
  • 列表中的 commercial 決定允許哪些來源。如果使用者未指定,請設定 --commercial yes(較嚴格的解讀),並用一句話說明;不要停下來詢問。
  • 沒有已知授權的檔案不能進入商業專案。找到其來源或替換它。絕不猜測授權。
  • 絕不使用 Sonniss、BOOM 或 A Sound Effect 的檔案來訓練模型,或將其送入訓練流程。

步驟 2:規劃

執行 SFX init sounds.json --project NAME --use game --commercial yes,然後為每個音效執行 SFX add。電影片段、遊戲設計或簡單描述最後都要在此彙整:references/plan.md。對於任何具有軸向(表面、力量、大小)的內容,請先執行 SFX plan --axis surface=6 --axis force=3 --variations 4 --budget 100,再提交檔案。格式參考:references/format.md。

步驟 3:選擇路線

根據工作、授權和硬體選擇:references/routes.md。執行 SFX doctor 一次。用一句話說明選擇及其原因。安裝節點、引擎或大型模型,以及任何付費 API 呼叫,都需要先取得使用者同意;同時使用現有資源。沒有可連接的資源不是錯誤:SFX synth 無需模型,而 SFX gen --workflow-out 會提供一個工作流程。

步驟 4:製作

SFX synth list                          # 所有配方、參數和材料
SFX synth footstep --param surface=gravel --takes 6 --out takes/ --name step
SFX gen "heavy wooden crate dropped on concrete, dead room" --seconds 2 --takes 4 --out takes/ --name crate
SFX library found.wav --licence cc0 --library Freesound --title "..." --url ...
SFX register sounds.json crate takes/crate_01.flac

提示詞應說明來源、材料、空間和時間,而非一個故事。要求的長度是最大值,因此請預期會有填補。在改變文字之前,先嘗試不同的種子。絕不要求模型生成一個走路循環:改為製作單一步驟,然後使用 SFX sequence。

步驟 5:編輯

SFX edit(整理、修剪、淡入淡出、增益、峰值、音高、拉伸、反轉、卷積、直流偏移)、layer、vary、sequence、loop、place、record-sheet(為有錄音路線的音效規劃)、tone(穩定的安靜拉伸,可選填充;與 check --tone-match 比較)、pop(添加或使用 --verify 驗證主幹音軌頭尾的 2 個爆音)。配方及每項編輯的成本:references/edit.md。音高預設為變速播放;拉伸會模糊衝擊感。編輯會向前傳遞來源資訊,而無衍生作品的來源會拒絕它們。絕不要手動複製或重新命名音效:側車檔案會遺留在原地。使用 edit、finish 或 synth --out 寫入最終名稱。

步驟 6:檢查每個批次

SFX check takes/*.flac --seconds 2     # 每個檔案的讀數和標記
SFX set takes/step_*.wav               # 近似重複、離群值、電平分佈
SFX timing walk.wav                    # 太均勻,或一個樣本重複
SFX sheet takes/*.wav --out sheet.png  # 查看波形

任何變體集合都必定執行 set。一個標記代表需要聆聽;它不是最終判決,而一個乾淨的結果並不代表音效就很好。根據需求豁免某些檢查(例如對爆裂聲使用 --waive CLICK)。每個數字的含義及其校準基準:references/thresholds.md。

步驟 7:聆聽

數字無法判斷音效是否適合其畫面,或者一個集合是否聽起來像一個整體。當存在 askwright 頁面時,將選取的音效放上去,進行電平匹配(SFX review --match)、盲測,並為影片配上畫面。否則,提供標記的檔案列表和簡單的問題。將聽到的內容記錄在該 take 的 heard 欄位中,並將選取的音效標記為 picked: true。

步驟 8:完成與記錄

SFX finish in out --dest game-sfx:僅調整增益,最後再編碼。未知的目標目錄是錯誤:需要詢問。當 musicwright 存在且整個混音需要目標響度時,使用 mw.py master。引擎和目標目錄:references/finish.md。

SFX doc sounds.json --kind cue|impl|credits,然後執行 SFX ship sounds.json。報告 BLOCKED、CHECK 或 CLEAR 狀態及其原因、需要歸屬的內容和商店揭露資訊。這是一份記錄,而非法律建議。

輸出

路線、列表路徑、每批次的標記、誰聽到了什麼,以及任何輸出時的 ship 答案。

規則

  • 絕不能稱生成的音效為「錄製的」或「無 AI 參與」。ship 會列出需要揭露的項目。
  • 帶有音符、調性和節奏的音樂交由 musicwright 處理;對話及其環境音交由 voicewright 或 cinewright 處理。
  • 隨插件發布的樣本必須具有明確的權利。

工作期間:記錄學習

如果使用者糾正你、錯誤重複出現,或出現解決方法,請將其添加到 LEARNINGS.md。如果該情況證明某條規則有誤,請修正該規則,記錄在 CHANGELOG.md 中,並在 evergreen.json 中設定 contradiction。

維護

長青單元,等級 fast;狀態儲存在 evergreen.json 中。請參閱 MAINTENANCE.md、RESEARCH.md、TESTS.md、evals/。

相關技能