Logomarks
David Sherlock 创作的 3,797 个免费几何标志(logomarks),均按统一标准绘制: **https://logomarks.ai**(CC0,公共领域)。本技能用于设计属于该集合的新标志,以及检查、编辑和复用现有标志。(要为一个项目挑选现有标志并设置,请使用 Logomarks 选择技能。)
本文件夹内容:
SKILL.md:本文件。scripts/kit.mjs:构建该集合所用的几何构造工具包(形状、真实布尔运算、编织、等距立方体和等距实体)。需要npm install polygon-clipping(包含package.json)。scripts/fit.mjs:将任意 SVG 标志缩放至标准尺寸并检查。无依赖项。scripts/examples.mjs:集合中的六个真实标志,使用工具包重建。examples/:它们的输出,已经过适配。
使用现有标志
该网站同时充当静态 API。无需安装任何内容:
https://logomarks.ai/marks.json:每个标志的name、slug、file、tags(round、square、letter、number、symmetric、radial、solid、light、wide、tall、new)和绘制尺寸。https://logomarks.ai/svg/<slug>.svg:标志本身。https://logomarks.ai/marks/<slug>:其页面,包含 PNG、favicon 和品牌样机下载。https://logomarks.ai/logomarks.zip:所有标志。
在从头开始设计之前,检查现有标志(或其混搭版本)是否适合需求。获取 marks.json 并根据标签和名称进行过滤。
标准(不可协商)
-
viewBox="0 0 512 512"。 -
标志的最长边精确为 448,并居中:边距为 32,以实际轮廓测量。宽标志宽 448 但更短;高标志高 448 但更窄。切勿凭肉眼调整尺寸:运行
fit.mjs。 -
测量几何形状,切勿测量画布。 在构建过程中,标志可以超出 0–512 范围(等距实体和高堆叠通常如此)。这没问题,只要适配步骤测量的是实际轮廓。不要通过在其 viewBox 内部渲染来寻找标志边界:边界外的任何内容对此渲染不可见,然后“适配”会将其留在外部,导致最终文件在边缘处被裁剪。
fit.mjs测量每个点和曲线,因此它可以处理在任何位置绘制的标志;fit.mjs --check会标记任何仍然超出画布范围的标志。 -
整个文件:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor"> <path fill-rule="evenodd" d="…"/> </svg> -
仅使用
currentColor的填充路径。无描边(展开它们)、<g>、transform、style、蒙版、剪辑路径、ID 或文本。孔洞必须是真实的孔洞(evenodd 或反向绕行),绝不能使用背景色绘制的形状。 -
坐标保留一位小数。
工作流程
- 阅读简报。 名称、业务内容、感觉(平静、技术感、有趣、高端)以及标志将出现的位置(应用图标、favicon、标识牌)。小尺寸使用倾向于粗体且部件少的标志。
- 选择一个家族(见下方)。不要在一个标志中混合多个家族。
- 写出 4–6 个单行创意。 每个必须是一个创意:“一个被 S 形通道分隔的圆盘”,而不是“一个带 S 形、圆点和射线的圆盘”。字母组合使用名称的首字母。
- 使用工具包构建最佳 2–3 个创意:一个简短的脚本,将基本几何体与布尔运算结合,并调用
write()。仅对手写路径数据非常简单的标志(见“手写路径”)。 - 适配:运行
node scripts/fit.mjs out/将所有标志缩放至标准尺寸。 - 根据检查清单评审。 查看每个标志的渲染效果,分别在 32 像素和 512 像素下。剔除任何不符合要求的标志,并对幸存者进行迭代。
- 交付每个标志,附带一个简短、独特的名称(一个或两个单词,例如“Cube Window”、“Moonrise”)、其单行创意和 SVG。
该集合偏好的风格
根据所有者的评审:粗体实体标志,带有一个负空间创意和厚实且均匀的间隙;等距实体和立方体;由一个重复元素构建的复杂标志;极简点阵和像素标志;可爱的陶瓷小雕像动物。最重要的是,任何看起来像现代科技、AI 或科技服饰品牌的东西:精确、工程化、略带未来感。交织的环带、模块化瓷砖(最爱)、单线和多线绘画、倒角和斜切、精确的环形和轨道、网格系统、模板字母和实用字母、故障切片、交织字母。但绝不能是 UI、网络、芯片或电路图标、神经网络节点图、大脑,或任何接近已知 AI 标志的东西(六边形结、星号、四角星形)。
家族
集合中的每个标志都属于一个家族。一旦你选择了一个(工作流程的第 2 步),请在构建前阅读 references/families.md 中的相关章节:其构造方式、在 512 画布上的数字,以及尝试过并排除的内容。本文件中以引号命名的章节(“Iso solids”、“Glitch editions”)也在那里。
家族:Bold negative space;Swiss grid;Stencil letters;Monograms;Serif letters and monograms (batch 230);Letter badges;Woven;Iso cubes;Iso solids;Overlaps (XOR);Line (monoline);Multiline (tracks);Oblique;Dot grids;Animals;Animals in the house styles;Leaf and seed;Halftone solids;Dither taper (batches 167, 186);Detailed;Inflated;Glitch slices;Shear and Wire letters (batches 112–113);Inline letters (batch 124);Rail and Trace letters (batch 166);Echo letters (batch 202);Tech brand marks (batch 213);Modular;Orbits;Letter symbols, symbols, hidden creatures and forms (batch 168);Techwear (batch 107);Industry marks (batches 95–97);Tried and dropped (batch 51);Folded (origami);Fold seams and straps (batch 170);Iso · Planes (batch 215);Bold · Emblems (batch 216);Bold · Y2K (batch 232);Letters · Blackletter and Bold · Shatter (batch 231)。
工具包(scripts/kit.mjs)
形状是 512 画布上的多边形集合(y 轴向下,C = 256 是中心)。
| 函数 | 功能 |
|---|---|
circle(cx, cy, r), ellipse(cx, cy, rx, ry, deg) | 圆盘 |
rect(x, y, w, h), rr(x, y, w, h, r | [tl, tr, br, bl]) | 矩形,圆角或部分圆角 |
squircle(cx, cy, R, n) | 超椭圆:徽章的软方形 (n 4.5) |
regular(cx, cy, r, sides, deg), roundPoly(points, cut) | 正多边形;任何圆角多边形 |
poly([[x, y], …]) | 任意多边形 |
annulus(cx, cy, r, w) | 宽度为 w 的环;r 是中心线,而非外边缘 |
sector(cx, cy, r, a0, a1), arcBand(cx, cy, r, w, a0, a1, round) | 扇形切片;厚圆弧,可选圆头 |
lens(cx, cy, length, width, deg) | 透镜形 / 叶形 |
drop(centre, r, tip) | 泪滴形 |
pill(a, b, w), bar(a, b, w) | 具有圆头或方头的线,用于形状或切割间隙 |
stroke(points, w), sample(f, t0, t1, n) | 粗多段线(允许可变宽度)以及沿曲线的点 |
weave(strands, w, gap), ring(cx, cy, r) | 上下交织的线条 |
iso(edge), cubes(list, edge, ox, oy, gap) | 等距点;立方体布局 |
isoPrism, isoBlock, isoRing, isoPile | 等距实体(见“Iso solids”) |
dedupe(points) | 在 stroke() 之前删除重复点 |
grow(shape, d), soften(shape, r1, r2) | 真实圆角偏移(负值缩小);内角圆角 r1,外角圆角 r2(蓬松形状) |
robust() | 在脚本顶部调用一次:当 polygon-clipping 抛出错误时,每个布尔运算都会以微小抖动重试 |
grown(shape, w), over(back, front, w) | 形状加上一个 2w 宽的条带(减去它可切掉一个部件);front 在 back 之上,通过 w 切割分离 |
egg(cx, cy, rx, ry, deg, k) | 蛋形,用于小雕像身体 |
slices(shape, cuts, shifts, { deg, g }) | 故障切片:通过间隙 g 切成条带,每个条带沿切割线滑动 |
BADGE, knockout(kind, letter), clearance() | 七种徽章形状;居中镂空的字母,如果距离边缘小于 50 则缩小 |
PIX7, pixels(rows, p), checker(rows) | 粗体 8 位字母表;作为单一实体的像素字形;任何仅角接触 |
dsegs(segments, t, g) | 带有尖端的显示段,由均匀间隙分隔 |
SKEL, skelSolid(k, H, T) | 一种几何无衬线字体的中心线;以方头端实现的粗体实体 |
tracks(pts, { n, pitch, w }), fillet(pts, r), balloon(pts, w0, w1) | 平行轨道;圆角多段线;气球描边 |
filletClosed(pts, r), trackLoop(pts, { n, pitch, w }) | 闭合并所有角圆角的多边形(允许每个角不同 r);围绕闭合并轮廓的三条轨道(动物用间距 42) |
walk(at, deg, steps) | 海龟路径:['L', length] 和 ['A', turn°, radius] 步骤,精确半径的圆弧(开放轨道动物) |
seeded(str) | 种子化 Math.random:为每个标志设置它,使得 robust() 的抖动和批次生成字节一致的结果 |
svgShape(svgText), pathRings(d) | 将标志的 SVG(或路径数据)读取回形状:曲线和圆弧被采样,evenodd 或非零孔洞得到尊重 |
glitchMark(svgText, { kind, cuts, shift, deg }) | 现有标志的故障版本(见“Glitch editions”) |
U, D, I, X | 并集、差集、交集、异或 |
rot(shape, deg, cx, cy), rotN(shape, n), move, scale, flipX | 变换;rotN 围绕中心重复 |
polar(r, deg, cx, cy) | 角度上的点(0° = 右,90° = 下) |
segmentLines(lines, { t, box }), segments(nodes, strokes, o) | 段字母:每个笔画自己的段,连接处沿角平分线分离 |
isoPieces(pieces, u) | 单位立方体部件,无缝表面,仅部件之间和折痕处有间隙(Iso Lock) |
blocks(list, W, H), nest(W, H, n, sides, cut) | 由实体块铺砌的矩形,带有均匀间隙(Golden and the Blocks);剥离细分 |
linkage(bars, pins) | 胶囊连接在一起,每个覆盖前面的 |
write(file, shape), svg(shape) | 输出 |
切割间隙 通过减去相应宽度的 bar()(或细 annulus())来实现。在护城河中浮动部件 通过减去其放大副本,然后加回部件(Hex Gem)。如果 polygon-clipping 抛出“Unable to complete output ring”,说明形状共享一条精确边:将一个形状移动 0.01。如果这还不够,使用微小抖动(从 1e-4 到约 0.02 尝试几次)重建整个轮廓和深度,或者将面重绘为一个干净轮廓而非多个矩形的并集。“Degenerate segment at [NaN, NaN]”表示多段线有重复点:使用 dedupe() 处理。工具包辅助函数(stroke()、pill()、grown())也调用布尔运算,因此你自己的代码中的抖动无法到达它们:一次调用 robust() 即可,其内部的失败会自行重试。
批次 64 之前的 grow() 无效:它用最后一个重复的第一个点简化每个环,从而将环折叠到该点,因此它只在那里添加或删除一个圆。已修复;如果你的工具包副本早于此版本,则 grow(rect(0, 0, 100, 100), -10) 可以演示此问题。
在不同背景下检查大图。 小尺寸深色背景上的浅色缩略图具有误导性:开口可能看起来被填充,或者一个裂缝可能隐藏起来。在裁剪或发布标志之前,在 400 像素、浅色背景上深色背景渲染它。
手写路径
对于简单的标志,你可以直接编写路径:
- 一个圆形是两个圆弧:
M cx-r cy a r r 0 1 0 2r 0 a r r 0 1 0 -2r 0 z。 - 一个环是一个路径中的两个圆形,使用
fill-rule="evenodd"。内部圆形成为孔洞。 - 使用 evenodd 时,重叠部分也会变成孔洞。 对于重叠实体,要么在工具包中合并它们,要么使用默认的非零规则,每个实体顺时针绘制,每个孔洞逆时针绘制。
- 然后运行
fit.mjs。不要试图手动达到 448,也不要裁剪到画布:如果部分绘图位于 0–512 之外,fit.mjs会将其重新纳入。
检查清单
剔除或重做任何不符合以下条件的标志:
- 一个创意,可以用一个不带“和”的句子描述。
- 在 32 像素处可读:间隙不闭合,任何部分不模糊。没有宽度小于 10 单位的元素。
- 整个标志使用一种间隙宽度和一种描边重量(或清晰的 1:2 比例)。保持集合的间隙(独立部件之间为 22 单位):网站的 Gap、Weight 和 Soften 控件测量每个标志的部件和间隙,当它们均匀时效果最佳。唯一的例外是褶皱或重叠的 SEAM 为 11(折痕和条带标志,见“Fold seams and straps”),并且仅当轮廓本身在 32 像素处可读时。
- 绝不读作图标。 这是大多数标志失败的原因。问:它是否适合放在图标集(Material、Lucide、SF Symbols)中?如果是,无论绘制得多好,都要剔除。标志是属于一个品牌的抽象或风格化符号,而不是事物或动作的象形图。具体来说,不是 UI 图标:没有箭头、播放、主页、齿轮、螺母、铃铛、锁、下载、复制、聊天气泡、地图图钉、Wi-Fi 弧线、图表(也包括饼图扇区)、图像/山峰和太阳、“禁止进入”斜线、类似旋转器的点环、包装盒。日常物品的线条图很快会滑入图标范畴:杯子、瓶子、眼镜、奖杯、高礼帽、火箭、自行车和宝石都被解读为图标。
- 不意外地看起来像身体部位:注意重叠环之间的杏仁形和透镜形。
- 不是具有意义的符号:没有宗教、政治或神秘符号(六芒星、五芒星、十字架、新月星、三曲枝、鸟居、巴纹、任何方向的卍字符)、旗帜或危险标志(生物危害、辐射)。
- 不是著名的标志形状,例如围绕一个点的三个轨道会被认为与 React 的原子相似。
- 不是复制品,既不是已知品牌标志的复制,也不是独立的通用库存形状(单纯的圆形、六边形、星形、漩涡形或地球形)。
- 不是近似重复品,既不是同一批次中其他标志的近似重复,也不是现有 Logomarks 的重复(检查
marks.json)。现有标志的旋转或镜像被视为重复。名称必须唯一。
…
[已截断以供翻译]