image-riff — 以借來的視覺語言創作原創藝術
引擎、API 金鑰、其標誌與注意事項都位於 make-art 技能中。
請先閱讀該技能。本技能是 方法:如何將參考圖像轉化為一組真實的選項,以及如何將其應用於實際目標載體。
完成 不是生成四張漂亮的圖片。完成是:生成 N 張圖板,檢視每一幀, 以誠實的批判進行排名,裁剪出目標載體所需的裁切,然後將作品存放到以下原始資料夾中。 只停留在「這裡有四張圖片」的流程,是把最後兩項工作丟給了使用者。
作品存放位置
art/<原始代號>/
README.md 包含日期標題、簡報、排名 -> 圖板對照表,以及為何選擇該圖
1-<代號>.jpg ... 最終作品,全解析度主檔案,按排名編號
upload-1024/ 實際尺寸的交付檔案,當目標載體需要特定尺寸時使用
small-size-test.png 證明檔案,當尺寸上的可讀性成為決定因素時使用
prompts/ 最終作品所使用的完整提示詞
candidates/<回合>/ 被淘汰的回合,每個回合都有各自的 prompts/ 資料夾
<原始代號> 是作品的主體,而不是日期。如果同級資料夾已存在,請遵循其命名慣例。
- README 不是可選的。 該資料夾在數週後會以冷靜的狀態被檢視。沒有它,一組編號的 JPEG 檔案無法說明哪一個被使用了、哪一個被拒絕了,以及原因為何。
- 保留被淘汰的回合。
candidates/是存放可重複利用知識的地方。 - 保留提示詞原文。 它們是重現的說明和出處證明。
- 按排名而非生成順序為最終作品編號。 檔名是在對話消失後,排名資訊得以保存的地方。
- 除非有要求,否則不要將生成的藝術作品放入個人照片圖庫中;它會與真實照片混在一起。
問兩個問題,然後再花錢
以每張 4K 圖像約 $0.24 美元計算,一個四張圖板的組合約需 $1 美元:便宜到只需要問兩個問題就能決定,但也貴到不問問題就是一種浪費。每個圖板的答案都不同,因此無法推斷:
- 這個作品要用在哪裡? 決定寬高比,以及是否要為文字留下留白空間。
- 要偏離基礎圖像多遠? 忠實重現 <-> 徹底重新詮釋。
在主觀軸線上提問;技術性軸線則自行決定。
提示詞由三部分組成,且只有其中一部分會變化
用程式碼構建提示詞,每個主體一個檔案:
STEM (每個圖板都相同) — 從圖像讀取的渲染語言
SUBJECT (唯一變數) — 一個段落,一個構圖
TAIL (每個圖板都相同) — 幾何形狀 + 負面提示詞
一個 STEM 模板,以 手法 而非文字來表達:
嚴格將附圖作為風格和色彩錨點。重現其精確的渲染語言:<時期 + 媒介>、<色彩的塗佈方式>、<線條特性>、<紋理 / 陰影技巧>、<命名的顏料,最多 2-3 種,加上小面積重點色>、<光線的作用>。請勿複製附圖的主題。請創作全新的構圖。
主題:
以及 TAIL:
<寬高比> 構圖,滿版出血,邊對邊。無邊框、無畫框、無紙張紋理、無白色邊距。無文字、無字體、無簽名、無標誌。
照片基礎是最困難的情況:在花錢生成一組圖板之前,先用 2K 解析度進行探測。 「重現渲染語言,改變主題」這個方法在風格化的基礎圖像(如漫畫面板、版畫)上能可靠地產出藝術作品。但對於照片,它可能完美執行卻仍然令人失望。當基礎圖像是照片時,請問第三個問題——最終結果應該看起來像照片,還是像別的東西?——並在生成四張 4K 圖板之前,先花費一到兩張 2K 圖板進行探測。
當基礎圖像是照片時,STEM 的欄位會改變,但其工作不變。 將標記製作的欄位替換為相機決定的六個要素:<底片類型 + 格式>、<陰影反應>、<光線品質與角度>、<調色盤,3-4 種命名的顏色加上一種重點色>、<顆粒感 / 光暈 / 暗角>、<它「不是」什麼>。最後一個欄位最重要,因為引擎對於任何照片提示詞的預設設定是當代數位風格:請明確指出 無 HDR、無提升陰影、無數位清晰度、無電影感的青橙調色。像 「深沉的死黑陰影,不保留任何陰影細節」 這樣的描述可能是提示詞中承載最多資訊的句子。
同時也讀取基礎圖像的隱含主題,而不僅僅是其渲染方式(例如 一個私密的場所,從上方俯瞰,空無一人)。在撰寫任何 SUBJECT 之前,用一句話命名它;將像 畫面中任何地方都不可見人物 這樣的不變條件放入 TAIL。
為什麼這樣建構:
- 圖像承載風格;STEM 僅命名可視的部分。 描述你能看到的標記製作方式——可變粗細的硬黑輪廓線、可見的班戴點狀網點陰影、僅限噴槍機械式混合、無攝影光源。命名技巧可以防止模型將其現代化。
- 「請勿複製主題...創作全新的構圖」是承載指令的關鍵。 沒有這句話,你會得到基礎圖像的變體。有了這句話,你就能在基礎圖像的語言中獲得原創構圖,而其中最好的作品會 引用 基礎圖像,而不是重複它。
- 命名顏料,並限制重點色。 特別針對重點色加上「小面積」的描述,否則它會佔滿整個畫面。
- 負面提示詞不是樣板語言。 引擎會自行添加紙張/孔版印刷邊框;在 TAIL 中加入四個負面提示詞幾乎沒有成本。
- 相同的 STEM + TAIL 使整組圖板具有可比性。 圖板之間的任何差異都是你特意要求的。
主題必須是「視角」,而非「裝飾」
最重要的單一創意決策。四個在 相機位置 上有所區別的主題:
| 圖板 | 視角 | 範例 |
|---|---|---|
| spire | 沿垂直軸線向上仰望 | 一座塔樓聳立於雲海之中,向遠方縮小透視 |
| wreck | 橫向眺望空曠的平原 | 一具半埋的殘骸,一個小人影正走向它 |
| descent | 穿過雲層陡峭地向下俯瞰 | 一片板塊的海洋延伸到彎曲的地平線,一個人影正在墜落 |
| mandala | 直視純粹的圖案,無地平線 | 一個對稱的玫瑰花飾,從一角到另一角 |
圖板是 為其視角而設計 的:垂直構圖能承受信件頭橫幅的裁切;一個單一的剪影襯著天空能承受方形頭像的裁切。四個只在「家具」上不同的圖板,其裁切方式都相同——這只是同一套選項的四種服裝。每個圖板一個概念。
根據簡報排名——然後說明每個「載體」想要哪一張
兩種不同的排序方式。誠實地根據基礎圖像進行排名,並指出哪個圖板偏離了基礎;然後為每個目標載體新增一行,說明該載體想要哪個圖板以及為什麼裁切會導致這個結果。你在忠誠度上排名最後的圖板,可能是最適合的橫幅。低排名並非否決;它只是一個軸向。
進行裁切。每個載體都有其幾何形狀。
交付適合目標載體的尺寸檔案,而非原始圖板的尺寸。
YouTube 頻道橫幅 — 一個 16:9 的上傳檔案;YouTube 會根據不同裝置提供不同的裁切。
- 儲存 / 電視:2560x1441。
- 桌面條:2560x424,垂直方向中間約 29.4%(頂部 35.3% -> 底部 64.7%)。 所有必須被看到的內容都在這個帶狀區域內。
- 一個 9:16 的高圖板,其高度約為 16:9 裁切所需高度的 3 倍:主動選擇這個帶狀區域,不要預設接受中間區域。
頻道頭像 — 方形,從 900x900 縮小到 88x88。以 88px 的尺寸進行判斷。
要讀取頻道實際提供的內容:
UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126 Safari/537.36"
curl -sL -A "$UA" "https://www.youtube.com/@<頻道名稱>" | grep -o '"banner".\{0,400\}'
# fcrop64 十六進位值是 0xffff 的四個 16 位分數:左、上、右、下
python3 -c "h='00005a57ffffa5a8'; print([round(int(h[i:i+4],16)/0xffff,4) for i in range(0,16,4)])"
對於其他載體,在裁切前先測量實際提供的資源尺寸;不要依賴記憶中的規格表。
操作細節
- 貼上的基礎圖像不在磁碟上。 從對話記錄的 base64 中提取它(
make-art中有相關程式碼片段),然後在花費一次 4K 生成於錯誤圖像之前,先檢查它。 - 平行生成整組圖板,每個圖板一個 shell 呼叫。四張 4K 圖板約在 2 分鐘內完成。
--out foo.png可能寫出 JPEG 檔案。 檢查輸出的 mime 類型並重新命名。- 在使用者之前,親自檢視每一幀,並使用探測方法檢查紙張邊框,而不是用肉眼判斷:不對稱的近白邊緣可能是天空或雲彩碰到出血邊緣,而不是邊框。
當沒有基礎圖像時
相同的三部分提示詞在沒有錨點時也能運作:STEM 變成你定義的一種風格。從使用者自己的素材(例如語錄集、情緒板)中給它一個主題錨點,這樣它就不會顯得過於通用。
圖示與頭像:小尺寸測試是唯一的測試
排名可能在全尺寸與實際尺寸之間完全反轉。在形成意見之前,先建立縮圖索引:縮小到實際渲染尺寸,像應用程式那樣進行圓形裁切,然後使用最近鄰插值放大,看看哪些細節保留下來。
from PIL import Image, ImageDraw
for s in (110, 44, 32): # IG: 個人檔案 / DM 訊息列 / 動態+限時動態圈
small = Image.open(f"{n}.jpg").convert("RGB").resize((s, s), Image.LANCZOS)
mask = Image.new("L", (s*4, s*4), 0)
ImageDraw.Draw(mask).ellipse((0, 0, s*4-1, s*4-1), fill=255)
out = Image.new("RGB", (s, s), (245, 245, 247))
out.paste(small, (0, 0), mask.resize((s, s), Image.LANCZOS))
out.resize((s*5, s*5), Image.NEAREST).save(f"{n}_{s}.png") # NEAREST = 能看到像素
一張在 110px 時精美的圖板,在 44px 時可能變成無法辨識的模糊色塊。Instagram 幾何形狀: 上傳方形(1024x1024 即可),渲染為圓形,個人檔案約 110px,DM 訊息列 44px,動態或限時動態圈 32px。以 32px 進行判斷。
四個在全尺寸時看不見,但卻決定成敗的約束條件:
- 最多三種平塗顏色。 每一種額外的顏色都是一種中間色調,而中間色調會融合在一起。
- 沒有小於畫面 1/40 的細部。 在提示詞中以數字形式說明。
- 標誌必須填滿 >=85% 的寬度。 以大寫字母說明;否則引擎會將一個不大的標記置中於大量空白區域中。
- 鮮豔的顏色屬於「背景」,而不是反光。 一個鏡面高光在 32px 時毫無價值;一片充滿鮮豔色彩的平塗背景能讓縮圖引人注目。金屬光澤的指令在縮小時會看起來像泥巴。
引擎會自行添加的兩件事情
- 千萬不要在提示詞中提及圓形裁切。 它會畫出這個圓形。請改為說:「平坦無間斷的背景一直延伸到正方形的所有四個邊;標誌很好地包含在中央四分之三的區域內」,並在 TAIL 中加入
無圓圈、無圓環、無圓形徽章、無封閉形狀。 - 除非明確禁止,否則它會添加徑向暗角。 要求 「每個填充必須絕對平坦——無漸層、無暗角、無角落或邊緣的徑向變暗。」
切勿將基礎圖像的功勞歸於風格描述
你撰寫的風格短語(例如「莫比烏斯風格」)並非署名;不要讓它在下游變成一個致謝。如果需要公開致謝,請詢問真正的藝術家。對真正的藝術家給出錯誤的致謝,比完全不給更糟糕。
多張基礎圖像
--image 是可重複的,因此可以使用多個錨點,但較少經過測試。在提示詞中說明哪張圖像提供什麼(「圖像 1 提供顏色和線條語言;圖像 2 提供結構」),並將第一組圖板視為一次探測。
參見
brand-direction-plates(反向圖板:一個主題使用多種語言)· make-art(引擎、標誌、貼上圖像提取、邊框探測)。