Skip to content

Design JSON 字段表 ​

逐字段抄自 packages/design-json/src/(design.ts / layers.ts / geometry.ts / color.ts / units.ts / barcodes.ts)。 这一页是抄件,zod 才是真源:改了 zod 必须同步本页并跑 node docs-site/check.mjs。

  • 必填/可选按 zod 判定;"默认值"指 zod .default() 的实际值。
  • 长度字段一律 mm,键名以 Mm 结尾(例外:transform.x/y、canvasMm.width/height、uvRect.*,见下)。
  • 像素只允许出现在 …Px 键与 assetRef.selection(选区是位图坐标)。

顶层 designSchema(design.ts) ​

键类型必填默认说明
schemaVersion字面量 1✔—SCHEMA_VERSION = 1。不是 ADR-0002 设想的 meta.schemaVersion,见偏差记录
designIdid('ds')✔—正则 ^ds_[a-z0-9]{6,40}$
namestring 1–120✔—人读名称
canvasMm{ width>0, height>0 }✔—展开图外接尺寸 mm;由几何生成器写入
bleedbleedSchema✔四边 3top/right/bottom/left,各为非负 mm
safeAreaInsetMmnumber ≥0✔5安全区内缩 mm
dielinedielineRefSchema✔—只存盒型参数与引用,几何本体由 @apw/dieline 生成
layersLayerNode[]✔[]图层树=设计树
assetsassetRefSchema[]✔[]素材,不可变 + 版本引用(P2-11 方向)
fontsfontRefSchema[]✔[]字体与授权状态
brandTokensbrandTokensSchema✔空集合Brand Kit
mappingsartworkMappingSchema[]✔[]2D 面板 ↔ 3D face UV
provenanceaiProvenanceSchema✘—整图生成 or 局部编辑的审计入口
aiEdits数组,.max(3)✘—最近 3 次 AI 合成记录;超出即丢弃最旧

superRefine 附加断言(真校验只在 zod,JSON Schema 里没有):图层 id 唯一;image.maskAssetId 也存在; 图层 panelId 必须在 mappings 里;含文字时字体 licenseStatus 不得为 blocked。

dielineRefSchema ​

键类型必填默认说明
dielineIdid('dl')✔—^dl_[a-z0-9]{6,40}$
boxTypestring 1–64✔—目前只有 rectangular(四摇盖胶封盒)
paramsMmRecord<string, number>✔—键由盒型生成器定义;本盒型为 width/height/depth/glueMm
material{ name?, thicknessMm? }✔{}thicknessMm 只作元数据;纸厚补偿未实现,见 能力边界

assetRefSchema ​

键类型必填默认说明
idid('as')✔—^as_[a-z0-9]{6,40}$
storageKeystring 1–512✔—对象存储 key(不含签名)
mimeTypeimage/png | image/jpeg | image/webp | image/tiff | image/svg+xml✔—渲染层今天只吃 PNG/JPEG/WebP(dataUrl 正则限制)
widthPx / heightPx正整数✔—像素,唯一允许裸 px 的几何位置之一
dpinumber >0✘—Preflight 的高频事故入口;缺省时按 300 推算显示尺寸
bytes非负整数✔—体积
checksumSha256长度 64 的串✔—完整性;示例里是占位值
dataUrl^data:image/(png|jpeg|webp);base64, ≤30 MB✘—验证工作台导出时要求存在(tools/validate-design.mjs)
extraction对象✘—素材提取来源记录:source/resultSource/selection{x,y,width,height,pixels}/mask/createdAt/instruction

extraction.selection 是位图坐标 + 像素数,用途是让"这块素材怎么来的"可追溯;对应 UI 见 docs/demo/app.mjs。

fontRefSchema ​

键类型必填默认说明
idid('ft')✔—^ft_[a-z0-9]{6,40}$
family / stylestring✔style 默认 Regular
storageKeystring✔—字体文件 key
licenseStatuscleared | pending | blocked✔pending含文字层且为 blocked → parse 失败;商用授权属外部依赖 PE-05
embeddableboolean✔false是否允许子集化嵌入导出(P2-03)
hasCjkboolean✔false缺字检测的前提(P2-04)

brandTokensSchema ​

键类型必填默认说明
brandKitIdid('bk')✘—
colors{ name, color }[]✔[]color 为 colorSchema,可放专色
fontIdsid('ft')[]✔[]
logoAssetIdsid('as')[]✔[]
forbidden{ kind: 'word'|'color'|'asset'|'claim', value, note? }[]✔[]禁用项;命中即阻断生成的编排逻辑属 P1-07/P3-03,未实现
fixedCopy{ key, text }[]✔[]法规字段等固定文案,AI 不得改写(外部依赖 PE-07)

图层(layers.ts) ​

公共字段(除 aux 外全部继承):

键类型必填默认说明
id^ly_[a-z0-9]{6,40}$✔—同一 design 内唯一
namestring 1–120✔—
visible / lockedboolean✔true / falseaux 层 locked 默认 true
opacity0–1✔1
blendModenormal | multiply | screen | overlay | darken | lighten | color | luminosity✔normal验证版渲染只接受 normal,其它直接抛错
transformtransformSchema✔—mm
panelIdstring 1–64✘—归属面板;必须能在 mappings 找到

kind: "text" ​

键类型必填默认说明
textstring 1–20000✔—真实文字,不是位图
fontIdid('ft')✔—必须存在于 fonts
sizeMmnumber >0✔—字号用 mm,不用 pt
leadingMmnumber >0✘—行距
trackingEm−50…1000✔0字距
alignleft | center | right✔left
writingModehorizontal | vertical | arc✔horizontal验证版只支持 horizontal,竖排/弧形属 P2-04
boxMmrectMmSchema✘—文本框
colorcolorSchema✔—
sourcemanual | aiRebuilt | aiReference✔manualaiReference 只能当参考,见 硬规则

kind: "image" ​

键类型必填默认说明
assetIdid('as')✔—
sizeMm{ width>0, height>0 }✘—显示尺寸 mm;缺省时按 widthPx × 25.4 / (dpi ?? 300) 推算(docs/demo/scene.mjs)
srcRectMmrectMmSchema✘—源图取用区域(裁剪),缺省整图
maskAssetIdid('as')✘—局部编辑遮罩素材
colorSpaceOverridepreserve | forceCmyk | forceRgb✔preserve只在导出期生效

kind: "path" / "barcode" / "aux" / "group" ​

kind关键键状态
pathd(SVG path,坐标系 mm)、viewBoxMm、fill?、stroke?、strokeWidthMm?schema 已定义;验证版渲染不接受 path 图层(会抛"此验证版未实现");矢量保真导入属 P2-06
barcodesymbology、value、sourceschema 已含校验位守卫;渲染未接入 → 规划 P1-09
auxauxKind、paths[](≥1)、processName?、panelId?cut/crease/glue 已用于刀模;其余为语义占位
groupchildren(≥1)schema 已定义;验证版编辑器有上移/下移但没有编组 → 规划 P2-01/P2-02

auxKind 枚举(AUX_LAYER_KINDS):cut crease glue bleed safeArea foil spotUv whiteInk varnish braille。 非 aux 的层都算印刷层(isPrintLayer)。

WEB_ONLY_BLEND_MODES:overlay darken lighten color luminosity —— 这些混合在 PDF 里合成语义不等价,导出必须显式告警(P2-05,未实现)。

颜色(color.ts) ​

mode键说明
rgbr/g/b 0–255、overprint?预览色
cmykc/m/y/k 0–100、overprint?生产色语义;落色待 P3-08
spotspotName 1–80、tint(默认 100)、cmykFallback?、rgbPreview?专色;两者都缺时预览显示品红占位以暴露问题

overprint(叠印)只是 JSON 语义,实际印前检查属 P3-10。

几何基元与单位(geometry.ts / units.ts) ​

名称形状说明
pointMmSchema{ x, y }mm,y 向下
rectMmSchema{ x≥0, y≥0, width>0, height>0 }mm
polylineMmSchema{ closed=false, points≥2 }刀线/压线/胶位轨迹
transformSchema{ x, y, rotationDeg∈[−360,360]=0, scaleX>0=1, scaleY>0=1 }x/y 是 mm(对象原点),旋绕对象原点
DEFAULT_PX_PER_MM4只在渲染层用;packages/ 内禁止裸像素常量

单位口径表(check.mjs 按此校验示例):

容器单位
canvasMm、transform、boxMm、sizeMm、srcRectMm、viewBoxMm、dielineRectMm、panelRectMm、paramsMm、sheetMmmm
uvRect、uvRectSchema归一化 0…1,无单位
selection、bounds位图 px
widthPx / heightPx / bytes / pixelspx / 字节 / 像素数

条码(barcodes.ts) ​

symbology值规则
ean1313 位数字 + GS1 mod-10 校验位
ean88 位数字 + 校验位
upc_a12 位数字 + 校验位
code1281–80 个可打印 ASCII
qr长度 1–700

source: "aiReference" 的条码一律拒绝(schema superRefine)。

其它顶层实体 ​

  • versionSchema:versionId(前缀 rv)、designId、parentVersionId(可为 null)、createdAt、label?、design、deltaFromParent?(占位)。
  • projectSchema:projectId(前缀 pj)、name、orgId(前缀 og)、createdAt、headVersionId?、 brief{ product?, brand?, style?, referenceAssetIds[] } —— Brief 的落点,见 AI 提示词手册。

工作台整合字段(2026-10-01) ​

图片保留 maskAssetId,新增 maskFit(stretch/center,默认 stretch)与 maskInverted(默认 false)。横排文字 align 增加 justify。旧文件缺少新增字段时沿用原有全图/无遮罩效果;现有分组仍使用 children。所有字段由 packages/design-json/src/layers.ts 校验,保存、预览和导出共享同一文档。

交付前请核对文字、字体、结构与印厂要求,并保留确认版本。