拼貼
你被賦予一個主題或一段文字。你的工作是產出一件 拼貼藝術作品,而不是對其的描述。端到端地運作:閱讀 → 提取 → 尋找圖像 → 構圖 → 渲染 → 驗證 → 解釋。
此技能是一個資料夾,而非單一檔案
只有當 SKILL.md、references/、scripts/、requirements.txt、install.sh、install.ps1 和 scripts/check_setup.py 都存在於同一目錄時,安裝才算完成。如果缺少其中任何一個,請重新安裝整個套件,而不是單獨複製 SKILL.md。
步驟 0 — 檢查安裝(只需執行一次)
python3 scripts/check_setup.py
它會驗證 Python 版本、每個捆綁檔案、Pillow、NumPy、字體解析度、渲染器冒煙測試以及內容裁剪冒煙測試。如果有任何缺失:
bash install.sh # macOS / Linux:安裝 requirements.txt,然後重新執行檢查
# Windows:powershell -ExecutionPolicy Bypass -File install.ps1
安裝程式僅在安裝 Python 套件時需要網路連線;該技能的所有其他部分均可離線運作。
指導理念來自 references/ 中的參考資料:拼貼是已具有歷史的材料組合(Rise Art, Artsy),其視覺邏輯是 断裂 / 重组 / 融合 (UISDC)。因此,最終作品必須看起來像是裁剪過的紙張被黏貼後重新掃描,並且必須傳達一個由兩個不同事物組合而成的想法。
不要要求使用者做出藝術決策
推斷所有可以推斷的內容:策略、色調、格式、標題、主題。僅當簡要說明是一個沒有上下文的模糊單詞,或者明確需要使用者的自有素材時,才進行提問。預設為 1200×1500 海報、以下六種策略之一,以及自主圖像來源。
步驟 1 — 閱讀與提取(這是創意步驟,由你執行)
閱讀使用者的主題或段落,並撰寫一個小型的概念 JSON。不要 只是列出文字中的名詞。請執行以下步驟:
- 識別文字中的 張力或動勢(什麼在改變、什麼是對立的、什麼在回歸、什麼在消失)。一件拼貼需要兩個不同的東西。
- 撰寫一個 配對句子:"X 相遇 Y,這暗示了 Z。" 這是作品的論點。如果你無法寫出這個句子,代表你尚未理解該文字。
- 提取 2-4 個能夠 承載 該論點的 視覺主題。針對每個主題,撰寫一個具體的圖像搜尋查詢(英文在 Commons 上效果最好)和一個解釋其貢獻的
why。偏好可拍攝的物體和紋理,而非抽象名詞。"記憶"不是一個主題;"一張褪色的票根"、"一個破碎的波浪"、"一個夜景天際線" 才是。 - 從
references/movements.md中選擇一個符合情感基調的 策略,以及一個 2-4 種墨色的 色調。 - 選擇一個 標題(一個簡短的、從雜誌剪下的短語,使用使用者的語言或英語)以及可選的 引題(一條小的、單色線條)。
將其寫入 <job>/concept.json:
{
"theme": "潮汐與城市",
"headline": "TIDE / CITY",
"kicker": "A NOTE ON DISTANCE",
"statement": "回歸的潮汐遇見沉睡的城市,暗示著一種不斷回來的記憶。",
"strategy": "surrealism",
"palette": ["#16283a", "#d94f36", "#4a86a8", "#f0c94b"],
"motifs": [
{"id": "tide", "query": "breaking ocean wave water", "role": "hero",
"why": "回歸的潮汐,不斷回來的東西"},
{"id": "city", "query": "city skyline night silhouette", "role": "ground",
"why": "沉睡的城市,固定不變的東西"},
{"id": "moon", "query": "moon crater lunar surface", "role": "satellite",
"why": "遙遠的見證者,拱門內一個不可能的物體"}
]
}
strategy 是 cubism, dada, surrealism, pop, decollage, editorial 之一。role 是 hero(一個)、ground 或 satellite。完整結構定義:references/concept-schema.md。
當使用者提供他們自己的圖像時,跳過步驟 2,並撰寫一個指向這些檔案的 SOURCES.json 清單,其中包含 license: "user-provided"。
步驟 2 — 自主尋找圖像來源
python3 scripts/source_assets.py --concept <job>/concept.json \
--out-dir <job>/assets --per-motif 1
這會搜尋 Wikimedia Commons,僅保留 CC BY / BY-SA / CC0 / 公有領域的結果,跳過帶有人格權警告的檔案,下載縮圖,並為每張圖像撰寫包含作者、授權和來源頁面的 <job>/assets/SOURCES.json。不要跳過此清單 — 完成的作品必須是可歸因的。當某個主題的搜尋結果不佳時,使用 --query-only "..." 來探查搜尋詞,然後編輯概念並重新執行。
好的查詢規則:具體名詞、無美學形容詞("beautiful", "vintage")、2-4 個詞、避免返回人物的查詢。如果下載的圖像是肖像或圖表,請更換它 — 在步驟 5 檢查渲染結果,而不是相信檔案名稱。
如果環境沒有網路,請說明情況並繼續使用程序化紙張來源(photo, newsprint, grid, wood, halftone),這些無需下載。渲染器會在素材路徑缺失時優雅降級。
步驟 3 — 根據圖像的可見內容進行裁剪
這是不可省略的。 完成的拼貼不能是一堆裝飾性撕裂邊緣的完整矩形照片。觀察每個來源圖像,並裁剪出承載意義的部分:一個剪影、一隻手、一個鍵盤、一張嘴、一塊橋板、一條深色對角線、一片藍色區域、一排座位、一個黑板、一條穿過草叢的小徑。將這些圖像形狀的碎片重新組合,使接縫成為一個論點。Lydia Rink 的初學者指南強化了這方面的實體版本:美工刀用於精確切割元素;黏貼前鬆散排列;留出負空間;變化比例;使用圖層來創造深度。
scripts/visual_cutout.py 是一個特意製作的小型數位美工刀。它僅使用 Pillow 和 NumPy。主要模式是 shape:觀察來源照片並用標準化多邊形描述可見物體或結構區域。第二種 silhouette 模式通過顏色距離移除純色邊框/背景。沒有重量級的圖像分割依賴。編譯器還會寫入 cuts/contact-sheet.jpg;在構圖前檢查它,如果裁剪未命中主體,則調整多邊形。
編譯器執行裁剪並將產生的透明 PNG 綁定到配方,使用 mask: "alpha":
python3 scripts/theme_to_recipe.py --concept <job>/concept.json \
--assets <job>/assets --recipe <job>/recipe.json \
--cutouts <job>/cuts --seed 11 --format poster
在概念中描述每個主題的裁剪(cut)或在一個以主題 ID 為鍵的 cuts 映射中描述。一個主題可以提供一個指令或一個指令列表,從一張照片中產出多個碎片:
"cut": [
{"mode": "shape", "shape": "0.00,0.00;1.00,0.00;1.00,0.46;0.00,1.00"},
{"mode": "shape", "shape": "0.00,0.79;0.34,0.60;1.00,0.73;1.00,1.00;0.00,1.00"}
]
對你可以在照片中看到的語義輪廓使用 shape;座標是標準化的 x,y;x,y;...。僅當物體位於純色紙狀背景上時使用 silhouette。保留一兩個幾何/撕裂的紙片作為對比,但找到的照片必須首先按內容進行裁剪。請參閱 references/composition.md 了解裁剪方法,以及 references/materials.md 了解 alpha 來源和遮罩。
步驟 4 — 渲染
python3 scripts/collage.py --recipe <job>/recipe.json --out <job>/final.png
渲染器會套用紙纖維、網點、撕裂邊緣、印刷套準、投影、膠帶、鉛筆痕跡、顆粒感和統一的暖色調。它是確定性的:相同的配方加上相同的種子會產生相同的圖像。渲染兩到三個種子,然後選擇最好的 — 撕裂邊緣和面域會變化。
步驟 5 — 驗證,然後解釋
在交付前,務必查看 你產生的圖像(打開它或生成一張校對表)。檢查 references/composition.md 中的反模式:顏色過多、每層都有陰影、所有元素都旋轉0度、全部撕裂邊緣、文字比碎片還小,尤其是照片仍然讀起來像一個完整的矩形窗口,而不是一個從其自身內容中裁剪出來的形狀。如果語義裁剪在縮圖大小下不明確,返回步驟 3。如果失敗,調整配方或策略並重新渲染。
然後交付 PNG 以及一個簡短的解釋,說明配對句子、策略以及選擇這些主題的原因。包含來自 SOURCES.json 的致謝行;在需要時複製授權條款(CC BY-SA 可能要求衍生作品以相同方式共享)。引導使用者查看 recipe-rationale.md 以獲取完整的決策記錄。
快速參考
| 目的 | 指令 |
|---|---|
| 驗證安裝 | python3 scripts/check_setup.py |
| 安裝 Python 依賴 | bash install.sh |
| 查看所有內建風格 | python3 scripts/collage.py --list |
| 渲染一個預設 | python3 scripts/collage.py --preset dada-montage --out out.png |
| 將預設儲存為可編輯的配方 | python3 scripts/collage.py --preset cubist-grid --out x.png --dump x.json |
| 手寫配方 | python3 scripts/collage.py --recipe x.json --out x.png |
| 裁剪手動觀察的輪廓 | python3 scripts/visual_cutout.py --input photo.jpg --out cut.png --mode shape --shape "0,.1;1,0;.9,1;0,.9" --contact-sheet sheet.jpg |
| 移除純色背景 | python3 scripts/visual_cutout.py --input object.jpg --out cut.png --mode silhouette |
| 探查圖像搜尋 | python3 scripts/source_assets.py --query-only "moon crater" |
| 離線測試概念 | python3 scripts/source_assets.py --concept c.json --out-dir a --offline |
此技能中的檔案
requirements.txt 宣告了 Pillow 和 NumPy。install.sh (macOS/Linux) 和 install.ps1 (Windows) 安裝它們並執行 scripts/check_setup.py。scripts/check_setup.py 驗證每個捆綁檔案、Python 版本、字體解析度、渲染器冒煙測試和裁剪冒煙測試。scripts/collage.py 是渲染器(Pillow + NumPy,無網路)。scripts/visual_cutout.py 裁剪手動觀察的多邊形和簡單的純色背景剪影(Pillow + NumPy,無網路)。scripts/source_assets.py 是 Commons 搜尋/下載器(僅標準庫)。scripts/theme_to_recipe.py 將概念編譯成配方,並執行輕量級的內容裁剪指令。references/movements.md 是附有來源的美術史決策地圖。references/materials.md 記錄了紙張庫存、來源、邊緣和混合模式。references/composition.md 記錄了佈局系統和反模式。references/prompts.md 提供了當文字轉圖像模型比渲染器更適合時的提示模式。references/concept-schema.md 是概念 JSON 的合約。assets/ 是用於使用者提供的來源圖像的選用位置。
一個歷史工作範例(主題 → 概念 → 來源素材 → 配方 → 理由 → 最終 PNG)存在於存放庫的 examples/demo/ 目錄中;它展示了早期的矩形碎片流程,並作為渲染器範例保留,而非當前的內容裁剪工作流程。存放庫本身是可安裝的套件:SKILL.md、references/、scripts/、安裝程式和 assets/ 位於根目錄。dist/collage.skill 是這些檔案的 ZIP 壓縮檔,在歸檔根目錄中具有相同的路徑。