Community影像github.com

2016judea/image-riff

將一張或多張參考圖像轉化為具有該參考圖像自身視覺語言的原創藝術作品,並將其裁剪至目標載體。

image-riff 是什麼?

這個「image-riff」技能是一個結構化的方法論,用於將參考圖像轉化為一系列原創藝術作品,這些作品借鑑了參考圖像的視覺語言,但創作了全新的主題。它主要設計用於像 Claude Code 或 Cursor 這樣的 AI 代理平台,其底層執行引擎是配套的「make-art」技能。該技能強調了一個完整的交付流程:不僅要生成圖像,還要進行批判性評估、根據排名整理最終作品、為目標載體精確裁剪(例如 YouTube 橫幅或 Instagram 頭像),並維護一個帶有詳細說明和提示詞的完整項目文件夾。對於風格化的參考(如漫畫或版畫)效果最佳,而對於照片參考則需要更謹慎的處理,包括一個專門的 STEM 提示詞模板來描述攝影參數。核心方法圍繞一個三部分的提示詞構建:一個固定的「STEM」部分(描述渲染語言)、一個可變的「SUBJECT」部分(定義視角和構圖),以及一個固定的「TAIL」部分(指定幾何形狀和負面提示詞)。對於頭像這類小尺寸應用,它還提供了一個獨特的「小尺寸測試」,因為全尺寸下的排名可能會完全反轉。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/2016judea/brick-mortar-skills/tree/HEAD/skills/image-riff

Installed? Explore more 影像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

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 美元:便宜到只需要問兩個問題就能決定,但也貴到不問問題就是一種浪費。每個圖板的答案都不同,因此無法推斷:

  1. 這個作品要用在哪裡? 決定寬高比,以及是否要為文字留下留白空間。
  2. 要偏離基礎圖像多遠? 忠實重現 <-> 徹底重新詮釋。

在主觀軸線上提問;技術性軸線則自行決定。

提示詞由三部分組成,且只有其中一部分會變化

用程式碼構建提示詞,每個主體一個檔案:

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. 最多三種平塗顏色。 每一種額外的顏色都是一種中間色調,而中間色調會融合在一起。
  2. 沒有小於畫面 1/40 的細部。 在提示詞中以數字形式說明。
  3. 標誌必須填滿 >=85% 的寬度。 以大寫字母說明;否則引擎會將一個不大的標記置中於大量空白區域中。
  4. 鮮豔的顏色屬於「背景」,而不是反光。 一個鏡面高光在 32px 時毫無價值;一片充滿鮮豔色彩的平塗背景能讓縮圖引人注目。金屬光澤的指令在縮小時會看起來像泥巴。

引擎會自行添加的兩件事情

  • 千萬不要在提示詞中提及圓形裁切。 它會畫出這個圓形。請改為說:「平坦無間斷的背景一直延伸到正方形的所有四個邊;標誌很好地包含在中央四分之三的區域內」,並在 TAIL 中加入 無圓圈、無圓環、無圓形徽章、無封閉形狀。
  • 除非明確禁止,否則它會添加徑向暗角。 要求 「每個填充必須絕對平坦——無漸層、無暗角、無角落或邊緣的徑向變暗。」

切勿將基礎圖像的功勞歸於風格描述

你撰寫的風格短語(例如「莫比烏斯風格」)並非署名;不要讓它在下游變成一個致謝。如果需要公開致謝,請詢問真正的藝術家。對真正的藝術家給出錯誤的致謝,比完全不給更糟糕。

多張基礎圖像

--image 是可重複的,因此可以使用多個錨點,但較少經過測試。在提示詞中說明哪張圖像提供什麼(「圖像 1 提供顏色和線條語言;圖像 2 提供結構」),並將第一組圖板視為一次探測。

參見

brand-direction-plates(反向圖板:一個主題使用多種語言)· make-art(引擎、標誌、貼上圖像提取、邊框探測)。

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

2016judea/ascii-charts

Build charts as plain Unicode-block text — bar, range, bullet, gap-bracket, star-histogram, heatmap, line, Venn, pie, donut and scatter — with a dependency-free Python script, for anywhere only monospace text survives (newsletter code blocks, Markdown, terminals, plain-text email, chat). Use when a chart has to embed as literal text instead of an image or a third-party chart service, or when you want a hand-made terminal look with no branding footer.

2016judea/buffett-checklist

Apply Warren Buffett's investment framework as a discipline lens when weighing a buy, hold, or sell decision — circle of competence, economic moat, owner earnings & intrinsic value, margin of safety, management/capital-allocation quality, and market psychology (Mr. Market, fear vs greed, temperament). Use when asked to "run this through Buffett", "what would Buffett say", "does this pass the moat test", "is this cheap enough", or for a second, more skeptical read on a name being evaluated or already held. This is a discipline overlay, not a replacement for a strategy — it applies the Buffett lens to how someone actually invests, rather than issuing generic advice.

2016judea/leonardo

Draw the way Leonardo da Vinci drew — a study sheet, a notebook folio, a red-chalk or silverpoint study, a machine cutaway, a storm of vortices — in his real materials and page-logic, generated with the make-art engine and anchored on fifteen of his actual (public-domain) sheets. Use when you say "Leonardo", "da Vinci", "like his notebooks", "a codex page of X", "draw this as one of his study sheets", "sanguine", "silverpoint", or wants a design, diagram, or illustration in that hand. Also a reading guide to his notebooks (Richter's 1883 public-domain translation) for "what did Leonardo say about shadow / trees / water". This is a TASK skill; the engine is `make-art`.

2016judea/mcp-stack

Which free MCP server or framework to reach for, and its traps — finance/gov data (SEC EDGAR, Yahoo, SAM.gov, USAspending), web research (Exa, Firecrawl, Crawl4AI, Jina reader), design/art/brand (Canva, Inkscape, Penpot, Figma, Orshot, Hugging Face image gen, vectorizing, charts), data/spatial (DuckDB spatial, live ArcGIS layers, OpenStreetMap/Overpass, Census, MapLibre), and ops (PostHog, iMessage, context7 docs). Use when making a social post, OG card, poster, logo/vector, chart, map, or brand asset; when querying parquet/geojson/duckdb or a city's open-data layer; when an MCP "needs authentication" or fails; or when asked "what tools do we have", "is there an MCP for X", "should we add X".

2016judea/records-request

Get a specific record out of a US government office by public-records request — "request the assessor's model", "file a data practices request", "FOIA this", "open records request", "can we just ask the county for it", "who do I write to at <county>", "chase that request", "did they ever answer". Covers checking the website first, finding the right office and statute, the carve-out paragraph that makes a request answerable instead of refused, web-form traps (hidden character caps, WAFs that reject apostrophes), chasing (there is usually no deadline), whether what comes back may be republished, and parsing multi-year tables without silent errors.

2016judea/sms-native-product

Build a product whose interface is text messages rather than an app or a website — "no app, no website", "they just text a number", "chat with our agent natively in Text Messages", "can we do this over text", "an SMS bot", "a Telegram bot", "make it a group chat", "minimum viable friction". Fires equally when it has already gone wrong — "my campaign got rejected", "our number is blocked", "the texts aren't arriving", "why do I need to register". Covers the gate that decides whether such a product can send at all (US A2P 10DLC registration, SHAFT content rules, permanent rejection codes), group MMS from code, what each channel can't do, an architecture that survives losing the channel, and guarding model-rewritten user content.

2016judea/vertical-market-agent

Build a chat agent that knows one industry in one metro better than any general model because it carries a precomputed digest of real public records (or a mined review corpus) and can pull live records mid-conversation — finding the moat, building a byte-stable substrate, enumerating what the records can't, the data traps that produce plausible wrong numbers, deterministic math in tools, measured prompt cost and cache TTL, shipping as an ad destination, an off-sector ending, and a precomputed spatial "what is this next to" layer. Use when building a vertical AI agent grounded in records rather than general knowledge.

相關技能