壁纸生成器

JSON 配置参考

Version 1 壁纸配置的字段定义,供手写或审查 JSON 使用。

本文档描述 Version 1 壁纸配置的 JSON 结构。实际创作时推荐使用 CreatorConsole 的可视化编辑器,本页供需要手写或审查配置时参考。

根对象

{
  "version": 1,
  "shared": {},
  "templates": []
}
字段必需类型说明
version1当前仅支持版本 1
shared对象可复用预设表,键为预设名
templates非空数组一个或多个设备模板

模板 id 在整个配置中不能重复。

模板对象

字段必需类型默认值说明
id非空字符串模板唯一 ID
extends字符串或字符串数组继承一个或多个 shared 预设
watchface对象表盘展示信息
deviceKey非空字符串AstroBox 官方资源设备 ID
aliases字符串数组[]其他可共用此模板的资源设备 ID
canvas对象输出画布
frame对象整个 Canvas有效表盘区域
preview对象{ "radius": 0 }预览圆角
wallpaperTransform对象见下用户图片缩放 / 旋转范围
layers数组从底到顶的图层,可为空

deviceKey 应使用 AstroBox 官方资源设备 ID(如 xmb10pxmrw6xmws5),不要填写硬件型号。最新 ID 见 AstroBox-Repo devices_v2.json

watchface

字段必需默认值
name
previewKey模板 id

canvas

字段必需默认值约束
width必须大于 0
height必须大于 0
backgroundtransparent有效颜色

frame

字段默认值约束
x / y0有限数值
width / heightCanvas 尺寸必须大于 0
radius0圆角半径

wallpaperTransform

{
  "scale": { "min": 1, "max": 4, "default": 1, "step": 0.01 },
  "rotation": { "min": -180, "max": 180, "default": 0, "step": 1 }
}

缩放与旋转始终可调,adjustable 无需也不能关闭。scale 所有值必须大于 0。

数值控制对象

适用于 opacityblurbackdropBluramountfontSize 等数值属性:

{ "default": 0.8, "adjustable": true, "min": 0, "max": 1, "step": 0.01 }

固定值

直接写数字即固定值,界面不显示控件:

{ "opacity": 0.8 }

可调值

Version 1 中只有 adjustable: true 才会开放控件。此时必须提供有限数值 minmaxdefaultstep,并满足 min <= maxstep > 0default 在范围内。

属性回退范围

属性默认值回退范围
opacity10..1
blur00..30
backdropBlur00..30
amount0-1..1

图层公共字段

字段必需类型默认值说明
id非空字符串同一模板内唯一
name字符串按类型生成UI 显示名
typewallpaper / asset / tint / text / glass图层类型
srcasset字符串素材地址
mask字符串蒙版地址
clipcanvas / framecanvas裁切区域
rect对象仅影响 asset 绘制
transform对象单位变换仅影响 assettext
opacity数字或控制对象1透明度
blur数字或控制对象0图层自身模糊,px
backdropBlur数字或控制对象0下方背景模糊,px
blendMode字符串或控制对象normal混合模式

默认显示名:wallpaper 为“壁纸”,asset 为“素材”,tint 为“明暗叠加”,text 为“文字”,glass 为“玻璃”。

rect

{ "x": 20, "y": 30, "width": 120, "height": 80 }

xy 为有限数值,widthheight 必须大于 0。未设置时 asset 铺满整个 Canvas。

transform

{ "x": 0, "y": 0, "scale": 1, "rotation": 0 }
字段默认值约束
x / y0有限数值
scale1大于 0
rotation0

assetrect 中心加 x/y 为绘制中心,尺寸为 rect 宽高 × scale,再围绕中心旋转;素材拉伸填满目标矩形,不保留原始宽高比。

各图层类型

wallpaper

{ "id": "clear", "name": "清晰区域", "type": "wallpaper", "mask": "./masks/window.png" }
  • 不需要 src,数据来自用户导入的唯一图片。
  • 所有 wallpaper 图层共享同一套取景。
  • 未设置 mask 时填满自己的 clip 区域。
  • 配置可以完全没有 wallpaper 图层,此时无需导入图片即可导出。

asset

{ "id": "glass", "name": "玻璃", "type": "asset", "src": "./assets/glass.png" }
字段说明
src素材地址,相对配置文件解析
color整体着色,字符串或颜色控制对象
tintcolor 的兼容别名,两者并存时 color 优先
recolor按源色匹配的换色配置

素材格式取决于浏览器图片解码能力,常见 SVG、PNG、JPG、WebP 均可。

整体着色 color

{
  "color": {
    "default": "#ffffff",
    "adjustable": true,
    "options": ["#ffffff", "#000000", "#ff4d4f"]
  }
}

可调时 options 必须非空,default 必须包含在其中。整体着色保留素材 alpha。

分组换色 recolor

{
  "recolor": {
    "adjustable": true,
    "groups": [
      {
        "id": "accent",
        "name": "强调色",
        "source": "#ff0000",
        "default": "#00aaff",
        "options": ["#00aaff", "#ffffff"],
        "tolerance": 48
      }
    ]
  }
}
字段必需默认值说明
recolor.enabledtruefalse 时忽略全部组
recolor.adjustablefalse统一开放全部组
groups[].idgroup-N稳定状态键
groups[].nameUI 显示名
groups[].source要匹配的源颜色
groups[].default默认目标色,必须存在于 options
groups[].options非空目标颜色数组
groups[].tolerance48颜色匹配容差
groups[].adjustablefalse单独开放该组

recolor.adjustable 或组自身 adjustabletrue 时该组显示颜色选择。换色先执行,整体着色后执行。

tint

{
  "id": "tone",
  "name": "明暗",
  "type": "tint",
  "lightColor": "#ffffff",
  "darkColor": "#000000",
  "amount": { "default": 0.15, "adjustable": true, "min": -0.5, "max": 0.5, "step": 0.01 }
}
字段默认值说明
lightColor#ffffffamount > 0 时使用
darkColor#000000amount < 0 时使用
amount0绝对值作为填充透明度,范围 -1..1

amount = 0 不产生可见覆盖。tint 支持 maskclipbluropacityblendMode

text

{
  "id": "label",
  "name": "时间文字",
  "type": "text",
  "content": "12:00",
  "textBox": { "x": 0, "y": 0, "width": 336, "height": 60 },
  "font": {
    "default": "num",
    "adjustable": true,
    "options": [
      { "id": "num", "name": "数字", "src": "./fonts/num.woff" },
      { "id": "sans", "name": "默认字体", "family": "sans-serif" }
    ]
  },
  "fontSize": { "default": 48, "adjustable": true, "min": 12, "max": 200, "step": 1 },
  "color": { "default": "#ffffff", "adjustable": true, "options": ["#ffffff", "#000000"], "allowCustom": true },
  "textAlign": { "default": "center", "adjustable": true, "options": ["left", "center", "right"] }
}
字段必需默认值说明
content""默认文字
maxLength40最大字数,正整数
textBox整个 Canvas文本框位置与尺寸
font字体选择
fontSize32字号,必须大于 0
fontWeight400字重
color#ffffff文字颜色,默认允许自定义
letterSpacing0字距 px
lineHeight1.2行高倍率,必须大于 0
textAlignleftleft / center / right
verticalAligntoptop / middle / bottom

font

  • options[] 每项:id 必填(唯一键),name 显示名(缺省用 id),family 字体族(缺省用 id),src 字体地址(可选),axes 可变字体轴(可选)。
  • 没有 src 的选项使用系统字体族(如 sans-serif)。
  • 支持 TTF / OTF / TTC / WOFF;无法解析的格式回退到系统字体绘制。
  • default 必须匹配某个选项的 id
  • options 为空时自动补入 sans-serif 默认选项。

字体轴 axes

{
  "axes": [
    { "tag": "GRAD", "name": "渐变", "min": -100, "max": 100, "default": 0 }
  ]
}
  • tag 必填,4 字符轴标签(wghtwdthslntitalopszGRAD 等)。
  • min / max 必填且 min <= maxdefault 可选,缺省为 min/max 中点。
  • 同一选项内轴标签不能重复。
  • wght 轴由 fontWeight 承载,不写入 axes

glass

程序化生成的液态玻璃,不加载素材。通过 geometrymaterial 定义形状和材质。

{
  "id": "liquid",
  "name": "液态玻璃",
  "type": "glass",
  "visible": true,
  "transform": { "x": 168, "y": 240, "scaleX": 1, "scaleY": 1, "rotation": 0 },
  "geometry": { "type": "rounded-rect", "width": 120, "height": 200, "radius": 40 },
  "material": {
    "blur": 52,
    "refraction": 0.7,
    "thickness": 30,
    "dispersion": 0.2,
    "saturation": 1,
    "contrast": 1,
    "highlight": 0.25,
    "shadow": 0.45,
    "lightAngle": 0,
    "tint": "#1a1a1a",
    "tintOpacity": 0.7
  }
}
字段默认值说明
visibletrue是否可见
transform.x/y0玻璃中心位置
transform.scaleX/scaleY1非均匀缩放
transform.rotation0旋转角度
geometry.typerounded-rectrounded-rectcircle
geometry.width/height画布一半圆角矩形宽高
geometry.radius0圆角半径(rounded-rect)
geometry.diameter短边一半圆直径(circle)
material.blur52背景模糊(UI [0,100]
material.refraction0.7折射强度
material.thickness30玻璃厚度
material.dispersion0.2色散强度
material.saturation1饱和度乘子
material.contrast1对比度
material.highlight0.25高光强度
material.shadow0.45内阴影强度
material.lightAngle0打光角度(度,[0,360]
material.tint#1a1a1a玻璃着色颜色
material.tintOpacity0.7着色不透明度
material.bezelWidth0高级:bevel 宽度,0 表示自动

玻璃层通过自己的 transform 定位,不参与共享壁纸取景。玻璃高光/阴影混合模式支持 CSS 模式以及 linear-dodgelinear-burn

混合模式

固定或可调(可调时 options 必须包含 default):

{ "blendMode": "soft-light" }

支持值:normalmultiplyscreenoverlaydarkenlightencolor-dodgecolor-burnhard-lightsoft-lightdifferenceexclusionhuesaturationcolorluminosity

蒙版

任何图层都可设置 mask

{ "mask": "./masks/window.png" }

蒙版图片缩放至整个 Canvas,白色显示、黑色隐藏、灰色产生半透明。自身透明度继续生效。

大纲