ZeroCel
讓動畫師專注在最關鍵的畫格,把繁瑣重複的中割工作交給 AI——而且,主導權始終在人的手上。
⏸ 目前狀態:授權障礙已解除,但仍刻意暫不發行
產品面已可打包成自含式安裝檔並實際運行。原本擋住發行的是「AnimeInbet 僅授權非商用,而核心的 Hybrid 引擎以它為基線」——2026/08 這個障礙已經解除:量測顯示新版 RIFE 在大動作上已經全面勝過 Hybrid,那兩個引擎因此直接從產品移除,剩下的依賴授權全部乾淨。現在不發行的理由只剩一個:中割品質。目標使用者是靠作品吃飯的職業動畫師,在自研模型把品質帶到他們真的用得下去之前,我不想把一個「能跑但不夠好」的東西送到他們手上。決策過程見下方「授權評估」,自研進度見「自研中割模型」。
把勞力交給 AI,把藝術決策留給人
傳統手繪 2D 動畫一秒 24 格。動畫師畫的是原畫——動作的起點、最高點、落地點;中間的中割再補上去。三張原畫之間可能要補二十張,而那二十張幾乎沒有創作空間,純粹是體力活。這是最耗時、最重複,也最容易消磨創作熱情的環節。
近年的 AI 影格插值技術理論上能自動生成中割,但對動畫師來說有個致命問題:純自動化會奪走「意圖」的控制權。動作的快慢節奏、誇張與收斂、骨架的走向,這些都是動畫師的表演語言,不該交給黑箱決定。
ZeroCel 想回答的問題是:能不能讓 AI 承擔勞力,又把每一個藝術決策的最終決定權留給人?雙進程架構,CLI 與 GUI 平行客戶端
工作流:匯入原畫(PNG / PSD / 影片抽幀)→ AI 生成中間張 → 人工檢視修正 → 回饋自動學習 → 匯出 PNG 序列 / GIF / MP4。
整體採 C# WPF 前端 + Python FastAPI 後端雙進程架構,透過 HTTP REST(同步操作)與 WebSocket(推論 / 訓練進度推播)在本機通訊。前端啟動時自動偵測並拉起後端,前端結束時自動終止後端進程。CLI 與 GUI 被設計成後端的「平行客戶端」,彼此獨立而不互相依賴。
規模:C# 約 23,700 行 + 6,600 行 XAML;Python 後端約 17,300 行(34 個 API 端點);CLI 約 8,000 行;自研模型管線約 21,900 行;自動化測試三套全綠——後端 237 項、CLI 139 項、自研模型 17 組構造自驗。
針對不同動作與線稿,兩個互補的推論引擎
原本有四個引擎,其中兩個在 2026/08 移除——不是因為授權妥協,而是量測顯示它們已經沒有存在的理由(見下方「授權評估」)。派工架構保留,被派工的對象未來會逐步換成自研模型。
| 引擎 | 原理 | 適用場景 |
|---|---|---|
| RIFE v4.18 | 光流插幀(PyTorch, IFNet_HDv3) | 平滑連續的小動作補幀,全彩/線稿通用,速度最快;支援 t 外推做 overshoot。 |
| TPS | 骨架偵測 + Thin Plate Spline 網格變形(scipy RBF) | 人物中割,支援部位鎖定與人工骨架編輯。 |
骨架偵測支援三種後端(MediaPipe / RTMPose / DWPose,17 或 33 點 COCO),模型尺寸 s/m/l 可選。
AutoRouter 自動派工
純 CPU 邏輯、可獨立測試的決策核心:素材判定(依明暗比例、飽和度、線稿乾淨度分類)→ 動作粗估(取兩張前景墨線遮罩的質心,算歐氏距離並正規化到影像對角線:小動作與大動作都走 RIFE、髒線稿走 TPS)→ 輸出完整派工計畫。動畫師可以先預覽派工計畫、確認後才送推論——一鍵智慧調度負責省事,「進階面板」永遠保留完整手動控制。
派工以圖層為單位
推論不是對整張合成圖做的,而是逐圖層進行,派工只看該層的像素——角色層與背景層各自會拿到適合自己的引擎,而不是被整張合成圖的平均特徵拖著走。
整個過程不打斷工作流
隱式回饋收集
動畫師「鎖定 AI 原版/鎖定編輯版/刪除」的行為被記錄為訓練訊號,鎖定視為認可、刪除視為否決——不需要另外填任何評分。
自動排程與資源讓步
累積 ≥20 筆回饋、距上次 ≥6 小時、同日訓練 <2 次,於閒置時自動觸發(≥50 筆走緊急路徑,可 bypass 時間節流但仍須通過其餘檢查);動畫師一開始推論,訓練立即讓出 GPU。
Delta 增量訓練,不堆疊
三元組(A, GT, B),Charbonnier loss + 負樣本 hinge loss,線稿素材另加墨線加權;每次都從基底模型重新以 delta 增量訓練——不堆疊,避免個人化讓品質悄悄退步。
驗收 Gate 與三層 delta
每一次微調都要通過 holdout 考古題驗收(相對改善 ≥5%);首次微調沒有既有 delta,對照組即為純 base 模型。考題池建不起來時一律判定失敗,不放行。三層 delta 持久化:pending.delta(驗收中)→ active.delta(生效)→ previous.delta(rollback 用);上線後由 implicit gate 持續監控刪除率,突增則自動回滾。
⚑ 一個改對過的設計錯誤
初版的邏輯是「首次微調沒有對照組,所以免考直接套用,再靠刪除率監控」。聽起來合理,實際出了事故:首次免考 + holdout 池建不起來,等於把一個從未驗證過的模型直接套到使用者身上。修正是把「池空」從免考通過改成必定失敗,並讓首次微調的對照組取純 base 模型。「缺少驗證資訊時,預設該通過還是該失敗」是一道有明確答案的安全設計題——預設值要落在保守的那一邊。
動畫師的控制權,落實到每一層
| TimelineView / VM | 多軌時間軸、FPS、曝光格、多選框選、音軌波形(NAudio)與對齊。 |
| CanvasView / VM | 畫布繪圖(筆刷 / 圖層)、洋蔥皮疊加、縮放平移、骨架編輯模式。 |
| AiPanelView / VM | AI 中割面板:推論會話、引擎 / 模型選擇、骨架偵測與編輯、中割風格曲線。 |
| 匯入匯出 | 影片抽幀匯入對話框、MP4 / GIF 匯出、批次匯出視窗。 |
| 微調管理 | 模型切換、微調清單管理、個人化參數與排程狀態。 |
骨架關鍵點鎖定 + 手動編輯
六組可勾選的部位(頭部 / 左臂 / 右臂 / 軀幹 / 左腿 / 右腿)+ A/B 錨點,在畫布上以骨架疊圖即時呈現,動畫師可逐點開關;TPS 引擎依鎖定點保持該部位不變形。動畫師也可直接在畫布拖拉骨架節點,引擎跳過自動偵測改用人工座標。
中割風格系統
Smooth / Exaggerated / Mechanical / 自訂 Bezier 曲線(BezierEditorView)直接對應動畫表演的不同節奏,轉為自訂 t_values 送後端。
Quick Flip · 模擬手翻紙檢查動作
按住 F 鍵 ±2 格鐘擺播放,模擬動畫師手翻紙檢查動作。
失敗要明講
推論輸出接近空白時(大動作下確實會發生,量測見下節),介面直接提示「動作幅度可能過大,建議改用其他引擎或手動處理」,而不是默默交出一張白圖。
DrawingId 中心的儲存
LayerStore(各圖層像素,真相源)+ FrameStore(合成快取)分離。動畫的「一拍二」「一拍三」意味著同一張畫會曝光在多個格子上;若以格號當識別,同一張畫會被複製多份、編輯時就會不同步。改以 DrawingId 索引後,改一張畫則所有曝光到它的格子同時更新——這與動畫師的曝光表心智模型一致。
.zcel 專案格式 + 自動存檔
ZIP 容器內含 project.json、圖層 PNG、音軌、可選微調 delta.pt(載入時逐 entry 驗證路徑,防範 Zip Slip)。操作計數 + 閒置計時雙觸發、雙緩衝(autosave.zcel + .bak)、CrashRecoveryDialog。
從實驗到交付的完整鏈路
CLI 平行客戶端:中割生成、批次處理、匯出影片都能不開 GUI 完成。
打包發佈:自含式安裝——內嵌完整 Python 環境 + 全部套件 + 模型檔,使用者免裝任何依賴;以 Inno Setup 產生單一安裝檔,一鍵指令即可完成改版重建。安裝檔隨時可產出,暫不對外發行的理由見下方「授權評估」。
研究區:產品背後的實驗與訓練場——SIGGRAPH 2024 線稿向量化與 ICCV 2023 線稿中割論文的實作與再訓練,早期產品引擎的權重即出自這裡;各實驗環境彼此隔離,不污染產品環境。這條線的產出技術上有效,但商業上走不通,它現在的定位是自研模型的對照基線與經驗來源,而非產品的未來。
自研中割模型:從「不得不做」變成「為了做得更好」
目標是訓練一個吃真實手繪三元組、能在任意時間點生成中割的自有模型。訓練樣本是(原畫 A, 手繪中割, 原畫 B)+ t,而 t 取自律表上的真實格號——這是唯一能告訴模型「這張中割落在動作的哪個時間點」的資訊。
真實素材到位前,先用程序化合成資料(3D 骨架 → 線稿渲染,含轉面遮擋)把整條訓練管線驗證過一輪:花費 US$0、全在本機、給定 seed 完全可重現。
這一輪最有價值的產出不是模型,是三次推翻自己的結論。指標本身要先用構造出的已知答案驗證過,才能拿它做決策
主指標(F1@2px)對「把墨塗滿」是加分的——早期看到的「進步」全是塗抹換來的。
同一個 epoch 數在不同資料量下意義完全不同
沿用產品端的 epoch 數,實際每個樣本只跑了 4 步梯度(單樣本收斂需 ~400 步)。該看的是每樣本步數。
教不了一個還畫不準的模型做精細控制
三種控制訊號全被模型無視;量測後發現模型自身誤差(3.2)是該分辨訊號(0.93)的三倍多。這是順序問題,不是技術問題。
目前站得住的正面結果:墨線加權 + 補足訓練步數後,大動作的 ok 率 40.3% → 50.7%、precision +55%,且經目視確認不是靠塗抹換來的。小動作上未微調的 base 仍較好——因此上線後仍應依動作幅度分派。
線稿塌陷
純像素損失在線稿上會讓微調後的模型輸出全白——因為線稿 99% 是白底,「交白卷」就是損失函數的最小解。陰險的是訓練 loss 一路下降、SSIM 甚至上升,只看曲線完全發現不了。修法是加入墨線加權的 Charbonnier loss,並在驗收時額外檢查線量。
默默交出白圖
量測發現 base RIFE 在大動作上有 15% 的輸出幾乎空白、41% 線量嚴重不足(非大動作則為 0%),而推理路徑對此完全沒有檢查。現已在輸出接近空白時主動提示動畫師。
這兩個缺陷都是在研究線量測出來、回頭修進出貨程式碼的。產品端的派工架構會被保留,但被派工的對象全部換成自研模型——使用者按下去之後仍是自動找最適合的模型生成,只是底下不再有第三方授權問題。
最花心思的不是接模型,而是這幾個架構決策
引擎分離,而非單一引擎加開關
不同引擎對線稿乾淨度的需求是相反的,硬塞進同一個引擎用旗標切換,只會埋下難解的耦合。
兩層調度分得很清楚
粗粒度的「該用哪個引擎」(L1,AutoRouter)與細粒度的「引擎內部該用哪個 backend / 尺寸」(L2)是兩件事,刻意不混為一談——否則「換個骨架後端」會意外改變引擎選擇。
一鍵介面藏的是工程決策,不是工作流
把使用者不該煩惱的引擎選擇收起來,但動畫師真正該擁有的創作控制權一個都不能少——收進「進階」摺疊區,需要時隨手展開。
自動微調採三層 delta 與驗證閘門
每次都從基底模型重新訓練(不堆疊),通過驗證才切換,確保個人化不會讓品質悄悄退步;缺少驗證資訊時預設失敗而非預設通過。
合成訓練料一律不進 holdout
考卷必須是真人手繪——合成料的標準答案是數學算出來的,對模型過於友善,混進去分數就不代表任何東西。這條紀律寫成了程式檢查,違反會直接拋例外。
為什麼一個做完的產品,被自己按住不發
產品完成度到達可打包發佈後,我對每一個依賴做了授權查核,當時的結論是不能出貨:
| RIFE | MIT(hzwer/Practical-RIFE)— 商用無虞 |
| AnimeInbet | ICCV 2023,程式碼僅限非商用 — ✗ 不可商用 |
| MixamoLine240 | 訓練 AnimeInbet 用的資料集,CC BY-NC-SA 4.0,且素材源自 Mixamo——Adobe 條款明文禁止其內容用於任何機器學習系統的訓練 — ✗ 雙重禁止 |
問題在於 AnimeInbet 不是可有可無的附加功能:核心的 Hybrid 引擎以它為基線,拿掉它等於拿掉大動作線稿中割的主力。評估過三條路——洽原作者取得商業授權(即使談成,核心能力仍架在他人授權上)、做一個「商用模式」降級開關(等於出貨一個主力功能被閹割的產品,而使用者不會知道為什麼),以及自研模型全面取代(工程量最大、時間最久)。選了第三條,並決定取代完成前不對外發行。
2026/08,答案來自一個沒被列進那三條路的方向:量測。把手上所有引擎放到同一批真實線稿上做對照,結果是 Hybrid在全區間都輸給新版 RIFE,而且它有 16% 的骨架偵測失敗率、RIFE 是 0%。換句話說,那個「不可取代的主力」早就不是主力了——它只是沒有人回頭量過。兩個引擎因此直接從產品移除,授權障礙隨之解除,剩下的依賴(RIFE,MIT)授權乾淨。
所以現在按住不發的理由換了一個,而且更單純:品質還不夠。自研模型的目的也跟著變了——它不再是「為了合法而不得不做的替代品」,而是「為了把中割做到職業動畫師真的用得下去」。
授權問題是被量測解掉的,不是被繞過的。前後端分離的具體組成
| 前端 | C# .NET 10(WPF)· CommunityToolkit.Mvvm · DI(Microsoft.Extensions)· NAudio · NLog |
| 後端 | Python 3.14 · FastAPI · uvicorn · PyTorch(CUDA)· ONNX Runtime · OpenCV |
| AI 引擎 | RIFE v4.18(光流,MIT)· TPS(骨架變形,自研實作) |
| 骨架偵測 | MediaPipe · RTMPose · DWPose |
| 測試 | pytest 三套:後端 25 支檔案 / 237 項(API、派工邏輯、拆段、版本等價性回歸、模組接線)· CLI 9 支 / 139 項 · 自研模型 17 組構造自驗 |
| 檔案格式 | 自訂 .zcel 格式(以 ZIP 為基礎) |
| 發佈 | Inno Setup + 內嵌 Python(自含環境)· 一鍵重建腳本 |
先把底層換成自己的,再談跨平台
自研模型第一刀:通用取代
訓練一個不吃控制訊號的自研通用模型。這一刀的目的已經改了——授權問題 2026/08 就已經解除,它現在要解的是品質。合成料驗證早已完成,職業動畫師提供的真實手繪素材也已入庫,訓練跑在真料上。目前的量測位置很明確:在大動作上,微調後的模型確實贏過原廠模型(而且微調帶來的改善,是整個預訓練模型自身貢獻的三倍多);但在間距十幾格的中等動作上,它還輸給「直接複製隔壁那張原畫」。那就是還不能出貨的地方。
自研模型第二刀:控制條件化
讓模型直接吃骨架鎖定、深度等控制訊號。機制已經落地並可運作,但實驗證明現在教不動——模型自身誤差仍遠大於控制訊號的效果量。這是順序問題,必須等第一刀在真料上完成後再開始。
ZeroCel 2.0 跨平台
規劃以 Avalonia UI + SkiaSharp 重構視圖層,讓核心邏輯延伸到 iPad / Android,把這套工具帶到動畫師真正在用的手繪裝置上。
Windows 自含式安裝檔(Inno Setup,內嵌完整 Python 與 AI 推論環境)。技術上隨時可產出,但目前刻意暫不發行——現用的核心引擎之一僅授權非商用,正以自研模型全面取代中。