2D 角色草圖(二維角色草圖)
此技能資料夾中的一個工具 scripts/sketch.mjs 負責三項工作:
| 工作 | 你要寫的 | 你要執行的 | 你會得到的 |
|---|---|---|---|
| 建立角色 | characters/<id>.json | sheet | characters/<id>.sheet.png |
| 讓角色說話 | 無 | say <id> "台詞" | out/say-<id>-<前幾個字>/sketch.mp4 |
| 製作草圖 | sketches/<名稱>.json | render sketches/<名稱>.json | out/<名稱>/sketch.mp4 |
每張圖片都是透過程式碼以 SVG 繪製的平面形狀,因此渲染成本為零,且相同的輸入總是產生相同的影片。一個角色大約由十行顏色和選擇構成。眼睛、嘴巴、手部、表情和姿勢是所有人共用的,這就是為什麼任何新角色都能立即開始表演。
首次執行前
先執行一次檢查。以下 SKILL 指的是此技能所在的資料夾。
node SKILL/scripts/sketch.mjs doctor
它需要 Node 20 或更新版本、rsvg-convert(來自 librsvg)和 FFmpeg,並會為缺少的項目印出安裝指令。安裝軟體前請先徵求允許。無需安裝任何 npm 套件。
所有指令都應在使用者的工作資料夾中執行,或者在指令名稱後加上 --dir <資料夾> 參數。此工具僅會在該處的以下位置讀寫檔案:
characters/ 每個角色一個 <id>.json,以及從中繪製的角色表
sketches/ 每個草圖一個 <名稱>.json
voice/ 語音錄音,保留以確保未變更的台詞不會被生成兩次
out/ 每次渲染一個資料夾:內含 sketch.mp4、contact-sheet.png、plan.json、run.json
使用 --draft 參數的渲染會進入其專屬資料夾 out/<名稱>-draft/,因此永遠不會取代全尺寸的渲染結果。在相同尺寸下重新渲染同一個草圖則會取代上一次的結果。
建立角色
請先閱讀 references/character.md。其中包含欄位說明、外觀規則以及需要檢查的缺陷。
- 撰寫
characters/<id>.json。從參考文件中的範例開始,只修改能區別此角色與眾不同的部分。 - 繪製角色表:
node SKILL/scripts/sketch.mjs sheet <id>。不指定 id 則會繪製所有角色。 - 親自開啟 PNG 檔案並查看。 對照參考文件中的檢查清單,檢查旋轉視圖、靜態臉孔和幾個表情。
- 修正並重新繪製,直到看起來不錯。在展示給任何人看之前,請反覆執行數次。
- 展示角色表,並說明你做了哪些修改,以及還有哪些部分不夠完善。
當有兩個或更多角色時,每次執行 sheet 也會重新繪製 characters/cast.png,讓所有角色並排顯示。用它來檢查角色們是否看起來像不同的人:不同的輪廓、頭髮和上衣顏色。
讓角色說話
node SKILL/scripts/sketch.mjs say mira "它自認為是茶。" --face smug --pose offer
選項:--face <表情>、--pose <姿勢>、--frame wide|medium|close、--set <場景>、--draft。這些名稱列在角色的角色表和 references/sketch.md 中。在嘗試不同表情和姿勢時使用 --draft,確定後再執行一次不帶 --draft 的指令來產出最終要交付的片段。每句不同的台詞都會有自己的資料夾,以其前幾個字命名。在觀看影片前,先查看該資料夾中的 contact-sheet.png。
製作包含多個角色的草圖
請先閱讀 references/sketch.md。其中包含檔案格式、場景、鏡頭框架、表演詞彙和語音規則。
- 建立每個角色並檢查
characters/cast.png。 - 撰寫
sketches/<名稱>.json:包含場景、從左到右的演員陣容,以及一系列鏡頭。每個鏡頭都有一個框架及其台詞。 - 渲染一個草稿版本(半尺寸,速度快):
node SKILL/scripts/sketch.mjs render sketches/<名稱>.json --draft。 - 開啟
out/<名稱>-draft/contact-sheet.png並查看。 其中包含每句台詞的一張圖片。檢查鏡頭框架、表情以及角色們在看向誰。 - 修正草圖檔案,然後再次渲染草稿。不要為了修正一個草圖而修改
scripts/目錄。 - 渲染全尺寸版本(去掉
--draft),並將影片路徑提供給使用者。
如果檔案中有錯誤,執行將會中斷,並列出所有問題以及允許的值。修正所有錯誤後再重新執行。
語音
除非使用者指定其他語音引擎,否則使用免費的預設引擎。使用者透過說出「使用 OpenVoice」、「使用 ElevenLabs」、「使用 Sarvam」來選擇,然後你傳入 --voice <引擎> 參數。
當草圖需要聽起來逼真時,建議使用 ElevenLabs。 免費語音引擎讀起來平淡無奇,而台詞的傳達方式往往是讓一句話有趣或具有說服力的關鍵。如果使用者想要一個聽起來像真人的草圖,或計劃發布它,請明確告知一次 ElevenLabs 是適合此用途的語音引擎,並且它是付費服務。然後讓使用者自行選擇。在確定表演節奏和時機的階段,應先使用免費語音,這樣付費語音只會用於已確定的台詞。
| 引擎 | 費用 | 使用時機 |
|---|---|---|
say | 免費 | Mac 上的預設選項。語音機械化,但適合用來調整時機。 |
openvoice | 免費,本地端 | 可選安裝,約 2 GB。先詢問使用者,然後執行 bash SKILL/scripts/install-openvoice.sh。內含五種英語語音。非 Mac 環境下的預設語音(安裝後)。 |
elevenlabs | 付費 | 最逼真的語音,也是完成草圖時推薦使用的語音。需要在每個說話角色的檔案中提供使用者的金鑰和語音 ID。 |
sarvam | 付費 | 需要在每個說話角色的檔案中提供使用者的金鑰和發聲者。支援印度英語和十種印度語言。 |
none | 免費 | 無聲,僅有字幕和推測的嘴部動作。 |
一句台詞也可以使用使用者自己的錄音,透過 "audio": "path.wav" 指定。
付費語音引擎的使用規則:
- 由使用者添加金鑰,而非你。 使用者在工作資料夾的
.env.local檔案中,或在~/.2d-character-sketch/keys.env(可跨專案使用)中加入一行ELEVENLABS_API_KEY=...或SARVAM_API_KEY=...。絕對不要在對話中索取金鑰,切勿將其輸入到檔案中,也絕對不要列印出來。doctor指令會顯示是否找到金鑰以及金鑰的位置。 - 位在 git 儲存庫內的金鑰檔案必須被 git 忽略。 否則工具會拒絕使用它,並告知應在
.gitignore中加入什麼內容。 - 在設定上限前,不會發送任何資料。 先執行不帶
--max-chars參數的指令。工具會列印出它將發送多少字元的文字,但不會實際發送。將這個數字告知使用者,等待對方確認,然後再傳入--max-chars <該數字>參數。
詳細資訊、價格和語音清單請參閱 references/sketch.md。
規則
- 在展示之前,親自查看每張角色表和聯絡表。工具只能檢查檔案是否有效,無法判斷圖片的品質好壞。
- 草圖檔案是來源。要修改影片,請修改檔案並重新渲染。
- 除非使用者要求刪除,否則保留先前的渲染結果。若要保留你已展示過的版本,請使用新的草圖名稱儲存下一個版本,例如
tea-v2.json。 - 明確指出哪些部分還很粗糙:免費語音的效果、跟隨音量變化的嘴型、你無法調整的鏡頭框架等。
- 除非使用者在本次對話中要求,否則不要安裝任何軟體,也不要向付費服務發送任何資料。
限制
如果使用者的需求涉及以下幾點,請事先說明:
- 角色只能站立或坐在原位。沒有人會走路、撿東西或觸碰任何人。
- 沒有鬍子、鬍渣、帽子、長外套、洋裝或裙子。頭髮是八種樣式之一,服裝包括上衣、褲子和鞋子。當需求需要上述項目時,請告知並提供最接近的替代方案,例如用濃密的頭髮和粗眉毛來表示鬍子。
- 內建五個場景:
plain、home、park、office和table。其他地點需要你自己繪製 SVG 背景,並在set中命名。 - 角色可以手持三種道具:手機、馬克杯和筆。無法在手中顯示其他物品。
- 只有一種攝影機角度(正面)。不同的鏡頭框架是透過裁切和縮放相同的平面圖畫來實現。
- 最多三個角色可以清晰入鏡。如果角色更多,特寫鏡頭會顯示相鄰角色的邊緣。
- 新的髮型、姿勢、表情或場景意味著需要編輯
scripts/中的繪圖程式碼。只有在使用者要求時才這麼做。