SuperAPI AI 工具集

layer-typography

设计与创作

查看项目

更新于 10-30 15:40

技能介绍

概述 图像模型容易拼错单词,也无法使用字体文件。因此,当文案必须逐字准确,或必须使用品牌字体时,不应依赖生成,而应先用 render_text 排版,再用 compose_image 将其放置到画面上。画面和文字保持为独立文件,所以改文案只需重新渲染文字,不必重新生成画面,同一画面也可承载多种语言(layer-localization)。

这两个工具直接按名称调用,无需查找,因为它们是 Layer 自有的确定性文件操作,不涉及模型:不运行模型,不消耗 Creative Units,也不需要预估。底层画面仍是计费生成,需经过 layer 技能中常规的预估环节。

并非所有文字都适用本技能。render_text 只设置平面、单色文字。需要看起来融入场景的字(如雕刻标牌、霓虹灯管、带纹理的手绘标题)属于生成任务,由 layer-image 覆盖相关提示词写法。

如果文中提到的配套技能不在可用技能中,可请用户安装(npx skills add layerai/skills --skill <name>);无人值守时,依据工具 schema 继续,并说明该缺口。

快速参考

  • 需要精确文案、品牌字体且日后可编辑:render_text,再用 compose_image 叠加到画面上。
  • 文字是插画的一部分:使用生成(layer-image)。
  • 修改已烘焙进图像的文字:用 filter.use_case: "edit_text" 调用 list_base_models。
  • 品牌字体在用户磁盘上:request_file_upload_url,然后把 file_id 作为 font_file_id 传入。
  • 品牌字体在公开 URL:upload_file。
  • 没有字体文件:使用 font_family,填标准字体或 Google Fonts 字体族名称。

设置文字 先上传品牌字体。font_file_id 优先于 font_family;font_weight(100 到 900,步长 100,400 常规,700 粗体)选择该文件中的字重,italic 选择斜体。没有文件时,font_family 回退到指定字体族,即使看起来接近,也与品牌字体不同,发生这种情况时应告知用户。

按文字在最终图像中所占区域大致设置画布尺寸(width、height,各不超过 4096),这样放置时几乎不需缩放。文字设得小再放大会变模糊;设得过大再缩小会失去字重。

文字放不下时会被拒绝,并给出所需尺寸。读取该尺寸后决定:加大画布、减小 font_size 或缩短文案。不要默默缩小字体直到放得下,因为靠极小字号才放得下的标题是失败的。

两种对齐各司其职。horizontal_alignment 和 vertical_alignment 把文字块放在画布上;text_align 对齐多行文字块内部的各行。换行符开始新行,长行在空格处换行。line_height 只调整行距。

画布默认透明,除非设置 background_color。#RRGGBBAA 可在文字后加半透明底板,这是在复杂画面上改善对比度最简单的方法。

平面单色文字没有描边或阴影。需要投影时,用深色和面色各渲染一次相同文字,再在 compose_image 中把深色副本向右下偏移几个像素叠放。

放置文字 compose_image 最多将 16 个图层叠成一张平面 PNG,从底层开始。画布默认取第一层的图像尺寸,所以把画面放第一层即可匹配。

锚点是从画布边缘算起的像素偏移。同时设置 left 和 right,框体会横跨两者之间。要在不知道文字尺寸时把文字固定到角落或居中,可把四边都锚定在边距上,并设置 horizontal_alignment 和 vertical_alignment。width 和 height 放在图层的锚点旁,绝不能放在图层内部。

resize_strategy 对文字和 Logo 用 fit_and_pad,使其无失真地缩放进框内。fit_and_crop 用于满版背景。切勿拉伸文字。

Rotation 可将图层旋转 90、180 或 270 度,用于竖排书脊文字,或把卡片编号倒置在相对角落。

可读性 按最终观看尺寸而非全分辨率判断合成效果。商店图标标签或移动端按钮只以画布的一小部分被阅读。

生成画面时就规划空间:要求标题所在区域平静、细节少。文字压在画面最繁忙处需要底板,而底板是一种妥协。

与各边缘保持安全边距。平台会裁剪并叠加自己的 UI,贴边的 CTA 最容易丢失。

一种字体,用字重和字号建立层级,看起来像经过设计;三种字体读起来像拼贴。

修改图像中已有文字 当文字已烘焙进现有画面时,用 use_case: "edit_text" 过滤 list_base_models,取第一个结果,并在提示词中引用精确的替换字符串。逐字母检查输出。如果两次拼错,改为把旧文字擦到干净底板上(erase_object 或 inpainting 模型),再用 render_text 和 compose_image 在底板上排字。

示例 “把标题‘Ember Vale’用品牌字体放到这张主视觉上,下面加‘Pre-register now’。” 主视觉来自此前运行,已有 file_id(1920 x 1080)。字体是本地 .otf:request_file_upload_url,完成两步上传,保留 file_id。 标题用 render_text:font_file_id、font_weight: 700、font_size: 160、color: "#FFF4E0",画布 1200 x 240。若被拒绝,读取所需尺寸并加宽画布。 用 #1A0F08 再渲染同一标题作为阴影。 CTA 用 render_text:font_size: 56、background_color: "#000000B3" 作为半透明底板,画布 640 x 112。 compose_image 用四个图层,从底层开始:主视觉不设锚点;阴影锚定 top: 124、left: 364,宽 1200、高 240;标题锚定 top: 120、left: 360 叠于其上;CTA 锚定 bottom: 96、left: 640,宽 640、高 112,每个文字层用 fit_and_pad。 按用户交付尺寸查看结果。这些步骤不消耗 Creative Units,因此无需预估;报告时应说明这一点。

常见错误

  • 为修正拼写错误而重掷生成,而不是直接排版文字。
  • 用指定字体族替代品牌字体却不告知用户。
  • 画布与最终文字框相差很远,导致文字缩放后变软或变细。
  • 文字被拒后不断缩小 font_size 直到放得下,而不是调整框体或文案。
  • 期待 render_text 提供描边、渐变或发光;它只设置单色。
  • 对文字层使用 stretch,导致字形变形。
  • 文字贴住画框边缘或压在画面最繁忙区域。
  • 资产日后要本地化,却把文字压平进画面。