CurioTails:用 ComfyUI 和 Qwen3-TTS 做一本繪本
2026 年 8 月 28 日 · 閱讀時間 6 分鐘
CurioTails 是一本以 AI 製作的有聲繪本,故事圍繞著一群色鉛筆風格的森林動物,目前仍在進行中。這篇分享到目前為止最花時間的四個問題:如何讓角色維持一致、讓畫風不跑掉、讓場景符合空間邏輯,以及讓聲音聽起來自然。
我是一名設計師,也很清楚手繪藝術和人工配音有它們無法被取代的價值。
真正的手繪作品有筆觸、偶然性和人的判斷;好的配音演員也不只是把文字念出來,他們會先理解角色,再決定一個停頓、一個語氣,甚至一句話應該怎麼呼吸。
所以,這個專案從來不是想證明 AI 可以取代這些事情。
我反而想知道另一件事:
如果我把 AI 當成一套需要被設計、控制和反覆挑選的工具,它能不能做出不像 AI Slop 的內容?
我想做的是一本真正可以閱讀的繪本。角色要有自己的個性,畫面要有一致的視覺語言,場景要符合基本的空間邏輯,文字和插畫之間要有關係,聲音也不能只是把文字機械地念出來。
更重要的是,最後的判斷仍然要由人來做。AI 可以生成很多東西,但生成得多不代表作品就好。對我來說,設計師真正能介入的地方,是決定什麼該留下、什麼該被丟掉,以及如何建立一套流程,讓好的結果可以被穩定地重複。
這也是 CurioTails 最主要的實驗。我把它當成一個小型的 AI production system:從角色、畫風、場景到聲音,盡可能把原本靠人工經驗判斷的事情拆開、測量,再重新組合。
這篇文章會分享其中最花時間的四個問題:角色生成、畫風一致性、合理的場景構圖,以及聲音設計。

重點摘要
- 目標: 製作一套有固定角色陣容的繪本系列。每一集講一個故事、介紹一個概念,同一套美術素材還要能延伸成旁白影片、短影音與紙本繪本。
- 做法: 讓兩個影像模型各自負責擅長的事情:一個處理結構,一個處理風格。先確定整體畫風,再建立角色。每一頁都拆成獨立圖層,修改其中一個部分時,不需要整頁重做。
- 成果: 建立四個穩定的角色、一套頁面構圖系統,以及一系列自動檢查機制,在人工審稿之前就先把常見錯誤抓出來。第一集目前正在逐頁製作中。
一分鐘了解這個專案
如果要快速理解 CurioTails,可以想像成節奏更慢、內容更簡單的《魔法校車》。
每一集只介紹一個概念,每頁最多放三個重點物件,再由四隻森林動物帶著故事往前走:刺蝟、浣熊、狐狸和臭鼬。
但真正影響整個製作流程的,是一個很實際的限制:
同一套美術素材必須同時適用於長影片、直式短影音和紙本繪本,而且還要支援不同語言。
因此,每一頁從一開始就被拆成四個獨立部分:背景、角色、文字和聲音。
這樣一來,如果今天只修改一句對白,只需要重新排版那段文字,再重新錄製對應的音訊,不需要重新繪製整個頁面。
整條管線都跑在本地的一張消費級顯示卡上:影像透過 ComfyUI 生成(用 API 驅動,搭配 Z-Image、FLUX.2 Klein 與自訓的 LoRA),所有聲音則來自 Qwen3-TTS。

角色:讓不同模型各自做擅長的事
很快我就發現,沒有一個模型能把所有事情都做好。
Z-Image 比較擅長處理結構。 它生成的動物通常符合基本的解剖邏輯,姿勢也比較自然。但它預設的畫風太寫實,和我想要的兒童繪本風格有落差。
Klein 則比較擅長處理風格。 它能生成我想要的經典繪本質感:柔和的水彩搭配細緻的鉛筆線條,有點接近 Beatrix Potter 的作品。但我不希望讓它同時負責角色的身體結構。

Qwen 沒有被留下的原因很實際:成果和 Z-Image 只有些微落差,但模型重得多,在我的顯示卡上生成也明顯比較慢。而這個階段我要的只是給 Klein 當草圖的結構稿,Z-Image 就夠了。
所以最後的流程,就像讓兩位不同專長的畫家接力完成作品:
- Z-Image 先畫草稿。 每個角色生成 12 種姿勢,每種姿勢各做兩個版本,再由人工挑出比較好的結果。
- Klein 接手處理風格。 被選中的角色會重新繪製成我設定好的繪本風格,同時以原本的草稿作為參考。這個階段也可以順便修正細節,例如要求「把臭鼬的臉改成純黑」或「移除草地」。
- 最後用 LoRA 固定角色。 重新繪製後的角色會成為每個角色專屬 LoRA 的訓練資料。完成之後,即使換成不同姿勢、不同場景,角色仍然能維持相同的辨識特徵。
最後形成的四個角色是:Roro the hedgehog、Washi the raccoon、Kiko the fox,以及 Ponder the skunk。兩個孩子、兩位長輩;每一組裡各有一個比較認真、一個比較活潑的角色。

每個角色也有自己固定的聲音。可以點下面的句子試聽,包括幾段選角時的情緒表現。這些聲音是怎麼被導演的,會在後面的聲音章節說明。
Washi · 浣熊
聲音:sohee,用導演指示推高到兒童音域。
Roro · 刺蝟
聲音:ono_anna,明亮,永遠稍微太大聲。
Kiko · 狐狸
聲音:ryan,溫暖、不疾不徐的大人。
Ponder · 臭鼬
聲音:serena,放慢到沉穩的節奏。
一致性:從 AI 最容易出錯的地方開始設計
這些角色看起來很簡單,而且這是刻意的。
我後來發現,角色設計的每一條規則,其實都來自 AI 曾經犯過的錯:
- 不穿衣服,也不使用配件。 配件是最容易在不同圖片之間跑掉的元素。圍巾可能一下變色、一下變大,甚至莫名其妙多出一條。(兩位長輩後來各獲得一件衣物:素色領巾、素色披肩。柔軟、單色、無花紋,正是為了不會跑掉。)
- 避免複雜圖案。 格紋、花紋之類的圖案,每次生成都可能被重新解讀,最後模型會把這個區域理解成「可以隨機變化」的地方。
- 使用純色的珠狀眼睛,不畫眼白。 這本來就是經典繪本常見的表現方式,同時也能避免一整類眼神失控的問題。角色的情緒則交給眉毛、嘴巴、耳朵和姿勢來表現。
- 所有東西都要數。 四隻腳、兩隻耳朵、一條尾巴,都直接寫進 prompt 裡,最後再一個一個確認。聽起來有點誇張,但要抓出 AI 多生成一隻腳這種問題,數數其實是最可靠的方法。
拿掉配件之後,角色的辨識度主要靠三件事情維持:輪廓、尺寸和顏色。四個角色的輪廓完全不同;長輩大約是孩子的兩倍大;顏色則分別是灰色、栗色加奶油色、橘色,以及黑白色。
還有一個同樣重要的順序:
一定要先確定畫風,再製作角色。因為 LoRA 學到的不只是角色,也包含角色所處的視覺風格。如果角色都訓練完成之後才決定改變畫風,就代表每個角色都得重新訓練。
所以我先做了四組畫風測試。相同場景、相同 seed,只改變畫風,最後才決定採用哪個方向。我最後選擇的是 D:經典繪本風格,以水彩搭配細緻的鉛筆線條。之後所有角色都以這套風格作為訓練基準。

場景:把一頁繪本當成一組圖層
一頁畫面在影片裡可能會停留一到兩分鐘。如果只是放一張靜態圖片,很容易顯得單調,所以我把每一頁當成一組可以獨立調整的圖層,讓畫面在不同節奏點產生小幅度變化:角色換一個姿勢、鏡頭稍微移動、文字出現,或者加入一個聲音。
一個完整頁面由下往上大致分成:
- 背景:地平線固定在 60%;尺寸以已知大小的參考物件推算;可行走的地面區域由人工確認。
- 角色:使用去背 PNG;每一個新的節奏點可以換成另一個姿勢;角色的接觸陰影直接和角色一起保留。
- 前景:只覆蓋畫面最下方約三分之一,不遮住角色的臉;移動速度比背景快,形成視差效果。
- 光線:一層套用在背景和角色上的色調、一層角色專用的暖/冷色邊緣光,以及一層覆蓋整體的光暈。
- 文字:放在紙張留白處;不套用場景的整體色調;對話縮排位置會配合角色的位置。
- 聲音:旁白、對話、音效、環境音與音樂。
每個節奏點都由一小段文字、一個視覺變化,以及對應的聲音組成。每頁大約有 3–6 個節奏點。這種做法最大的好處很簡單:改一句話,就只需要重新錄那一句。不需要重做整頁。
AI 生成場景時,真正讓人出戲的問題,通常是畫面合不合理。角色漂浮在地板上、站在樹根上,或者尺寸和其他物件對不起來,都會讓人立刻感覺到不對。我最後用三條規則解決大部分問題:
- 尺寸不能靠目測。 每個背景都先用一個已知尺寸的物件作為基準,例如椅子或桌子,再從這個基準推算角色大小。如果狐狸應該是兩張椅子的高度,數學就會直接告訴我結果是否合理。
- 位置不能靠目測。 每個背景都有一個人工確認過的「可行走地面」區域。如果角色的腳落在這個區域之外,頁面就直接建置失敗,才不會讓一隻浣熊最後站在門檻上。
- 陰影不要後製貼上去。 我以前會在角色腳下加一個柔和的橢圓陰影,但看起來總像貼紙。現在陰影會和角色一起生成,再保留在角色的去背圖裡。

光線也要獨立出來
光線採用相同的分層概念。我不會直接把火光畫進角色圖片裡,因為這樣一來,這個角色就只能使用在那個特定場景。
所以每個場景都有自己的光線配方(light recipe)。它是一個放在完整插畫上方、文字下方的調整圖層,包含:同時套用到背景與角色的整體色調、只套用到角色邊緣的暖色或冷色光,以及覆蓋整個場景的光暈。
這樣同一個角色和同一個背景,就可以快速切換成正午、黎明、黃金時刻、黃昏、夜晚、營火或街燈等不同光線。作品本身完全不需要改。光線只是另一個可以替換的圖層。

多角色場景:不要讓模型自己猜比例
當畫面裡有多個角色時,我也不再相信模型能正確判斷比例。模型傾向把畫面中的角色都生成成「舒服的大小」:單獨看沒有問題,但放在一起就會失去比例。
所以我改用 block-out 先把構圖鎖定:先用幾個橢圓和一張桌子建立簡單的空間關係,再讓模型按照這個結構生成完整場景。
我也測過直接用文字描述比例,例如「刺蝟只到狐狸的腳掌高」。結果並不可靠:有一張圖裡刺蝟變得非常小,另一張甚至直接消失。block-out 反而能更穩定地控制角色的位置與尺寸。

文字不應該蓋在插畫上
文字的處理方式也改過一次。一開始,我用了半透明的字幕條,結果每一頁看起來都像遊戲字幕。
後來我把文字放回真正的紙張留白處,並且根據角色正在看的方向安排位置。這樣讀者的視線會自然地從角色移到文字,再走向下一頁。
對話也不使用角色姓名標籤。如果畫面左邊的動物說話,文字就靠左;右邊的動物說話,文字就向內縮排。這個交錯的縮排本身,就成為對話來回進行的視覺節奏。


聲音:選對聲音,比寫更多指令更重要
每個角色都有固定的聲音,使用本地端的 Qwen3-TTS 生成。模型本身沒有真正的兒童聲音,所以我會利用音高去區分年齡:同一個聲音用較低的音調讀奶奶,再用更高的音調讀小浣熊,最後可以得到相當接近 5–7 歲兒童的聲音範圍。
但我在 TTS 上學到最重要的一件事是:
指令越長,朗讀通常越差。為了量化這件事,我定義了一個 drag ratio,用來衡量實際播放時間相對於字數所應有的自然語速,多出了多少時間(1.0 代表自然語速):
- 簡短指令:1.17
- 最小化指令,例如「native accent」:1.31
- 詳細的口音說明:1.46
- 再加入 voice actor persona:1.80
最長指令下,最差的一段甚至被拉長到 24 秒。問題在於,越詳細的指令會讓模型開始「很認真地表演」:母音被拉長、句尾開始拖音。我甚至自己製造了奇怪的呼吸聲,原因只是 prompt 裡寫了「在標點處自然呼吸」。對模型來說,這其實就是在要求它加入呼吸聲。
最後,我把指令縮成四個簡單句子,而且不再加入額外要求。
選角比導演更有效
語氣的控制也遇到類似問題。我曾經要求旁白「保持平靜的音調」,結果聲音反而變得更戲劇化。因為只要提到「音調」,模型就會把它理解成「請表演音調」。
指令可以影響表演,但很難限制表演。真正有效的方法其實是選聲音。在所有可用的聲音裡,最平靜的聲音,在相同指令下,音高變化幅度只有最戲劇化聲音的三分之一。所以與其花大量時間寫 prompt,不如先選對聲音。
Qwen3-TTS 的極限:口音
有一個我一直沒能完全解決的限制:內建聲線念英文時,多少都帶著一點口音。我先試著用指示修正,也就是上面拖音率的故事;後來又試了 VoiceDesign,不用內建聲線,改用一段文字描述從零設計一個聲音。
VoiceDesign 可以聽起來很接近母語者,但一致性很難克服:同一段描述、同一句台詞,生成出來可能是明顯不同的聲音。對一個要在整季維持同一把聲音的角色來說,這樣行不通。
所以班底還是用內建聲線。每個角色都留著一點點口音,目前我覺得在可以接受的範圍。下面是當時測試留下的幾段紀錄:
測試:指示長度
同一句話、同一個聲線,三種指示版本。
測試:VoiceDesign 一致性
同一段描述、同一句台詞,三個 take。
標點符號其實才是節奏控制器
我最後還發現,標點符號對節奏的影響非常大。同一句話,使用普通標點,可以在 5 秒內讀完;換成刪節號和破折號,可能會拉長到 11 秒。
因此,畫面文字和配音稿最後被拆成兩份文件。例如畫面上的文字可以保留「這裡好安靜……」,但配音稿則使用逗號,讓聲音模型自然控制停頓。
讓品質檢查也自動化
每段音訊都會經過自動檢查。Whisper 會重新轉錄音訊,確認有沒有漏字或多字;另外也會透過簡單的聲學檢查,偵測呼吸聲和過度拖音。如果超過設定門檻,這段音訊就會重新生成,最多嘗試四次。
旁白還多一道流程:每句話生成三個版本,再選出最接近這一季參考錄音的版本。
三件我會再次採用的做法
1. 讓不同模型負責不同事情
用擅長理解解剖結構的模型畫草稿,再用擅長視覺風格的模型重新繪製,最後透過 LoRA 鎖定角色。每個模型只做自己最擅長的事情。
2. 選擇,比不斷下指令更重要
不管是圖片還是聲音,不斷增加指令通常只會讓結果變差。與其一直修改 prompt,不如在簡短指令下多生成幾個候選版本,再把時間花在選擇上:seed、take、voice。
3. 把「看起來對」變成可以測量的東西
可行走地面檢查、參考物件尺寸計算、drag ratio 門檻、語音轉錄差異,這些都可以交給系統檢查。
品味仍然需要人來判斷,但所有低於「品味」的事情,都應該能被系統自動檢查,而且一旦出錯,就直接報錯。
這是一個進行中的專案
CurioTails 還在進行中。第一集正在一頁一頁地製作,每一頁通常都會經過好幾輪審視和重做,才算真正完成。
還有一個影響了上面每個決定的限制:我希望整條管線完全用本地模型處理,而我的顯示卡只有 12GB VRAM,很多選擇都是在這個預算內做的。如果之後改走雲端,我會試著用 Nano Banana 處理部分圖面,並用 ElevenLabs 處理音樂和聲音。
下面是目前完成的頁面。逐頁製作的過程也累積了另一批經驗,關於伏筆、翻頁和連戲,之後會再寫一篇分享。
第 1 頁:Washi 一家離開都市。







