漫畫大師 — 工具 是做什麼的?
comic-master 的夥伴。該技能定義了什麼是好的頁面;而本技能則涵蓋了用來實現他們的工具。大多數糟糕的文字處理源於糟糕的工具:手繪的光柵橢圓、系統字體以及直接貼在畫作上的文字。
1. 使用 ComfyUI 製作面板藝術
如何執行 ComfyUI 本身(安裝模型、啟動、執行模板和工作流程)屬於本倉庫根目錄下 vendor/comfy-cli-skills/ 中的通用 ComfyUI 技能。本節說明如何將它們用於漫畫。
1.1 漫畫專案的生成設定
- 每個專案兩個工作流程: 用於新面板的文字轉圖像,以及用於連續性修復、匹配鏡頭和道具文字的圖像編輯。只需選擇一次,搭配一個模型和固定設定,並記錄在專案聖經中。
- 一個面板 = 一個工作 = 一個儲存的圖像。 這樣每個面板都可以追溯到其提示詞、種子和設定。
- 根據佈局調整每個渲染尺寸,而不是反過來。 從縮圖中取得面板的邊界框,並以該長寬比渲染約 1 百萬像素(例如,寬 1408×704、高 768×1024、條狀 1536×640)。然後縮放或裁剪到邊界框中,將故事關鍵細節遠離裁剪邊緣。
- 按場景批次處理,而不是按頁面,這樣場景內的面板在光線、調色板和背景上保持一致。
1.2 一致性
- 先製作模型表。 為每個角色生成一個旋轉和表情表,選出最好的,並將其重複用作參考圖像(IP-adapter、圖像編輯輸入,或者如果你能訓練一個,則使用角色 LoRA)。
- 固定錨點(comic-master
comic-characters.md§4.5)逐字放入每個提示詞中,從左到右列舉;為整個專案設定一個風格錨點。 - 種子: 記錄每個可接受面板的種子,以便可以重新生成或變化。
- 姿勢控制: 當構圖很重要時(發言者順序、視線水平、180 度線),請使用 OpenPose 或深度 ControlNet。
1.3 經得起考驗的提示規則
- 了解負面提示是否有效。 蒸餾模型以 CFG 1(FLUX.2 klein、Z-Image-Turbo)執行,通常會忽略負面提示。使用這些模型時,請以正面方式陳述你想要什麼(「正好四個人」、「放鬆平滑的眉毛」)。僅在具有實際 CFG 的模型上使用負面提示,或者添加負面引導節點(例如 NAG)。
- 使用模型的語言進行提示。 FLUX 和 Qwen/Z-Image 讀取自然句子;SDXL 讀取逗號分隔的標籤。對於句子模型,使用固定順序:鏡頭和角度 → 每個人物及其位置(從左到右) → 一個動作 → 表情作為解剖學描述 → 場景 → 光線 → 風格。
- 表情作為解剖學描述,絕不使用名稱。「無聊」往往會產生皺眉的表情。改為描述它:「上眼瞼半垂,眉毛高而平,嘴巴閉成一條直線」。在負面提示有效的地方,也對失敗情況進行負面提示(「皺眉,怒視」)。
- 服裝顏色放在提及身體部位的子句中(「肩膀上的海軍藍緊身衣」)。特寫鏡頭往往會漂向通用顏色;對漂移顏色進行負面提示。
- 無重複: 每個人物一個錨點,明確的數量和順序(「正好三個人:從左開始,……」),並且在負面提示有效的地方,將「重複角色、克隆、額外人物」放入負面提示中。
- 在提示詞中預留文字空間(「上部三分之一是空的平坦牆壁」)。要求乾淨、無文字的圖像(「無文字、無字母、無對話框」,在負面提示有效的地方使用,否則正面表述為「沒有任何文字的乾淨圖像」),除非是在有意的道具文字編輯環節中。
- 從縮圖進行分鏡。 將縮圖轉換為粗略的方塊佈局(火柴人、家具的方框),並將其作為姿勢、線稿或深度控制圖像輸入,這樣角色位置、比例和誰在房間裡就能遵循計劃。
- 生成幾個,挑選一個。 為每個面板渲染 3–4 個種子,並在任何文字處理之前,根據面板的目標和錨點進行選擇。
1.4 編輯而非重新生成
使用圖像編輯工作流程,並將現有面板作為輸入:
- 匹配面板(相同房間、重複笑點、反應鏡頭):將較早的面板調色到新的面板中,而不是從頭開始生成。
- 移除勝過重新安排。「移除桌子旁的第二個人」可行;「將他移動到椅子後面」通常會失敗。
- 連續性修復: 多餘的臨時演員、錯誤的服裝顏色、拿錯手的道具。僅對該區域進行修復或編輯。
- 道具文字(§4):寫在徽章或招牌上的短文字,以 1:1 檢查。
1.5 在文字處理前進行審查
- 將每個渲染結果與其錨點和面板的目標進行比較:臉部、服裝顏色、道具和手勢、光線方向、多餘的人物、殘留的字形、空的文字區域。
- 為每個面板保留記錄(提示詞、種子、設定、接受或拒絕及其原因),以便修復是可重現的。
1.6 推薦的模型設定
8 GB VRAM(工作預設值):
| 工作 | 模型和檔案 | 備註 |
|---|---|---|
| 面板和編輯 | FLUX.2 [klein] 4B fp8 (flux-2-klein-4b-fp8) + qwen_3_4b 文字編碼器 + flux2-vae | ~4 步,CFG 1。編輯模式接受參考圖像(模型表)以實現符合角色的角色。Apache-2.0。 |
| 更高品質的單一面板、道具文字 | Z-Image-Turbo int8 (z_image_turbo_int8_convrot) + qwen_3_4b_fp8_mixed + ae.safetensors | 模板 image_z_image_turbo_int8;~8 步。更好的文字和指令遵循;無參考圖像編輯。透過 Z-Image-Turbo Fun Union ControlNet 模板進行姿勢/深度控制。Apache-2.0。 |
| 分鏡控制 | SDXL + OpenPose ControlNet + IP-adapter | 在 8 GB 下最成熟姿勢和佈局控制;使用 Klein 優化結果。 |
| 角色去背 | comfyui-rmbg 搭配 BiRefNet toonout(專為卡通和插圖設計)或 RMBG-2.0 | 用於下方的分層工作流程。 |
| 放大 | 4x-UltraSharp,拼接 | 渲染 ~1 MP,然後放大到印刷尺寸。 |
在 8 GB 下:使用 fp8/int8/GGUF 權重;當記憶體緊繃時,將文字編碼器移動到 CPU 或第二個 GPU;對大圖像使用拼接 VAE 解碼;一次僅載入一個模型;將任何本地 LLM 保留在不同的 GPU 上。
分層角色: 在平坦的純色背景上生成每個角色,將其去背(BiRefNet toonout),並合成到每個場景的一個共享背景上。這可以解決僅靠提示無法解決的分鏡、比例和誰在房間裡的問題,並使道具在各個面板中保持相同大小。
使用更多 VRAM: FLUX.2 [klein] 9B(~20 GB;非商業用途)、Qwen-Image-2.1(~24 GB;10 張參考圖像、透明 RGBA 輸出、遮罩編輯;研究許可證)、FLUX.2 [dev](24 GB+ 在 fp8 下;頂級品質和多參考;非商業用途)。在商業使用前檢查每個模型卡的許可證;上面的 8 GB 堆疊都是 Apache-2.0。
2. 文字處理引擎:繪製向量,而非像素
2.0 使用文字處理工具(預設)
不要編寫文字處理程式碼。使用 scripts/letterer.py,它與此 SKILL.md 一起位於該技能的資料夾內,以及 scripts/README.md、scripts/styles.json 和 scripts/fonts/ 中已核准的字型。相對於此 SKILL.md 解析路徑,無論倉庫被克隆到何處;切勿將腳本複製到專案中。它已經遵循本節中的每一條規則,並自行執行 §5 中的品質檢查。需求:Python 3.9+ 搭配 Pillow 和 numpy(pip install -r scripts/requirements.txt);建議安裝 mediapipe,它會啟用自動臉部檢查(對話框必須避開臉部)和 "tail_to": "auto"。
工作流程:
python scripts/letterer.py grid --image panel_or_page.png --out grid.png並檢視疊加層。讀取面板矩形、每個發言者的頭部框和嘴巴,以及空白區域。然後根據 comic-mastercomic-lettering.md§12.2 中的放置規則和 §12.7 中的逐步程序,為每個對話框選擇位置和尾部瞄準點:對話框位於靠近頭部的空白區域,尾部指向嘴巴但終止於頭部之外。所有座標都是相對的:從左上角開始的 0.0–1.0。- 編寫一個頁面規格(JSON),其中的項目按閱讀順序排列:
{
"image": "strip.png", "out": "strip_lettered.png",
"panels": [[0.0125,0.03,0.329,0.97], [0.342,0.03,0.658,0.97], [0.671,0.03,0.988,0.97]],
"avoid": "faces_mask.png",
"items": [
{"style": "declaration", "text": "The city calls. I answer.", "zone": [0.03,0.06,0.31,0.24]},
{"style": "speech", "text": "Did anyone else|hear that noise?", "at": [0.46,0.30], "tail_to": [0.52,0.52]},
{"style": "sfx-micro", "text": "bzzt bzzt", "at": [0.39,0.62]},
{"style": "sfx", "text": "KA-CHUNK", "at": [0.80,0.88], "size": 2.4, "rotate": -8}
]
}
python scripts/letterer.py page spec.json。退出碼0表示所有品質檢查已通過;1表示已渲染但品質檢查失敗,因此請閱讀列出的失敗訊息,修復規格(將對話框移近發言者、放大區域、刪減文字、使用|重新換行)並再次執行;2表示錯誤(未知風格、缺少字型、錯誤的規格)。- 以全尺寸和縮圖查看 PNG。將 SVG(可編輯)和
_qa.json(測量數據)與頁面一起保留。
項目欄位: style;text(| 強制換行,否則它會自動換成菱形;_word_ 加底線以表示強調);at [x,y] 中心或 zone [x0,y0,x1,y1] 以適合內部;tail_to [x,y] 瞄準點:不是嘴巴本身,而是頭部外部空白區域中的一個點,位於從對話框朝向嘴巴的線上,距離臉部約 1 個字元高度(工具會將尖端停在稍微短一點的位置,因此尾部瞄準發言者而不接觸他們);用 "no_tail": true 省略它。不要使用 "auto":它會返回嘴唇本身;可選的 panel 索引、size 乘數、rotate(度數,順時針)、fill(背景)、ink(外框)、text_color、font、tail_bend、link(同一發言者較早對話框的索引:將兩者連接起來)、bleed(true 為故意打破面板邊框)、seed。
超越基本功能的頁面欄位: defaults 為每個項目設定顏色和字型({"fill": "#FDF6E3", "ink": "#2B2B2B", "text_color": "#1F3A7A"});styles 為此頁面覆蓋一個樣式({"speech": {"fill": "#FFF7D6"}});avoid 預設為 "auto"(偵測到的臉部受到保護),或一個遮罩圖像,或 false。
在一次 page 執行中為組裝好的頁面或條狀圖加上文字,切勿逐個面板進行。 一次執行可使文字處理大小在所有面板中保持一致,並讓品質檢查能夠檢查整個頁面的閱讀順序和重疊。
頁面欄位: image、out/svg/qa 路徑、panels(強烈建議:用於邊緣間距、閱讀順序和文字處理大小)、ch(像素中的字元高度;預設值是中間面板短邊 ÷ 30,到處都相同)、avoid(白色 = 必須保持清晰的臉部、手部或關鍵動作;從分割環節構建它)、direction(ltr,或 rtl 用於漫畫)。
樣式(執行 python scripts/letterer.py styles 以取得包含一行說明的即時列表):
- 對話:
speech、speech-hand(手繪墨跡、斜體、彎曲尾部)、emphasis(大線條;使用_word_加底線)、whisper(虛線)、strain(顫抖外框、淡黃色:從牙縫中擠出的話語)、electronic(鋸齒狀尾部)。 - 思考:
thought-1(=thought、蓬鬆雲朵)、thought-2(精細扇形)、thought-3(帶有氣泡的光滑橢圓)。若有疑問,請使用thought-1:當要求思考框但沒有更多細節時,這是預設選項。思考軌跡需要在對話框和其瞄準點之間至少有 2.5 個字元高度的空白空間,否則品質檢查會失敗。請參閱 comic-mastercomic-lettering.md§12.8。 - 大聲:
shout、shout-2(手繪爆炸框)、burst(無尾部)。 - 框:
caption、caption-hand、declaration和declaration-hand(引用的旁白;在頁面上向下堆疊幾個以用於獨白)、locator、narrator。 - SFX:
sfx(在來源處,帶有細白色外框)、sfx-micro(細微聲音)、sfx-stack(在來源旁堆疊的重複聲音:"wub|wub|wub")。
為每本書保持一種對話外觀:要麼使用普通樣式,要麼使用 -hand 樣式,不要在場景內混合使用。請參閱倉庫根目錄下的 examples/styles/sheet_lettered.png,以查看所有樣式並排顯示。透過在 styles.json 中添加條目來新增樣式,切勿編寫新的繪圖程式碼。
快速單個項目: python scripts/letterer.py bubble --image in.png --out out.png --text "GET DOWN!" --style shout --at 0.17,0.25 --tail-to 0.155,0.47 --panel 0.0125,0.03,0.329,0.97
如果該工具缺失,請遵循以下規則來建構等效工具,並仍然產生相同的品質檢查數據。
- 以 SVG 格式建構文字處理,並使用 resvg、cairosvg 或無頭 Chromium(Playwright)進行渲染。向量提供平滑曲線、真實字距、乾淨筆觸和可編輯圖層。不要使用光柵橢圓調用繪製對話框。
- 使用真正的漫畫字型。
- 對話:Comic Neue、Patrick Hand、Anime Ace 或其他手寫字體,全部大寫,為整部作品使用一種字型。
- SFX 和標題:一種粗體顯示字型,例如 Bangers。
- 絕對不要使用系統無襯線字體(Arial、Helvetica、DejaVu)。如果字型檔案缺失,應大聲報錯,而不是默默地回退。
- 對話和標題僅使用樸素、直立、手寫的字型。 不要使用顯示字型、科技字型、未來主義字型、模板字型、恐怖字型或新奇字型來呈現人們必須閱讀的文字:缺少橫筆或風格化的 E/A/M 字母形式會減慢閱讀速度並改變語氣。裝飾字型僅用於 SFX、標題和標誌。
- 在專案聖經中保留一份已核准的清單(例如,對話:Comic Neue Bold 或 Anime Ace;SFX:Bangers),並拒絕任何不在清單中的字型。
- 對話框適合文字:
- 將文字包裝成菱形:短頂行、最寬的中間行、短底行,最後一行不能只有一個字。
- 測量文字區塊並在其周圍繪製一個圓角橢圓或超橢圓。
- 增加邊框,直到文字的每個角落與其之間至少有 1 個字元高度的距離。
- 切勿將文字擠入固定的橢圓中。
- 尾部是彎曲、錐形的路徑,而非三角形:
- 基部約為對話框寬度的 1/8(絕不小於約 0.8 個字元高度),位於最靠近發言者的一側。
- 長度可達對話框高度的一半左右(或對於小對話框為 2.5 個字元高度),朝向嘴巴彎曲並在…
…(此處截斷)