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 种,加上小的点缀色>, <光线的效果>。不要复制附加图像中的主题。创作一些新的内容。
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/40。 在提示词中作为一个数字明确说明。
- 标志必须填满宽度 >=85%。 用大写说明;否则引擎会将一个适中的标志居中放在大量空白地面上。
- 亮色属于 BACKGROUND,而不是高光。 一个镜面高光在 32px 时毫无价值; 一片纯亮的纯色区域则可以阻止拇指滑动。带有金属光泽的指令在缩小时会变成一团泥。
引擎会主动添加的两件事
- 切勿在提示词中提及圆形裁剪。 它会把圆形画出来。应该说:
“平坦连续的背景一直延伸到正方形的所有四个边缘;标志很好地容纳在中央四分之三区域内”,
并在 TAIL 中加入
没有圆形,没有圆环,没有圆形徽章,没有包围形状。 - 除非明确禁止,否则它会添加径向暗角。 要求 “每个填充绝对平坦——无渐变,无暗角,无角部或边缘径向变暗。”
永远不要从风格描述中引用基础图的作者
你写的风格短语(“在 Moebius 传统中”)不是署名;不要让它在后续环节中成为引用来源。 如果任何内容将要公开发布,请询问真实的艺术家姓名。 给真实艺术家贴上错误的署名比不署名更糟糕。
多张基础图像
--image 参数可以重复使用,因此多个锚点是可能的,但测试较少。在提示词中说明哪张图像提供什么
(“图像 1 是色彩和线条语言;图像 2 是结构”),并将第一批稿件视为探测。
参见
brand-direction-plates(反向稿件集:一个主题使用多种语言)·
make-art(引擎、参数、粘贴提取、边框检测)。