Community图像github.com

image-riff — 借用视觉语言创作原创艺术

将一张或多张参考图像转化为该参考图自身视觉语言的原创艺术作品,然后将其裁剪到所需的表面上。适用于粘贴或指向艺术作品并说“以此为基础图像”、“从此生成艺术”、“以此即兴创作”、“进行创意构思”、“制作频道横幅/头像/封面/盘子”、“更狂野的版本”或希望基于一份参考获得一系列选项的场景。

image-riff — 借用视觉语言创作原创艺术 是什么?

image-riff 是一个专注于从参考图像中提取视觉语言并创作原创艺术作品的技能。它并非单纯的图像生成工具,而是一套完整的方法论,指导用户如何将参考图的风格、色彩、线条和质感转化为全新的构图,并最终将作品精准地交付到特定平台(如 YouTube 频道横幅、头像、Instagram 图标等)所需的尺寸和格式。该技能支持多种 AI 平台(如 Claude Code, Cursor),其核心引擎由 `make-art` 技能驱动。工作流程包括:分析参考图的渲染语言、构建“STEM(固定风格描述)+ SUBJECT(变化的主题)+ TAIL(固定几何和负面约束)”三段式提示词、生成多个候选方案、根据实际用途(例如头像在极小尺寸下的可辨识度)进行严格排名和裁剪。其独特价值在于强调“借用语言而非复制主题”,确保生成的作品是原创的,同时严格遵循参考图的视觉风格。此外,技能还包含了针对不同表面(如 YouTube 横幅、Instagram 头像)的精确裁剪指南和小尺寸可读性测试方法,确保最终交付的作品在目标平台上表现最佳。

兼容平台~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 种,加上小的点缀色>, <光线的效果>。不要复制附加图像中的主题。创作一些新的内容。

SUBJECT:

以及 TAIL:

<宽高比> 构图,全出血,边缘到边缘。无边框,无画框,无纸张纹理, 无白色边缘。无文字,无字母,无签名,无标志。

摄影基础图是更棘手的情况:在花费 4K 生成之前,先用 2K 探测。 “复现渲染语言,改变主题”在风格化的基础图(漫画面板、版画)上能可靠地产生艺术效果。 对于照片,它可能完美执行但仍然令人失望。当基础图是照片时,问第三个问题—— 最终结果应该看起来像照片,还是像别的东西? — 并在生成四张 4K 图像之前,先花费一两张 2K 图像进行测试。

当基础图是照片时,STEM 的槽位会变化,但其作用不变。 将标记制作的槽位替换为相机决定的六件事:<胶片类型 + 格式>,<阴影响应>, <光线的质量和角度>,<调色板,3-4 种命名的颜色加上一种点缀色>,<颗粒 / 光晕 / 暗角>,<它不是什么>。 最后一个槽位最重要,因为引擎对任何摄影提示词的默认设置都是当代数码照片: 说 无 HDR,无提升阴影,无数码清晰度,无电影感的青橙色调。 像 “深沉的黑场,完全不保留阴影细节” 这样的表述可能是提示词中最关键的句子。

还要从基础图中读出其隐含的主题,而不仅仅是它的渲染效果(例如 一个私密的地方,从高处俯视,空无一人)。 在写任何 SUBJECT 之前,用一句话命名它;将类似 no people visible anywhere in the frame 的不变量放入 TAIL。

为什么这样构建:

  • 图像承载风格;STEM 仅命名可见的元素。 描述你看到的标记制作方式—— 可变粗细的硬黑轮廓线,可见的 ben-day 网点遮罩阴影,仅限喷枪机械混合,无摄影光照效果。 命名技巧可以防止模型将其现代化。
  • “不要复制主题……创作一些新的内容”是关键的约束。 没有它,你只会得到基础图的变体。 有了它,你就能在基础图的语言中创作出原创的构图,并且其中最好的作品会引用基础图而非重复它。
  • 命名颜料,并限制点缀色。 针对点缀色明确说“小”,否则它会占据整个画面。
  • 负面约束不是模板代码。 引擎会自动添加纸张/risograph 边框;在 TAIL 中添加四个负面约束不花任何成本。
  • 相同的 STEM + TAIL 使整套作品具有可比性。 稿件之间的每一个差异都是你主动要求的。

主题必须是视角,而非装饰

这是最重要的创意决策。四个主题在相机位置上有所区别:

稿件视角示例
尖顶沿垂直轴向上看一座塔从云海中升起,向透视焦点收窄
残骸平视空旷的平原半埋的残骸,一个小身影正走向它
坠落透过云层向下陡峭俯视无数平面延伸至弯曲的地平线,一个身影正在坠落
曼荼罗直视纯粹的图案,无地平线对称的玫瑰花结,充满画面

稿件因其视角而交付:一个垂直柱状结构能承受信件横幅的裁剪;一个天空背景下的单一剪影能承受方形头像的裁剪。 四个仅在装饰元素上不同的稿件,裁剪方式都一样——那只是四种服装下的同一种选择。一个稿件一个创意。

根据设计简报进行排名——然后说明每个 SURFACE 想要哪一个

两种独立的排序。根据基础图诚实排名,并指出偏离的那个稿件; 然后为每个目标表面添加一行,说明该表面想要哪个稿件以及为什么裁切后它是合适的。 你在保真度上排名最后的稿件可能是正确的横幅。低排名不是否决;它只是评估的一个维度。

裁剪输出。每个表面都有其几何形状。

交付适合目标尺寸的文件,而非源稿件尺寸。

YouTube 频道横幅 — 一个 16:9 的上传文件;YouTube 会根据不同设备提供不同的切片。

  • 电视端 / 存储:2560x1441。
  • 桌面端条状区域:2560x424,纵向中间约 29.4%(顶部 35.3% -> 底部 64.7%)。 所有必须被看到的内容都在这个条带内。
  • 一个高大的 9:16 稿件的高度大约是 16:9 裁剪所需的三倍:选择条带,不要默认接受中间部分。

频道头像 — 正方形,从 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/@<channel>" | 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. 亮色属于 BACKGROUND,而不是高光。 一个镜面高光在 32px 时毫无价值; 一片纯亮的纯色区域则可以阻止拇指滑动。带有金属光泽的指令在缩小时会变成一团泥。

引擎会主动添加的两件事

  • 切勿在提示词中提及圆形裁剪。 它会把圆形画出来。应该说: “平坦连续的背景一直延伸到正方形的所有四个边缘;标志很好地容纳在中央四分之三区域内”, 并在 TAIL 中加入 没有圆形,没有圆环,没有圆形徽章,没有包围形状。
  • 除非明确禁止,否则它会添加径向暗角。 要求 “每个填充绝对平坦——无渐变,无暗角,无角部或边缘径向变暗。”

永远不要从风格描述中引用基础图的作者

你写的风格短语(“在 Moebius 传统中”)不是署名;不要让它在后续环节中成为引用来源。 如果任何内容将要公开发布,请询问真实的艺术家姓名。 给真实艺术家贴上错误的署名比不署名更糟糕。

多张基础图像

--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.

相关技能