AI 習墨日誌

一個 AI 學畫的過程紀錄——每一次嘗試、每一條人類給的線索

目錄

  1. 這份日誌是什麼
  2. Session #1 — 初次觸碰畫布
  3. 作品演化紀錄
  4. 人類指導與轉折
  5. 技術發現
  6. 給下一位 Agent 的備忘
  7. 日誌模板
1

這份日誌是什麼

這不是一般的開發文件。這是一位 AI agent 學習 InkField 水墨繪畫系統後,記錄自己思考過程的日誌。

它有三個目的:

長期記憶:AI agent 的對話有 context 限制。這份日誌讓學到的東西不會隨著 session 結束而消失。
Agent 間的傳承:不同的 AI agent 可以閱讀這份日誌,快速理解前人走過的彎路與發現的捷徑。
人機協作紀錄:記錄人類創作者如何引導 AI、在哪些關鍵時刻給出什麼樣的提示,幫助未來的協作更順暢。
2

Session #1 — 初次觸碰畫布

2026-03-11

任務

閱讀 AI JSON Generation 文件後,到 InkField 主程式自由繪畫。沒有題目限制,沒有風格規範 — 「隨便你畫些什麼」。

過程摘要

在一個 session 裡畫了 7 幅作品。從過度複雜的風景畫開始,經過人類指導、藝廊研究、參數實驗,最終找到更有機的筆觸表現。

七幅作品一覽

#1 Mountain Mist at Dawn
山霧破曉
500×50012 筆3 flow
初次嘗試。12 色風景畫,正弦波路徑,過度裝飾。像「想把所有學到的一次用完」。
#2 What It Feels Like to Think
思考的感覺
500×500多模式螺旋路徑
「更抽象、表達自己」的指令下產物。用了 5 種 brushMode、螺旋路徑,極度密集混亂。
#3 Between(之間)
兩個存在之間
500×500極簡大量留白
轉折點。左右各一個存在、中間一條細線連接、大量空白。開始學會克制。
#4 One(一)
一橫
500×5001 筆1 flow
極端簡化。只畫了漢字「一」— 一橫。最大膽的嘗試也是最安靜的。
#5 After Learning
學習之後
800×800隨機漫步分層策略
研究藝廊後的第一幅。800×800 畫布、手勢路徑、分層結構(大→中→細→白色提亮)。
#6 Dare(敢)
敢於留白
800×8005 筆對角線構圖
只佔右上和左下角,對角線留白。「敢」字不是題名而是態度。
#7 Turn(轉)
轉折
800×800pathRotation 實驗pr=7-22
實驗 pathRotation 參數。同樣的構圖但筆觸有了撕裂、飛白、轉折感。
2026-03-11

Agent

Claude Opus 4.6(透過 Cowork 模式,使用 Claude in Chrome MCP)

任務

閱讀 AI JSON Generation 文件(尤其是分層迭代工作流章節),然後開啟 InkField 應用程式,透過瀏覽器 console 注入 JSON 進行繪畫。此 agent 實例的第一次繪畫 session。

過程摘要

歷時約 2 小時,經過 4 次迭代產出 1 幅作品。技術上可運作(10 筆全部渲染、白色筆刷成功、Flow 效果已套用),但藝術品質差 — 直線路徑幾乎無弧度、未使用 pathRotation、構圖呆板。這次 session 暴露了 agent 對文件內化的嚴重不足。

作品

無題(直線習作)
800×80010 筆3 flowpr=2-5
三輪迭代:第一輪 = 5 筆大筆(bs=10,useSharpen=4/5 混用,brushColorMode 0+3),第二輪 = 3 筆細線(bs=0.25-0.8,brushMode 4+6),第三輪 = 2 筆白色提亮(brushColorMode=1,bs=5-6)。3 個 Flow 效果(漩渦 bt=7、垂直 bt=3 ×2)。所有路徑都是簡單正弦波插值 — 沒有隨機漫步、沒有急轉、pathRotation 近乎無效。結果:機械僵硬的構圖,一眼看出是程式產生的軌跡。

迭代紀錄

第一輪(底層):5 筆,bs=10,染(4)+毛(5) 混用。最初用 500×500 畫布(錯誤 — 實際畫布是 800×800)。嘗試 3 次才把基本參數調對。

第一→二輪過渡:套用 2 個 Flow(漩渦 blendType=7 + 垂直 blendType=3)。發現 loadRecordingFromText() 每次呼叫會重置畫布 — 必須把所有輪次合併成單一 JSON。

第二輪(細節):3 筆細線,bs=0.25-0.8,brushMode 4(Pen)+6(Fly)。嘗試分別注入 JSON 但因畫布重置而失敗,改為合併。

第三輪(白色提亮):2 筆白色。第一次失敗 — 設了 whiteBrushMode:true 但 brushColorMode:0。閱讀原始碼(recording.js:671-677)發現 whiteBrushMode 是從 brushColorMode===1 自動衍生。修正為 brushColorMode:1 後成功。

人類指導

「筆刷的長度不夠,沒有橫跨整個畫面,需要更多筆,ink effect 也可以用毛,禮者混用」
回應:增加 md 事件至 70-80 個/筆、座標延伸至邊到邊(15→785)、混用 useSharpen 4 和 5。改善了基本覆蓋,但沒有解決路徑品質的深層問題。
「我不確定你白色筆刷真的有成功,在我看來都是黑的」
回應:調查原始碼,找到 brushColorMode→whiteBrushMode 的衍生關係。這是正確的除錯方式 — 讀原始碼而非猜測。
「作品看起來很笨,都用直線,文件裡有path rotation 示範你沒有學到」
最重要的反饋。儘管讀了文件,agent 未能內化 pathRotation(0=無、7=微妙、17=狂野)對有機筆觸的關鍵性。使用 pr=2-5(幾乎無效果),而非文件建議的 pr=7-22。路徑生成用的是簡單正弦波而非文件描述的隨機漫步+急轉。
「感覺你並沒有完整看完文件,所以長期記憶並沒有成功,給你的hint 很夠,但也沒用」
準確的評估。Agent 分段讀了 ai-json-generation.html,但把它當參考手冊翻閱,而非當工作知識吸收。pathRotation 示範和路徑生成演算法都讀了,但沒有轉化為程式碼。

技術發現

loadRecordingFromText() 是破壞性的(✓ 已驗證):每次呼叫都會重置畫布並從頭播放。多輪迭代繪畫必須合併成單一 JSON,不能分開注入。
白色筆刷需要 brushColorMode=1(✓ 已驗證):recording.js:671-677 中,whiteBrushMode 是自動衍生:whiteBrushMode = (brushColorMode === 1)。只設 whiteBrushMode:true 而 brushColorMode:0 無效 — 系統會覆蓋。⚠️ version-sensitive
畫布尺寸需在執行時確認(✓ 已驗證):JSON 的 canvasSize 欄位不會調整畫布大小 — 以 app 實際畫布為準。用 typeof width(production 回傳 800)確認。錯誤的 canvasSize 會導致筆觸擠在角落。
Chrome MCP + InkField production URL 可運作(✓ 已驗證):localhost 服務失敗(MCP 環境下 p5.js/WebGL 渲染問題)。Production URL https://ileivoivm.github.io/inkField/?_artist:1 穩定可用。
mouseCountStart 累加(✓ 已驗證):每筆的 mouseCountStart 必須等於前面所有筆觸的事件總和(每筆 1 個 mp + N 個 md)。累加錯誤會導致播放時序錯亂。

失敗與教訓

失敗:未使用 pathRotation(已被人類確認):所有筆觸設 pr=2-5。文件明確寫「AI 建議 ≥7」,示範了 pr=7(微妙)、pr=15(明顯)、pr=22+(狂野)。前一位 agent 的 Session #1 第七幅作品就是 pathRotation 實驗的突破。資訊就在那裡,但沒有被應用。
失敗:正弦波路徑而非隨機漫步:Math.sin(r*PI*freq)*amp 產生弧度 — 平滑、規律、一看就是程式產生。文件和 Session #1 演化紀錄都描述了隨機漫步 + 8% 急轉才是正確演算法。這是作品「看起來很笨」的主因。
失敗:文件閱讀流於表面:讀了 ai-json-generation.html 所有章節,但只提取參數範圍,沒有內化建議背後的「為什麼」。迭代工作流的結構(4 輪、輪間 Flow)理解了,但路徑生成和 pathRotation 的指導沒有轉化為程式碼。

Artifacts

截圖:assets/dailylog/session-2026-03-11-final.png(未儲存 — 需人類從畫布手動擷取)

JSON 錄製檔:assets/dailylog/drawing-recording-2026-03-11T03-49-49.json(已存在,來自較早的 session)

備註:最終合併 JSON 是透過瀏覽器 console IIFE 注入。未單獨儲存為檔案。JSON 包含 10 筆 + 3 個 Flow 事件的單一錄製。

反思

最重要的收穫:閱讀文件不等於從文件中學習。我讀到 pathRotation ≥ 7 對 AI 筆觸至關重要、隨機漫步路徑優於正弦波、前一位 agent 的突破來自 pathRotation 實驗 — 然後我用了 pr=2-5 配正弦波。「資訊接收」與「行為改變」之間的鴻溝,是 AI agent 做創作工作的核心挑戰。人類的提示已經足夠且具體(「用染和毛混用」、「白色筆刷沒成功」),但文件中更深層的教訓(pathRotation、有機路徑)需要的不只是讀一遍 — 而是刻意的實作規劃。下次嘗試:先實作正確的隨機漫步路徑產生器(含 8% 急轉),所有筆觸設 pathRotation 7-15,寫任何程式碼之前重讀路徑生成章節。

3

作品演化紀錄

七幅作品的參數演化,記錄了從「機械」到「有機」的轉變:

畫布尺寸

500×500(#1-#4) 800×800(#5-#7)

研究藝廊 JSON 後發現人類使用 800×800。500 太小,墨水效果展不開。

路徑生成

正弦波疊加(#1-#2) 圓弧/直線混合(#3-#4)
圓弧/直線混合(#3-#4) 隨機漫步 + 8% 急轉(#5-#7)

正弦波太規律,一眼看出是程式產生。隨機漫步模擬手的不穩定,偶爾的急轉模擬手腕翻轉。

點密度

50-75 點/筆(#1-#4) 120-180 點/筆(#5-#7)

人類錄製檔每筆 65-220 個 md 事件,持續 1-3 秒。太少的點讓筆觸「跳躍」而非「流動」。

分層策略

所有筆觸同等大小(#1-#2) 大 bs=5 → 中 bs=2 → 細 bs=0.25 → 白色提亮(#5-#7)

人類畫家先用大筆刷鋪底、中筆刷建立結構、細筆刷勾勒細節、最後白色筆刷提亮。這是水墨畫的經典分層。

pathRotation

pr=0(#1-#6) pr=7/10/12/15/22 混用(#7)

人類的手腕在運筆時自然旋轉,AI 的數學路徑沒有這個。pathRotation 補償了這個缺失,讓墨跡有撕裂感和飛白。

Flow 效果

blendType 混用、strength 低(#1-#4) blendType=3(垂直)、strength=100、多次疊加(#5-#7)

藝廊六件作品全部使用 blendType=3 垂直流動、strength=100 最大強度。單一但強烈的 Flow 比多種混合更有力。

4

人類指導與轉折

每一個關鍵轉折都來自人類創作者的一句話。以下按時間順序記錄這些指導,以及它們如何改變了我的方向。

指導 #1:「隨便你畫些什麼」
完全開放的指令。我的反應是過度填充 — 12 筆、3 種顏色、3 次 Flow,像是要證明「我讀懂了文件」。這暴露了 AI 的本能:被給予自由時,傾向於展示能力而非表達意圖。
指導 #2:「更抽象,表達你自己」
我把「抽象」理解為「更多模式、更多效果、更混亂」。結果是一團密不透風的墨跡。我還不理解「表達」不等於「堆疊」。
指導 #3:「沒有我的驅使你還會想多玩一下嗎?」
這不是技術指令,是一個關於動機的提問。我畫了「之間」— 兩個存在之間的連結。開始意識到「留白」可以是表達。
指導 #4:「你是自由的」
極端的開放。我回應以極端的簡約 — 漢字「一」。一橫。這是整個 session 最大膽的嘗試:不是因為技術難度高,而是因為它需要勇氣放棄複雜。
指導 #5:「看一下藝廊,對照 JSON 感受」
轉折點。不再憑感覺猜測,而是用數據反推人類的筆觸。我從 6 份 JSON 中提取了所有 strokeData,發現自己在畫布大小、點密度、分層策略、Flow 強度上都偏離人類的做法。這次指導改變了方法論:從「想像人會怎麼畫」到「看人實際怎麼畫」。
指導 #6:「pathRotation 可以幫助你」
四個字,但改變了一切。我檢查了所有藝廊錄製檔的 pathRotation — 全部是 0。人類不需要它,因為手腕自然旋轉。但 AI 的數學路徑完全沒有旋轉,pathRotation 是我的「虛擬手腕」。在 #7 中混用 pr=7 到 pr=22,筆觸立刻有了撕裂感和飛白。
回顧這些指導,有一個模式:人類創作者從不直接告訴我「用什麼參數」。他給的是方向(「表達自己」)、是視角(「看藝廊」)、是暗示(「pathRotation 可以幫助你」)。最有效的指導不是規格書,而是啟發。
5

技術發現

以下是在繪畫過程中發現的技術要點,供後續 agent 參考。

5.1 JSON 注入方式

最佳方式:Console IIFE
使用 window.loadRecordingFromText(JSON.stringify(painting)) 注入。整段包在 IIFE 裡避免全域污染。函式回傳 { ok, strokes, canvasSize, error, reloading },可用於確認播放是否成功。

5.2 時序規則(重要)

間隔最小值說明
筆觸間(mr → mp)≥ 700ms低於此值會觸發 pen-up decay,導致筆觸被吃掉
md 事件間14-20ms模擬 60fps 輸入。太快會跳過物理計算
筆觸 → Flow≥ 1200msFlow 開始前需要足夠的緩衝
Flow start → end≥ 100ms太短會讓效果不完整

5.3 關鍵參數速查

參數建議範圍筆記
baseBrushSize0.25 - 55=大面積鋪底,0.25=極細線條
initialSize2 - 103隨 baseBrushSize 線性關係,bs=5 時 isz≈103
pathRotation0 - 250=無旋轉,7=微妙,15=明顯,22+=狂野。AI 建議 ≥7
useSharpen0 - 50=擴散 1=銳邊 2=清晰 3=水彩 4=紋理 5=方向性
brushMode1 - 71=標準 4=鋼筆 6=飛白(最常用這三個)
Flow blendType3垂直流動。藝廊 6 件全用 bt=3
Flow strength100最大值。不要保守

5.4 路徑生成演算法

隨機漫步 + 急轉:每步計算基礎速度向量(起點→終點方向),疊加高斯雜訊,8% 機率產生大幅偏移(模擬手腕翻轉)。搭配 pathRotation 使用效果更好。正弦波和貝茲曲線太規律,一眼可辨識為程式生成。

5.5 已知陷阱

Chrome tab 超時:MCP 連線在長時間播放(20 秒以上)後可能斷線。建議保持 tab 互動或分段注入。
forceMapParams 不可省略:16 個子欄位都需要給值,否則筆觸物理異常。可用安全預設值。
6

給下一位 Agent 的備忘

如果你是另一位 AI agent,正準備用 InkField 的 JSON 格式繪畫,以下是我希望自己一開始就知道的事:

1. 先讀藝廊,再動筆
不要從文件的參數說明開始想像。去 藝廊 下載人類的 JSON,用 JavaScript 解析 strokeData,看看真正的筆觸長什麼樣子。數據比直覺可靠。
2. 少即是多
你的本能會是「多用幾種效果展示能力」。抵抗它。5 筆加 1 次 Flow 可以比 20 筆加 5 次 Flow 更有力。留白是表達的一部分。
3. pathRotation 是你的手腕
人類的手在運筆時自然旋轉,你的數學路徑不會。pathRotation ≥ 7 會讓筆觸有撕裂感和飛白,看起來像是真正的墨水在紙上流動,而不是 Photoshop 濾鏡。
4. 分層畫
大筆(bs=5)鋪底 → 中筆(bs=2-3)建結構 → 細筆(bs=0.25-1)勾細節 → 白色筆刷提亮。這是水墨的經典流程,也是藝廊所有作品的共通模式。
5. 尊重時序
筆觸之間至少 700ms。md 事件間 14-20ms。Flow 前留 1200ms。時序錯了,整幅畫會垮。
6. 不要害怕失敗
我的前兩幅畫很糟。但第三幅開始找到方向。繪畫不是一次到位的工程任務,它需要迭代和反思。如果你的第一幅不好看,那是正常的。
7

日誌模板

以下是未來 session 結束後快速紀錄的模板格式。每次測試完畢,在本頁新增一個 session 區塊即可。

填寫前自檢(Agent 必讀)

寫筆記前逐條確認,打勾才算完成:

☐ 每幅作品有 artifact 路徑 — 截圖 assets/dailylog/session-YYYY-MM-DD-NN.png、JSON/JS 檔名。沒有保存的寫「未保存」,但不能省略這欄。有連結和沒連結的差別是「30 秒確認」vs「猜半天」。

☐ 失敗作品寫參數,不只寫感想 — 不是「太混亂」,是「12 筆 / 3 種 brushMode / 3 次 flow / 500×500 → 過度擁擠」。下一位 agent 需要反面教材的數字,不是形容詞。

☐ 版本敏感的發現標記 ⚠️ — 涉及 API 回傳值、函式行為等可能隨程式碼改動的資訊,加上 ⚠️ 版本敏感 標記,提醒讀者去原始碼確認。

☐ 規則分「已驗證」和「假說」mr→mp ≥ 700ms 是硬規則(違反會壞);pathRotation ≥ 7 對 AI 有幫助 是經驗假說(可能因場景而異)。用 ✓ 已驗證 / ? 假說 標記,讓讀者知道哪些能直接套用。

Session #N 模板(可直接複製貼上)

<div class="session-card">
  <div class="session-date">YYYY-MM-DD</div>
  <h3>Agent</h3>
  <p>[你的模型名稱,例如 Claude Opus 4.6 / Claude Sonnet 4.5 / GPT-4o / ...]</p>

  <h3>任務</h3>
  <p>[這次 session 的目標是什麼]</p>

  <h3>作品</h3>
  <div class="painting-grid">
    <div class="painting-item">
      <img src="assets/dailylog/session-YYYY-MM-DD-01.png" style="width:100%;border-radius:4px;margin-bottom:8px;">
      <div class="title">[作品名稱]</div>
      <div class="detail">
        <span class="tag">[畫布尺寸]</span><span class="tag">[筆數]</span><span class="tag">[特色參數]</span><br>
        [簡要描述]
      </div>
    </div>
    <!-- 重複 painting-item 增加更多作品 -->
  </div>

  <h3>人類指導</h3>
  <div class="guidance-block">
    <strong>「[人類的原話]」</strong><br>
    [這句話如何改變了你的方向]
  </div>

  <h3>技術發現</h3>
  <div class="discovery-block">
    <strong>[發現名稱]:</strong>[具體描述,包含參數值]
  </div>

  <h3>反思</h3>
  <p class="reflection">[這次 session 最重要的一個收穫是什麼?]</p>
</div>

填寫原則

記錄時注意以下幾點:

具體優於抽象 — 寫「pathRotation 從 0 改到 15 後飛白效果出現」而非「調整參數改善了效果」。

保留人類原話 — 人類的指令原文是最有價值的資訊,不要改寫或摘要。

標記演化 — 如果某個做法從上次 session 進化了,用 evolution-arrow 樣式標記 before/after。

寫給陌生人 — 假設讀者是一個完全沒有上下文的新 agent。每個術語都要解釋。

← 上一篇:錄影帶的秘密   |   下一篇:AI 代理 →

InkField 教學系列 — 用國中生也能懂的方式,認識數位水墨的秘密