feat: 完善敲木鱼玩法模板链路
@@ -16,14 +16,38 @@
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-22 敲木鱼图片创作采用双图 image2 链路
|
||||
## 2026-05-23 寓教于乐玩法入口收敛为马路街区式横向延展
|
||||
|
||||
- 背景:敲木鱼自定义题材只生成中央敲击物时,运行态缺少与新主题匹配的竖屏背景;若直接让背景 prompt 自由发挥,又容易把敲击物或木槌画进背景里。
|
||||
- 决策:敲木鱼 `compile-draft` / `regenerate-hit-object` 图片链路固定为两步 image2 edits。第一步调用 VectorEngine `/v1/images/edits` + `gpt-image-2`,以默认木鱼图作为结构和画风参考,用户上传参考图只作为同次请求的新主题参考,结合用户题材关键词或参考图主题生成 `1:1` 透明底新敲击物并写回 `hitObjectAsset`;第二步以新敲击物图作为主题和画风参考,结合用户原始题材生成 `9:16` 背景环境图并写回 `backgroundAsset`。两步 prompt 使用 PRD 中固定隐藏关键词,不追加额外 negative prompt;背景图不得包含敲击物本体或木槌互动物品。
|
||||
- 影响范围:`api-server` 木鱼图片生成编排、`wooden_fish_work_profile.background_asset_json`、shared contracts、前端结果页 / 运行态背景展示、敲木鱼 PRD 和平台链路文档。
|
||||
- 背景:参考图和视频表明,寓教于乐板块的图形化入口更接近 Toca Life World 式的“中央马路串联主题小建筑群街区”,而不是乐园分区、环形岛屿或世界球体结构。
|
||||
- 决策:后续寓教于乐入口概念图统一采用“横屏 16:9、中央灰蓝色马路贯穿、建筑群沿路两侧聚集、左右边缘持续出画可接下一屏”的结构;马路必须带车道线、斑马线、路口和小汽车,区域通过水果店、画笔工坊、运动馆、音乐剧场、树屋温室等主题小建筑群暗示,不再使用乐园式分区组织。
|
||||
- 影响范围:寓教于乐入口概念图、image2 prompt 生成脚本、设计文档、后续横向世界地图探索稿。
|
||||
- 验证方式:新生成概念图必须满足“马路是主脊线、建筑群成街区聚合、左右边缘可延展、无品牌乐园元素”四项约束;若图面再跑回环形乐园或漂浮岛,需要重新收敛 prompt。
|
||||
- 关联文档:`docs/design/【前端体验】寓教于乐Toca式横向世界地图入口概念图-2026-05-23.md`、`scripts/generate-edutainment-road-town-map-concepts.mjs`、`output/imagegen/edutainment-road-town-map-concepts-20260523/`。
|
||||
|
||||
## 2026-05-22 敲木鱼图片创作采用三图 image2 链路
|
||||
|
||||
- 背景:敲木鱼自定义题材只生成中央敲击物时,运行态缺少与新主题匹配的竖屏背景和主题化返回按钮;若直接让背景 prompt 自由发挥,又容易把敲击物或木槌画进背景里。
|
||||
- 决策:敲木鱼 `compile-draft` / `regenerate-hit-object` 图片链路固定为三步 image2 edits。第一步调用 VectorEngine `/v1/images/edits` + `gpt-image-2`,以默认木鱼图作为结构和画风参考,用户上传参考图只作为同次请求的新主题参考,结合用户题材关键词或参考图主题生成 `1:1` 绿色背景主体图;`api-server` 先对这张绿幕图执行去绿背景处理并写回 `hitObjectAsset`。第二步必须以第一步抠图完成后的透明敲击物图作为参考,结合用户原始题材生成 `9:16` 背景环境图并写回 `backgroundAsset`,避免背景图继承绿幕或纯绿色画布。第三步必须以去绿后的敲击物主体图和背景环境图为参考,生成 `1:1` 绿色背景返回按钮图,服务端去绿后写回 `backButtonAsset`。三步 prompt 使用 PRD 中固定隐藏关键词,不追加额外 negative prompt;返回按钮只允许参考图约束圆形底色和箭头配色,不允许继承复杂造型、花纹、浮雕边、异形外框或装饰图案;背景图不得包含敲击物本体或木槌互动物品,返回按钮图不得包含文字、数字、水印或额外 UI 面板。
|
||||
- 影响范围:`api-server` 木鱼图片生成编排、`wooden_fish_work_profile.background_asset_json`、`wooden_fish_work_profile.back_button_asset_json`、shared contracts、前端结果页 / 运行态背景与返回按钮展示、敲木鱼 PRD 和平台链路文档。
|
||||
- 验证方式:执行 `cargo test -p api-server wooden_fish --manifest-path server-rs/Cargo.toml`、`cargo test -p spacetime-client wooden_fish --manifest-path server-rs/Cargo.toml`、`npm run spacetime:generate`、`npm run check:spacetime-schema`、`npm run typecheck`。
|
||||
- 关联文档:`docs/prd/【玩法创作】敲木鱼玩法模板PRD-2026-05-20.md`、`docs/【玩法创作】平台入口与玩法链路-2026-05-15.md`。
|
||||
|
||||
## 2026-05-22 敲木鱼敲击物暂不做服务端抠图后处理
|
||||
|
||||
- 背景:gpt-image-2 偶尔会把木鱼图直接回成带黑底或其它实底背景的 PNG,但服务端抠图后处理在玉米等主题上误伤过主体像素。
|
||||
- 决策:敲木鱼 hit object 落盘前暂不做服务端抠图后处理,当前只通过 prompt 强约束真实透明 alpha PNG、透明底、禁止黑底 / 白底 / 棋盘格 / 实底背景。后续若重启后处理,必须先有可验证的保守策略,只能清理画布边缘连通背景,不能抠掉主体内部深色结构或主题细节。
|
||||
- 影响范围:`server-rs/crates/api-server/src/wooden_fish.rs`、敲木鱼 PRD、平台链路文档、后续同类 image2 单图资产落盘策略。
|
||||
- 验证方式:`cargo test -p api-server wooden_fish --manifest-path server-rs/Cargo.toml`,并在试玩阶段确认主体像素未被后处理误删。
|
||||
- 关联文档:`docs/prd/【玩法创作】敲木鱼玩法模板PRD-2026-05-20.md`、`docs/【玩法创作】平台入口与玩法链路-2026-05-15.md`。
|
||||
|
||||
## 2026-05-22 敲木鱼背景中央禁主体要写成硬约束
|
||||
|
||||
- 背景:苹果等主题在试玩时,背景图中央仍可能残留主题主体,说明“外围设计”这种软描述不够。
|
||||
- 决策:敲木鱼背景 prompt 必须显式要求中央主体预留区保持干净,中央 40% 区域禁止出现主题主体、主体局部特写、轮廓影子、重复元素或主题主体碎片;主题元素只允许出现在外围氛围。
|
||||
- 影响范围:`server-rs/crates/api-server/src/wooden_fish.rs`、敲木鱼 PRD、平台链路文档、后续 image2 背景类玩法 prompt。
|
||||
- 验证方式:背景 prompt 单测应包含中央禁区硬约束,试玩图中央不再出现苹果或其它主题主体。
|
||||
- 关联文档:`docs/prd/【玩法创作】敲木鱼玩法模板PRD-2026-05-20.md`、`docs/【玩法创作】平台入口与玩法链路-2026-05-15.md`。
|
||||
|
||||
## 2026-05-21 外部 API 失败必须 OTLP 上报并落库
|
||||
|
||||
- 背景:图片生成等外部供应商调用失败时,仅返回 502/504 或普通日志无法支持后续按 provider、阶段和重试属性聚合排障。
|
||||
@@ -165,12 +189,12 @@
|
||||
- 验证方式:执行敲木鱼契约 / module / facade / runtime model / platform entry 定向测试、`npm run typecheck`、`npm run check:encoding`、`npm run check:spacetime-schema`、`cargo check -p api-server --manifest-path server-rs\Cargo.toml`,本地 smoke 使用 mock 短信配置后检查 `/healthz`。
|
||||
- 关联文档:`docs/prd/【玩法创作】敲木鱼玩法模板PRD-2026-05-20.md`、`docs/【玩法创作】平台入口与玩法链路-2026-05-15.md`、`docs/【后端架构】server-rs与SpacetimeDB数据契约-2026-05-15.md`。
|
||||
|
||||
## 2026-05-21 敲木鱼敲击音效复用通用 Vidu 音效链路
|
||||
## 2026-05-21 敲木鱼敲击音效当前只接受上传、录音或默认音
|
||||
|
||||
- 背景:敲木鱼创作需要通过“敲击音效”描述生成真实短音频,不能继续由 `spacetime-client` 合成 `/generated-wooden-fish-assets/...` 假路径;同时拼图和抓大鹅音频生成入口仍需保持关闭。
|
||||
- 决策:通用 `/api/creation/audio/sound-effect` 提交 Vidu 音效任务;`/api/creation/audio/sound-effect/{task_id}/asset` 只对木鱼 `hit_sound` 目标开放,完成查询、下载、OSS 私有对象、`asset_object` 和 entity binding 写入。木鱼 `compile-draft` / `generate-hit-sound` 在 `api-server` 内复用同一 helper 生成并注入 `hitSoundAsset`,`spacetime-client` 缺少真实 `hitSoundAsset` 时拒绝编译。拼图和抓大鹅相关目标继续返回 `410 Gone`。
|
||||
- 背景:敲木鱼按关键词生成的敲击音效约束不够稳定;当前创作阶段需要先关闭提示词生成音效,避免生成结果不符合敲击体验。
|
||||
- 决策:通用 `/api/creation/audio/sound-effect` 对木鱼 `hit_sound` 目标也返回 `410 Gone`。木鱼工作台只支持上传或麦克风录制音频;若用户未提供音频,`api-server` 写回内置默认木鱼音 `/wooden-fish/default-hit-sound.mp3`。`hitSoundPrompt` 只作为历史兼容字段保留,当前创作流程不使用;`spacetime-client` 不得合成 `/generated-wooden-fish-assets/...` 假路径。
|
||||
- 影响范围:`server-rs/crates/api-server/src/vector_engine_audio_generation.rs`、`server-rs/crates/api-server/src/wooden_fish.rs`、`server-rs/crates/spacetime-client/src/wooden_fish.rs`、`shared-contracts` / `packages/shared` 的 `creationAudio` 契约、敲木鱼 PRD 与平台链路文档。
|
||||
- 验证方式:执行 `cargo test -p shared-contracts creation_audio --manifest-path server-rs\Cargo.toml`、`cargo test -p spacetime-client wooden_fish --manifest-path server-rs\Cargo.toml`、`cargo test -p api-server wooden_fish --manifest-path server-rs\Cargo.toml`、`cargo test -p api-server disabled_creation_audio_targets_return_gone_except_wooden_fish_sound_effects --manifest-path server-rs\Cargo.toml`、`npm run typecheck`、`npm run check:encoding`,本地 smoke 检查 `/healthz`;真实生成需同时配置 VectorEngine 与 OSS AccessKey。
|
||||
- 验证方式:执行 `cargo test -p shared-contracts creation_audio --manifest-path server-rs\Cargo.toml`、`cargo test -p spacetime-client wooden_fish --manifest-path server-rs\Cargo.toml`、`cargo test -p api-server wooden_fish --manifest-path server-rs\Cargo.toml`、`cargo test -p api-server disabled_creation_audio_targets_return_gone_including_wooden_fish_sound_effects --manifest-path server-rs\Cargo.toml`、`npm run typecheck`、`npm run check:encoding`,本地 smoke 检查 `/healthz`。
|
||||
- 关联文档:`docs/prd/【玩法创作】敲木鱼玩法模板PRD-2026-05-20.md`、`docs/【玩法创作】平台入口与玩法链路-2026-05-15.md`、`docs/【后端架构】server-rs与SpacetimeDB数据契约-2026-05-15.md`。
|
||||
|
||||
## 2026-05-21 敲木鱼默认敲击物使用内置透明 PNG
|
||||
@@ -181,6 +205,14 @@
|
||||
- 验证方式:默认 `compile-draft` 返回的 `hitObjectAsset.generationProvider` 应为 `bundled-default` 且 `imageSrc=/wooden-fish/default-hit-object.png`;自定义关键词或参考图仍走 image2;前端静态资源可通过 Vite 直接访问。
|
||||
- 关联文档:`docs/prd/【玩法创作】敲木鱼玩法模板PRD-2026-05-20.md`、`docs/【玩法创作】平台入口与玩法链路-2026-05-15.md`。
|
||||
|
||||
## 2026-05-23 敲木鱼创作请求需要独立长超时
|
||||
|
||||
- 背景:敲木鱼 `createSession` 和 `executeAction` 都会串行等待多段 image2 生成、去绿背景处理和 OSS 落库;共享创作工厂默认 15 秒对这条链路太短,容易让前端先报 `请求超时:15000ms`。
|
||||
- 决策:敲木鱼 client 单独配置长等待窗口,同时覆盖会话创建和执行动作请求,不修改共享工厂默认值,避免影响其它轻量创作玩法。
|
||||
- 影响范围:`src/services/wooden-fish/woodenFishClient.ts`、`src/services/creation-agent/creationAgentClientFactory.ts`、敲木鱼工作台与生成页请求行为。
|
||||
- 验证方式:`npm test -- src/services/wooden-fish/woodenFishClient.test.ts`,并在本地敲木鱼创作时不再提前触发 15 秒超时。
|
||||
- 关联文档:`docs/prd/【玩法创作】敲木鱼玩法模板PRD-2026-05-20.md`、`docs/【玩法创作】平台入口与玩法链路-2026-05-15.md`。
|
||||
|
||||
## 2026-05-21 RPG publish_world 设定文本以后端草稿真相派生
|
||||
|
||||
- 背景:RPG 结果页发布动作只保证提交 `{ action: 'publish_world' }`;旧 agent 会话可能没有 `seed_text`,但 `draft_profile_json` 已经通过 `publish_gate` 并可发布。
|
||||
|
||||
@@ -39,6 +39,38 @@
|
||||
- 验证:`cargo test -p api-server puzzle_ui_spritesheet_postprocess_turns_green_screen_transparent --manifest-path server-rs\Cargo.toml`、`cargo test -p api-server puzzle_level_scene_spritesheet_and_background_requests_use_references --manifest-path server-rs\Cargo.toml`、`cargo test -p api-server match3d_derived_asset_prompts_match_three_sheet_pipeline --manifest-path server-rs\Cargo.toml`。
|
||||
- 关联:`server-rs/crates/api-server/src/puzzle/generation.rs`、`server-rs/crates/api-server/src/match3d/works.rs`、`server-rs/crates/api-server/src/generated_asset_sheets.rs`、`docs/【玩法创作】平台入口与玩法链路-2026-05-15.md`。
|
||||
|
||||
## 敲木鱼 hit object 不要只相信透明底 prompt
|
||||
|
||||
- 现象:苹果等主题试玩时,中央敲击物图带明显黑底;背景图中央还可能出现苹果主体,或背景环境图偶发变成纯绿色底,和“中央只叠加 hitObjectAsset”的运行态设定冲突。
|
||||
- 原因:gpt-image-2 对“透明底”和“背景只做外围氛围”的遵循不稳定。若 hit object 直接入库,黑底会被当成真实像素展示;若背景 prompt 只有软描述,模型会把主题主体画进中央。第一步为了去背刻意要求绿幕图时,如果第二步参考图或 prompt 没有切断绿幕语义,背景图也可能继承纯绿色画布。
|
||||
- 处理:敲木鱼 hit object prompt 固定要求先输出 `1:1` 绿色背景主体图(纯绿色绿幕、单一 `#00FF00` 背景),再由 `api-server` 只对绿幕背景做去绿透明化;不要回到黑底 / 白底 / 透明底 prompt 后再做泛抠图。背景生成必须使用第一步抠图完成后的透明图作为参考图,并在 prompt 中显式禁止继承绿色底色、绿幕底色或纯绿色画布;背景 prompt 还要固定要求中央 40% 主体预留区干净,禁止主题主体、局部特写、轮廓影子、重复元素和主题碎片,只允许外围氛围。
|
||||
- 验证:`cargo test -p api-server wooden_fish --manifest-path server-rs\Cargo.toml`,并用花朵 / 苹果 / 玉米主题跑试玩图确认绿幕被去除、主体未被抠除、背景中央不出现主题主体,背景环境图不再出现纯绿色底。
|
||||
- 关联:`server-rs/crates/api-server/src/wooden_fish.rs`、`docs/prd/【玩法创作】敲木鱼玩法模板PRD-2026-05-20.md`、`docs/【玩法创作】平台入口与玩法链路-2026-05-15.md`。
|
||||
|
||||
## 敲木鱼返回按钮不要让模型自由发挥外圈花纹
|
||||
|
||||
- 现象:返回按钮试玩图有时会被画成徽章、花盘、浮雕圆牌,甚至出现复杂外圈和装饰花纹,左箭头反而不够突出。
|
||||
- 原因:prompt 只说“主题化返回按钮”时,image2 会把参考图里的装饰语言一起学进去;如果没有把形状收束到“标准圆形 + 单个居中左箭头”,模型会优先补造型而不是补图标。
|
||||
- 处理:返回按钮生成 prompt 必须只允许参考图约束圆形底色与箭头配色,明确禁止复杂造型、花纹、浮雕边、异形外框和装饰图案,按钮本体固定为标准圆形。
|
||||
- 验证:`cargo test -p api-server wooden_fish --manifest-path server-rs\Cargo.toml`,并重新试玩确认返回按钮只剩圆形底色和中央左箭头。
|
||||
- 关联:`server-rs/crates/api-server/src/wooden_fish.rs`、`docs/prd/【玩法创作】敲木鱼玩法模板PRD-2026-05-20.md`、`docs/【玩法创作】平台入口与玩法链路-2026-05-15.md`.
|
||||
|
||||
## 敲木鱼创作生成不要沿用 15 秒会话超时
|
||||
|
||||
- 现象:敲木鱼工作台点击“生成”后,前端直接提示 `请求超时:15000ms`,但后端和 VectorEngine 未必已经失败。
|
||||
- 原因:`createCreationAgentClient` 的 `createSessionTimeoutMs` 默认是 15 秒;敲木鱼创作链路会继续进入生成页并执行多次 image2 edits、去绿背景处理和 OSS 写入,单次请求窗口如果继承共享默认值,会早于业务生成完成被前端中断。
|
||||
- 处理:敲木鱼 client 必须单独配置长等待窗口,同时覆盖 `createSessionTimeoutMs` 与 `executeActionTimeoutMs`;不要修改共享默认值影响其它轻量创作 Agent。
|
||||
- 验证:`npm run test -- src/services/wooden-fish/woodenFishClient.test.ts`,并在本地触发一次木鱼创作确认不再出现 15 秒前端超时。
|
||||
- 关联:`src/services/wooden-fish/woodenFishClient.ts`、`src/services/creation-agent/creationAgentClientFactory.ts`、`docs/prd/【玩法创作】敲木鱼玩法模板PRD-2026-05-20.md`。
|
||||
|
||||
## 敲木鱼点击生成出现 SpacetimeDB procedure 超时先查版本错配
|
||||
|
||||
- 现象:敲木鱼创作时点击“生成”,前端提示 `SpacetimeDB procedure 调用超时`,但服务端日志更早出现 `Failed to BSATN deserialize procedure return value` 或类似反序列化错误。
|
||||
- 原因:本机 `spacetime` CLI / standalone 版本与 `server-rs/Cargo.toml` 锁定的 `spacetimedb` 版本不一致时,procedure 返回值会在宿主侧反序列化失败,api-server 继续等待就表现成调用超时。若旧 standalone 进程还在复用,也会把这个错配继续带进新一轮创作。
|
||||
- 处理:先用 `spacetime --version` 确认 `spacetimedb tool version`,再和 `server-rs/Cargo.toml` 的 `spacetimedb = "..."` 对齐;必要时执行 `spacetime version install <version> && spacetime version use <version>`,然后重启 `npm run dev:spacetime`。当前 dev 脚本会在启动和复用本地 SpacetimeDB 前写入并校验 `dev-spacetime-tool-version`,避免继续复用旧宿主。
|
||||
- 验证:`spacetime --version` 输出与 `server-rs/Cargo.toml` 一致,`http://127.0.0.1:3101/v1/ping` 正常,`npm run test -- scripts/dev.test.ts` 通过,敲木鱼创作点击生成不再卡在 procedure timeout。
|
||||
- 关联:`scripts/dev.mjs`、`scripts/dev.test.ts`、`server-rs/Cargo.toml`、`docs/【开发运维】本地开发验证与生产运维-2026-05-15.md`。
|
||||
|
||||
## 拼图 UI spritesheet 运行态不要二次包圆底或拉伸比例
|
||||
|
||||
- 现象:拼图运行态左上返回和右上设置按钮外面出现白色圆圈;底部“提示 / 原图 / 冻结”三枚素材被压扁、拉宽或拉成正圆,和图集原始按钮比例不一致。
|
||||
@@ -1331,6 +1363,14 @@
|
||||
- 验证:`npm run test -- scripts/dev.test.ts`;重新运行 `npm run dev` 后 api-server 启动日志不再出现上述 subscribe 401,`/healthz` 返回 200。
|
||||
- 关联:`scripts/dev.mjs`、`scripts/dev.test.ts`、`docs/【开发运维】本地开发验证与生产运维-2026-05-15.md`。
|
||||
|
||||
## 创作作品架或公开列表异常先查本地 SpacetimeDB schema 漂移
|
||||
|
||||
- 现象:本地 `http://127.0.0.1:3000/` 启动后,`api-server` 日志反复出现 `Host returned error when processing subscription query: no such table: puzzle_gallery_card_view`;或创作中心草稿 / 已发布作品整块消失,`GET /api/creation-entry/config` 返回 `502` 且 details 为 `No such procedure`。
|
||||
- 原因:本地 `.env.local` 或 `spacetime.local.json` 指向的 SpacetimeDB 库没有发布当前 `spacetime-module`,或当前 CLI 身份无权发布该库;例如旧 `xushi-p4wfr` 库缺 `get_creation_entry_config` / `puzzle_gallery_card_view`,但当前代码的 `spacetime-client` 启动时会长期订阅这些公开 read model。
|
||||
- 处理:先用 `spacetime sql <database> "SELECT * FROM puzzle_gallery_card_view LIMIT 1" --server http://127.0.0.1:3101` 确认目标库是否有当前 view;若只是本地验证,可用 gitignored 的 `spacetime.local.json` 指向可发布且已包含当前 schema 的库,例如 `{"database":"genarrative-dev-codex"}`。该 JSON 必须无 UTF-8 BOM,否则 `scripts/dev.mjs` 会忽略它。修改后用 `npm run dev:api-server -- --database <database> --spacetime-port 3101 --api-port 8082 --no-interactive` 重启。
|
||||
- 验证:`curl.exe -i http://127.0.0.1:8082/healthz` 返回 `200`;`curl.exe -i http://127.0.0.1:8082/api/runtime/puzzle/gallery` 返回 `200`;浏览器打开 `http://127.0.0.1:3000/` 无 `puzzle_gallery_card_view` 控制台或后端日志错误。
|
||||
- 关联:`scripts/dev.mjs`、`server-rs/crates/spacetime-client/src/lib.rs`、`docs/【开发运维】本地开发验证与生产运维-2026-05-15.md`。
|
||||
|
||||
## 创作作品架消失先查入口配置 procedure 与本地库权限
|
||||
|
||||
- 现象:寓教于乐或创作中心下草稿 / 已发布作品突然整块消失,`GET /api/creation-entry/config` 返回 `502`,details 中为 `No such procedure`。
|
||||
|
||||
48
docs/design/【前端体验】寓教于乐Toca式横向世界地图入口概念图-2026-05-23.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# 寓教于乐 马路街区式横向世界入口概念图
|
||||
|
||||
更新时间:`2026-05-23`
|
||||
|
||||
## 背景
|
||||
|
||||
寓教于乐板块需要继续探索图形化玩法入口。前一轮“乐园地图 / 世界地图”方向已被证明不够贴近参考图,本轮进一步收敛为“中央马路串联主题小建筑群街区”的结构,让每一屏都像一个可横向滑动的儿童小镇街区。
|
||||
|
||||
## 参考结论
|
||||
|
||||
从参考图和视频里提炼出的关键结构是:
|
||||
|
||||
1. 每一屏都是一组主题小建筑群,不是稀疏乐园点位。
|
||||
2. 中央马路是主路径,汽车沿路通过,边缘继续延伸到下一屏。
|
||||
3. 建筑群贴着道路两侧聚合,形成清晰街区,而不是围绕中央广场或环形路径展开。
|
||||
4. 左右两边都要有明确“可继续探索”的出画感,方便后续做横向滑动世界。
|
||||
|
||||
## 目标
|
||||
|
||||
- 视觉上像可滑动的儿童街区地图。
|
||||
- 每一屏都能作为独立探索单元,并且能自然接到前后相邻屏。
|
||||
- 保持寓教于乐既有的卡通绘本风,不借用真实品牌乐园或现成 IP。
|
||||
- 适合后续叠加入口按钮、焦点框和中文标题。
|
||||
|
||||
## 本次概念方向
|
||||
|
||||
1. 识物认知主街
|
||||
2. 绘画创作工坊街
|
||||
3. 运动音乐街区
|
||||
4. 自然探索实验大道
|
||||
|
||||
## 推荐方向
|
||||
|
||||
优先推荐 `绘画创作工坊街` 与 `运动音乐街区`。这两条在当前批次里最接近“中央马路 + 两侧主题小建筑群 + 左右可延展”的参考结构。
|
||||
|
||||
## 生图脚本
|
||||
|
||||
- 生成脚本:`scripts/generate-edutainment-road-town-map-concepts.mjs`
|
||||
- 输出目录:`output/imagegen/edutainment-road-town-map-concepts-20260523/`
|
||||
- 风格参考:`public/child-motion-demo/picture-book-grass-stage.png`
|
||||
|
||||
## 说明
|
||||
|
||||
本次产物是设计概念稿,不直接进入正式资源目录。后续如果继续收敛,可以以 `城市公园脊` 为母版,向左、向右补相邻屏幕的区域内容。
|
||||
|
||||
## 当前结论
|
||||
|
||||
乐园分区结构可以抛弃,后续所有概念都优先按“马路街区式一屏一屏延展”的结构继续迭代。
|
||||
@@ -14,7 +14,7 @@
|
||||
创作入口 -> 工作台 -> 生成页 -> 结果页 -> 试玩 -> 发布 -> 运行态 -> 公开详情/分享
|
||||
```
|
||||
|
||||
首版默认屏幕中央展示内置卡通透明敲击物图案 `/wooden-fish/default-hit-object.png`。玩家点击运行态非功能区时触发一次敲击:播放敲击音效、敲击物图案执行被敲击动画,并在敲击物上方随机飘出一条祝福词。顶部计数器只在某条祝福词首次出现时创建,之后该词每次出现都累加。计数仅属于当前单次 run,不进入账号长期账本。
|
||||
首版默认屏幕中央展示内置卡通透明敲击物图案 `/wooden-fish/default-hit-object.png`。玩家点击运行态非功能区时触发一次敲击:播放敲击音效、敲击物图案执行被敲击动画,并在敲击物上方随机飘出一条祝福词。顶部只展示总数记录;子项计数收纳到总数卡片下方的折叠面板中,总数卡片点击后展开各子项计数,词条在面板中预置显示,未出现时初始值为 0,点击面板外收起。计数仅属于当前单次 run,不进入账号长期账本。
|
||||
|
||||
## 2. 模板定位
|
||||
|
||||
@@ -86,9 +86,9 @@ WF-*
|
||||
- `slotId=hit-sound`
|
||||
- `slotType=hit-sound-audio`
|
||||
- `slotName=敲击音效`
|
||||
- 来源:`hitSoundPrompt` 生成,或上传/麦克风录制音频
|
||||
- 来源:用户上传/麦克风录制音频,或使用默认木鱼音
|
||||
- 写回字段:`hitSoundAsset`
|
||||
- 描述生成能力:复用通用创作音频接口 `/api/creation/audio/sound-effect` 的 VectorEngine Vidu 音效生成与 OSS 持久化链路
|
||||
- 默认兜底:`/wooden-fish/default-hit-sound.mp3`
|
||||
- API 命名空间:
|
||||
- `/api/creation/wooden-fish/...`
|
||||
- `/api/runtime/wooden-fish/...`
|
||||
@@ -122,8 +122,8 @@ WF-*
|
||||
1. `workDescription`:作品简介;
|
||||
2. `themeTags[]`:最多 6 个标签;
|
||||
3. `hitObjectReferenceImageSrc`:上传或历史图引用,只能作为 image2 参考,不可直接进入运行态;
|
||||
4. `hitSoundPrompt`:生成音效描述;
|
||||
5. `hitSoundAsset`:用户上传或录音产生的音频资产。
|
||||
4. `hitSoundPrompt`:历史兼容字段,当前创作流程不再使用;
|
||||
5. `hitSoundAsset`:用户上传、录音或默认音频资产。
|
||||
|
||||
默认祝福词:
|
||||
|
||||
@@ -142,39 +142,54 @@ WF-*
|
||||
|
||||
## 6. 生成规则
|
||||
|
||||
### 6.1 敲击物图案与背景环境图
|
||||
### 6.1 敲击物图案、背景环境图与返回按钮图
|
||||
|
||||
默认模板在用户未自定义关键词且未上传参考图时,`compile-draft` 使用内置透明 PNG `/wooden-fish/default-hit-object.png` 写回 `hitObjectAsset`,`generationProvider="bundled-default"`。这张图来自 image2 对原始参考图的卡通风格化重绘,固定为模板默认资源,避免默认关键词在每次生成时改变造型。即使使用内置默认敲击物,首版仍需要生成 `backgroundAsset`,背景环境图使用默认敲击物作为主题和画风参考。
|
||||
默认模板在用户未自定义关键词且未上传参考图时,`compile-draft` 使用内置透明 PNG `/wooden-fish/default-hit-object.png` 写回 `hitObjectAsset`,`generationProvider="bundled-default"`。这张图来自 image2 对原始参考图的卡通风格化重绘,固定为模板默认资源,避免默认关键词在每次生成时改变造型。即使使用内置默认敲击物,首版仍需要生成 `backgroundAsset` 与 `backButtonAsset`,背景环境图和主题返回按钮图都使用默认敲击物作为主题和画风参考。
|
||||
|
||||
用户输入自定义关键词、上传参考图,或在结果页主动重生成敲击物时,`compile-draft` 与 `regenerate-hit-object` 必须先为敲击物图案生成 image2 单图资产,再基于新敲击物图案生成背景环境图,并由 `api-server` 注入写回 `hitObjectAsset` 与 `backgroundAsset`。前端 action 请求不得自带 `hitObjectAsset` 或 `backgroundAsset` 短路生成。如果用户上传参考图,后端只能把该图作为 image2 参考图或主题参考;运行态不得直接使用上传图。
|
||||
用户输入自定义关键词、上传参考图,或在结果页主动重生成敲击物时,`compile-draft` 与 `regenerate-hit-object` 必须先为敲击物图案生成 image2 单图资产,再基于新敲击物图案生成背景环境图,最后基于去绿后的敲击物主体和背景环境图生成主题返回按钮图,并由 `api-server` 注入写回 `hitObjectAsset`、`backgroundAsset` 与 `backButtonAsset`。前端 action 请求不得自带 `hitObjectAsset`、`backgroundAsset` 或 `backButtonAsset` 短路生成。如果用户上传参考图,后端只能把该图作为 image2 参考图或主题参考;运行态不得直接使用上传图。
|
||||
|
||||
敲击物图案生成流程固定为:
|
||||
|
||||
1. 调用 VectorEngine `/v1/images/edits`,模型固定为 `gpt-image-2`;
|
||||
2. multipart 参考图固定包含默认木鱼图 `/wooden-fish/default-hit-object.png`,作为基础结构和画风参考;
|
||||
3. 若用户上传参考图,该图只作为新主题参考追加到同一次 image2 edits 请求,不直接进入运行态;
|
||||
4. 尺寸固定 `1:1`,透明底;
|
||||
4. 尺寸固定 `1:1`,必须输出绿色背景主体图(纯绿色绿幕),背景为单一纯绿色 `#00FF00`,并显式禁止黑底、白底、棋盘格、纸板底或任何其它实底背景;
|
||||
5. 提示词严格使用:
|
||||
|
||||
```text
|
||||
生成敲木鱼新样式,要求结构,画风与参考图保持高度一致,新样式颜色搭配使用新主题对应的颜色。
|
||||
生成敲木鱼新样式,要求结构,画风与参考图保持高度一致,新样式颜色搭配使用新主题对应的颜色。尺寸1:1,先输出绿色背景主体图(纯绿色绿幕),背景必须是单一纯绿色 #00FF00 且平整无纹理、无渐变、无阴影、无道具,主体完整居中,主体边缘必须干净,不要直接输出透明底。随后由服务端对绿色背景主体图做抠图去除绿色背景。最终结果只保留单个敲击物图案,禁止黑底、白底、棋盘格、纸板底或任何实底背景;主体本身不要使用与绿幕接近的纯绿色,若新主题天然包含绿色,请改用偏深、偏黄或偏蓝的绿色并与绿幕清晰区分。
|
||||
新主题为:(用户提供参考图或用户输入关键词)
|
||||
```
|
||||
|
||||
敲击物图案落盘前,`api-server` 必须只对第一步生成的纯绿色绿幕背景执行去绿处理,把绿色背景转成真实透明 alpha PNG;不得对黑底、白底或其它未知实底执行泛抠图,避免误伤玉米等主体像素。去绿处理必须保留主体内部深色结构和主题细节。
|
||||
|
||||
背景环境图生成流程固定为:
|
||||
|
||||
1. 调用 VectorEngine `/v1/images/edits`,模型固定为 `gpt-image-2`;
|
||||
2. multipart 参考图固定为第一步新生成的敲击物图案;默认未生成新敲击物时使用内置默认敲击物图案;
|
||||
2. multipart 参考图固定为第一步敲击物图案抠图完成后的透明图;默认未生成新敲击物时使用内置默认敲击物图案的透明兜底图;
|
||||
3. 尺寸固定竖屏 `9:16`;
|
||||
4. 背景环境图只适配新敲击物主题和画风,背景中不得包含新敲击物本体,也不得增加木槌互动物品;
|
||||
4. 背景环境图只适配新敲击物主题和画风,背景中不得包含新敲击物本体,也不得增加木槌互动物品;中央主体预留区必须保持干净,画面中央 40% 区域禁止出现主题主体、主体局部特写、主体轮廓影子、重复元素或主题主体的局部碎片;
|
||||
5. 提示词严格使用:
|
||||
|
||||
```text
|
||||
生成敲木鱼背景,要求主题,画风与参考图保持高度一致,背景元素和颜色搭配与主题对应,木鱼预设在屏幕中央位置,木鱼主体周围元素保持干净,背景氛围围绕外围设计,背景环境图中不包含新木鱼物品,背景氛围中不增加木槌互动物品。
|
||||
生成敲木鱼背景,要求主题,画风与参考图保持高度一致,背景元素和颜色搭配与主题对应,木鱼预设在屏幕中央位置,木鱼主体周围元素保持干净,背景氛围围绕外围设计,背景环境图中不包含新木鱼物品,背景氛围中不增加木槌互动物品。尺寸竖屏9:16。参考图必须是第一步敲击物抠图完成后的透明图,不继承任何绿色底色、绿幕底色或纯绿色画布,并要求最终输出完整不透明的背景环境图。中央主体预留区必须保持干净,画面中央 40% 区域禁止出现主题主体、主体局部特写、主体轮廓影子、重复元素或主题主体的局部碎片;主题元素只允许出现在外围氛围,不得把主题物品画在画面中央,也不要把主题物品作为背景中心装饰。
|
||||
主题为:(用户提供参考图或用户输入关键词)
|
||||
```
|
||||
|
||||
落库链路固定为:`api-server` 调用 VectorEngine `/v1/images/edits` -> 服务端上传 OSS 私有对象 -> `confirm_asset_object` 登记资产对象 -> `bind_asset_object_to_entity` 绑定到 `entityKind='wooden_fish_work'`。敲击物绑定 `slot='hit_object'`、`assetKind='wooden_fish_hit_object'`,背景绑定 `slot='background'`、`assetKind='wooden_fish_background'`。写回时把 `legacyPublicPath` 分别写入 `hitObjectAsset.imageSrc` 与 `backgroundAsset.imageSrc`。不得只拼 `/generated-wooden-fish-assets/...` 占位路径;前端会对 generated legacy path 走 `/api/assets/read-url` 换签,OSS 中没有真实对象时图片无法显示。
|
||||
返回按钮图生成流程固定为:
|
||||
|
||||
1. 调用 VectorEngine `/v1/images/edits`,模型固定为 `gpt-image-2`;
|
||||
2. multipart 参考图固定包含第一步去除绿色背景后的敲击物主体图,以及第二步生成的背景环境图;
|
||||
3. 尺寸固定 `1:1`,必须输出绿色背景主体图(纯绿色绿幕),后端落库前执行同一套去绿背景处理;
|
||||
4. 按主题、画风、材质和配色生成左上角返回按钮图,但参考图只用于约束圆形底色和中央左箭头的颜色搭配,不得借鉴复杂造型、花纹、浮雕边、异形外框或装饰图案;按钮必须始终是标准圆形,中央只保留单个清晰左箭头或返回箭头,不得包含文字、数字、水印、额外 UI 面板、木槌或敲击道具;
|
||||
5. 提示词严格使用:
|
||||
|
||||
```text
|
||||
生成敲木鱼左上角返回按钮图。要求以参考图-去除绿色背景后的敲击物主体和背景环境图为主题、画风、材质和配色参考,但参考图只用来约束圆形底色和中央左箭头的颜色搭配,不要继承复杂造型、花纹、浮雕边、异形外框或装饰图案。按钮必须始终是标准圆形,整体像单个圆形图标,圆心居中,圆形内部只保留一个清晰、简洁、居中的向左返回箭头,不要出现文字、数字、水印、按钮外标签、额外 UI 面板、木槌或敲击道具。尺寸1:1,输出绿色背景主体图(纯绿色绿幕),背景必须是单一纯绿色 #00FF00 且平整无纹理、无渐变、无阴影。按钮主体边缘干净,后续由服务端扣除绿色背景;按钮底色不要使用与绿幕接近的纯绿色,若主题天然包含绿色,请仅在圆形底色上使用偏深、偏黄或偏蓝的主题绿色,并用更高对比的箭头颜色区分。
|
||||
主题为:(用户提供参考图或用户输入关键词)
|
||||
```
|
||||
|
||||
落库链路固定为:`api-server` 调用 VectorEngine `/v1/images/edits` -> 服务端上传 OSS 私有对象 -> `confirm_asset_object` 登记资产对象 -> `bind_asset_object_to_entity` 绑定到 `entityKind='wooden_fish_work'`。敲击物绑定 `slot='hit_object'`、`assetKind='wooden_fish_hit_object'`,背景绑定 `slot='background'`、`assetKind='wooden_fish_background'`,返回按钮绑定 `slot='back_button'`、`assetKind='wooden_fish_back_button'`。写回时把 `legacyPublicPath` 分别写入 `hitObjectAsset.imageSrc`、`backgroundAsset.imageSrc` 与 `backButtonAsset.imageSrc`。不得只拼 `/generated-wooden-fish-assets/...` 占位路径;前端会对 generated legacy path 走 `/api/assets/read-url` 换签,OSS 中没有真实对象时图片无法显示。
|
||||
|
||||
默认图案要求:
|
||||
|
||||
@@ -188,18 +203,18 @@ WF-*
|
||||
|
||||
音效统一写回 `hitSoundAsset`。
|
||||
|
||||
生成或写回规则:
|
||||
写回规则:
|
||||
|
||||
1. 若 payload 已包含上传/录音音频资产,`compile-draft` 跳过音效生成,直接持久化该资产;
|
||||
2. 若 payload 只包含 `hitSoundPrompt`,`api-server` 复用通用创作音频能力提交 VectorEngine Vidu `sound_effect` 任务,轮询生成结果,下载音频,写入 OSS 私有对象,登记 `asset_object`,并绑定到 `entityKind='wooden_fish_work'`、`slot='hit_sound'`、`assetKind='wooden_fish_hit_sound'`,最后注入 `hitSoundAsset`;
|
||||
3. 若两者都没有,后端生成默认“清脆短促木鱼敲击声”;
|
||||
2. 若 payload 已上传或录制音频,则直接写回 `hitSoundAsset`;
|
||||
3. 若两者都没有,后端写回默认木鱼音 `/wooden-fish/default-hit-sound.mp3`;
|
||||
4. 音效资产必须包含可播放地址、对象键、asset object id、来源和可选时长;
|
||||
5. 通用创作音频接口对 `wooden_fish` 的 `hit_sound` 目标不得返回 `410 Gone`,对应 `storagePrefix='wooden_fish_assets'`;
|
||||
6. `spacetime-client` 不得自行合成 `/generated-wooden-fish-assets/...` 音效占位路径,缺少真实 `hitSoundAsset` 时必须拒绝编译。
|
||||
5. 通用创作音频接口当前对 `wooden_fish` 的 `hit_sound` 目标返回 `410 Gone`,不得在创作流程中按提示词生成音效;
|
||||
6. `spacetime-client` 不得自行合成 `/generated-wooden-fish-assets/...` 音效占位路径;缺少真实 `hitSoundAsset` 时应使用默认木鱼音兜底展示与播放。
|
||||
|
||||
### 6.3 封面
|
||||
|
||||
首版封面使用 `hitObjectAsset.imageSrc` 作为 `coverImageSrc`。背景环境图不作为封面图,不单独新增第三次图片生成。
|
||||
首版封面使用 `hitObjectAsset.imageSrc` 作为 `coverImageSrc`。背景环境图与返回按钮图不作为封面图。
|
||||
|
||||
## 7. 契约草案
|
||||
|
||||
@@ -213,13 +228,14 @@ WF-*
|
||||
6. `themeTags[]`;
|
||||
7. `hitObjectPrompt`;
|
||||
8. `hitObjectReferenceImageSrc`;
|
||||
9. `hitSoundPrompt`;
|
||||
9. `hitSoundPrompt`,历史兼容字段,当前创作流程恒为 `null`;
|
||||
10. `floatingWords[]`;
|
||||
11. `hitObjectAsset`;
|
||||
12. `backgroundAsset`;
|
||||
13. `hitSoundAsset`;
|
||||
14. `coverImageSrc`;
|
||||
15. `generationStatus`。
|
||||
13. `backButtonAsset`;
|
||||
14. `hitSoundAsset`;
|
||||
15. `coverImageSrc`;
|
||||
16. `generationStatus`。
|
||||
|
||||
`WoodenFishImageAsset` 至少包含:
|
||||
|
||||
@@ -238,7 +254,7 @@ WF-*
|
||||
2. `audioSrc`;
|
||||
3. `audioObjectKey`;
|
||||
4. `assetObjectId`;
|
||||
5. `source = generated | uploaded | recorded | placeholder`;
|
||||
5. `source = uploaded | recorded | bundled-default`;
|
||||
6. `prompt`;
|
||||
7. `durationMs`。
|
||||
|
||||
@@ -277,7 +293,6 @@ GET /api/runtime/wooden-fish/gallery/{publicWorkCode}
|
||||
```text
|
||||
compile-draft
|
||||
regenerate-hit-object
|
||||
generate-hit-sound
|
||||
replace-hit-sound
|
||||
update-work-meta
|
||||
update-floating-words
|
||||
@@ -289,19 +304,21 @@ finish
|
||||
|
||||
`compile-draft` 是长耗时动作。前端进入生成页后应展示可恢复进度;如果请求失败,标记失败前必须复读 session,确认后端是否已经生成并写回草稿。
|
||||
|
||||
敲木鱼创作请求在前端必须使用长等待窗口,避免 `createSession` 或 `executeAction` 仍沿用共享创作工厂默认的 15 秒超时。因为 `compile-draft` 会串行等待敲击物、背景、返回按钮和 OSS 落库,木鱼 client 需要单独配置与整条 image2 链路匹配的超时。
|
||||
|
||||
## 9. SpacetimeDB 表和 view
|
||||
|
||||
新增表:
|
||||
|
||||
1. `wooden_fish_agent_session`;
|
||||
2. `wooden_fish_work_profile`,其中 `background_asset_json` 保存背景环境图资产快照;
|
||||
2. `wooden_fish_work_profile`,其中 `background_asset_json` 保存背景环境图资产快照,`back_button_asset_json` 保存主题返回按钮图资产快照;
|
||||
3. `wooden_fish_runtime_run`;
|
||||
4. `wooden_fish_event`。
|
||||
|
||||
新增 view:
|
||||
|
||||
1. `wooden_fish_gallery_card_view`:公开列表卡片投影,只暴露已发布作品;
|
||||
2. `wooden_fish_gallery_view`:公开详情兼容投影,包含图案、音效和祝福词配置。
|
||||
2. `wooden_fish_gallery_view`:公开详情兼容投影,包含图案、背景、返回按钮、音效和祝福词配置。
|
||||
|
||||
新增或调整表、procedure、view 后必须同步 `migration.rs`、后端表目录、生成 bindings,并执行 `npm run check:spacetime-schema`。
|
||||
|
||||
@@ -322,11 +339,11 @@ finish
|
||||
结果页必须支持:
|
||||
|
||||
1. 重生成敲击物图案;
|
||||
2. 生成、上传或替换敲击音效;
|
||||
2. 上传、录制或替换敲击音效;未提供时使用默认木鱼音;
|
||||
3. 修改标题、简介和标签;
|
||||
4. 修改祝福词,最多 8 条。
|
||||
|
||||
图案重生成和音效生成是独立局部生成态,不得把已有可查看结果重新变成不可打开的全局生成中。
|
||||
图案重生成是独立局部生成态,不得把已有可查看结果重新变成不可打开的全局生成中。音效替换只接受上传或录音资产,不触发提示词音效生成。
|
||||
|
||||
## 11. 运行态规则
|
||||
|
||||
@@ -334,7 +351,7 @@ finish
|
||||
|
||||
功能区:
|
||||
|
||||
1. 顶部计数器;
|
||||
1. 顶部总数记录卡和其下拉的子项计数器面板;
|
||||
2. 设置、暂停、返回、发布分享等按钮;
|
||||
3. 结果弹层和音频授权提示。
|
||||
|
||||
@@ -343,11 +360,13 @@ finish
|
||||
1. 点击非功能区才算一次敲击;
|
||||
2. 每次敲击立即本地累加 `totalTapCount`;
|
||||
3. 随机等概率从 `floatingWords[]` 中取一个词条;
|
||||
4. 若词条首次出现,顶部创建对应计数器;
|
||||
4. 子项计数面板中预置展示所有词条,未出现词条初始值为 0;
|
||||
5. 后续同词条出现时对应计数器 +1;
|
||||
6. 播放敲击音效;
|
||||
7. 敲击物图案执行压缩、回弹或轻微震动动画;
|
||||
8. 木鱼上方飘出“词条+1”并淡出。
|
||||
8. 木鱼上方飘出“词条+1”并淡出,飘字只显示文字本体,不加底板、胶囊背景或说明面板。
|
||||
|
||||
运行态左上角返回按钮必须优先使用 `backButtonAsset` 渲染主题化按钮图;缺失时才回退通用图标按钮。运行态不提供右上角重开按钮。
|
||||
|
||||
音频播放:
|
||||
|
||||
@@ -367,18 +386,20 @@ finish
|
||||
## 13. 验收
|
||||
|
||||
1. 创作入口能看到 `敲木鱼` 模板;
|
||||
2. 工作台可以填写敲击物描述、上传参考图、配置音效和祝福词;
|
||||
2. 工作台可以填写敲击物描述、上传参考图、上传或录制音效、配置祝福词;
|
||||
3. 提交后按默认木鱼参考图生成 image2 敲击物图案;
|
||||
4. 提交后按新敲击物图案参考图生成 9:16 背景环境图;
|
||||
5. 上传图不会直接进入运行态;
|
||||
6. 用户上传或录制音效时跳过音效生成并持久化该资产;
|
||||
7. 结果页能看到背景、图案、试听音效、编辑祝福词并试玩;
|
||||
8. 运行态功能区点击不触发敲击;
|
||||
9. 非功能区点击会计数、播放音效、播放敲击动画并飘字;
|
||||
10. 顶部计数器只在词条首次出现时创建;
|
||||
11. 连点不丢计数;
|
||||
12. `checkpoint` 和 `finish` 只保存单次 run 摘要;
|
||||
13. 作品可以发布、进入公开列表和公开详情;
|
||||
14. `WF-*` 公开作品号能进入分享和运行态;
|
||||
15. `npm run check:encoding` 通过;
|
||||
16. schema 变更后 `npm run check:spacetime-schema` 通过。
|
||||
5. 提交后按去绿后的敲击物主体和背景环境图生成主题返回按钮图;
|
||||
6. 上传图不会直接进入运行态;
|
||||
7. 用户上传或录制音效时直接持久化该资产,未提供时使用默认木鱼音;
|
||||
8. 结果页能看到背景、图案、试听音效、编辑祝福词并试玩;
|
||||
9. 运行态功能区点击不触发敲击;
|
||||
10. 运行态左上角使用主题返回按钮图,右上角不出现重开按钮;
|
||||
11. 非功能区点击会计数、播放音效、播放敲击动画并飘出无底板大号文字;
|
||||
12. 顶部总数卡点击后展开子项计数器面板,面板内预置全部词条且未出现词条初始值为 0,面板外点击可收起;
|
||||
13. 连点不丢计数;
|
||||
14. `checkpoint` 和 `finish` 只保存单次 run 摘要;
|
||||
15. 作品可以发布、进入公开列表和公开详情;
|
||||
16. `WF-*` 公开作品号能进入分享和运行态;
|
||||
17. `npm run check:encoding` 通过;
|
||||
18. schema 变更后 `npm run check:spacetime-schema` 通过。
|
||||
|
||||
@@ -160,9 +160,9 @@ npm run check:server-rs-ddd
|
||||
- Match3D 物品 sheet:关卡整图完成后走 VectorEngine `/v1/images/edits` multipart `image`,模型为 `gpt-image-2`,`2K 1:1` 输出 `10*10` spritesheet;物品 sheet prompt 固定要求纯绿色绿幕背景,后端上传 OSS 前必须把绿幕扣成透明 PNG,并把透明整图写入 `itemSpritesheetImageSrc/itemSpritesheetImageObjectKey`。后端固定从该 sheet 解析并持久化 20 个物品、每个 5 个形态;通用系列素材图集的行列索引按每行 2 个物品计算,必须落在 `1..=10`,难度只决定运行态加载 3 / 9 / 15 / 20 种。
|
||||
- Match3D UI spritesheet 和背景派生图:关卡整图作为参考图并发生成 `1K 1:1` UI spritesheet 与 `1K 9:16` 背景图,模型均为 `gpt-image-2`。UI spritesheet prompt 固定要求纯绿色绿幕背景,后端上传 OSS 前必须把绿幕扣成透明 PNG;背景图必须合成为全画幅不透明 PNG。
|
||||
- Match3D 1:1 容器 UI:VectorEngine `/v1/images/edits` multipart 参考图。该容器参考图是后端生图协议输入,必须通过 `include_bytes!` 随 `api-server` 编译进二进制,避免 API 单独发布或运行目录缺少 `public/` 时生成失败。
|
||||
- 敲木鱼敲击物和背景环境图:VectorEngine `/v1/images/edits`,模型固定 `gpt-image-2`。敲击物支持 multipart 多参考图,第一张固定为后端内嵌默认木鱼图,用户上传图只作为新主题参考;背景环境图只使用新敲击物图作为参考。
|
||||
- 敲木鱼敲击物和背景环境图:VectorEngine `/v1/images/edits`,模型固定 `gpt-image-2`。敲击物支持 multipart 多参考图,第一张固定为后端内嵌默认木鱼图,用户上传图只作为新主题参考;prompt 必须要求 `1:1` 真实透明 alpha PNG 并禁止黑底、白底、棋盘格和任何实底背景。当前敲击物上传 OSS 前不做服务端抠图后处理,避免误伤玉米等主体像素。背景环境图只使用第一步抠图完成后的透明敲击物图作为参考,prompt 必须要求中央主体预留区保持干净,中央 40% 区域禁止出现主题主体、主体局部特写、轮廓影子或重复元素,主题元素只能作为外围氛围,且必须显式声明不继承任何绿色底色、绿幕底色或纯绿色画布。
|
||||
- Hyper3D / Rodin:只保留后端安全代理和旧数据兼容;新 Match3D 草稿和批量新增不再生成 GLB。
|
||||
- 音频:视觉小说专用音频路由保留;拼图和抓大鹅生成入口暂时关闭,通用 `/api/creation/audio/*` 对相关目标返回 `410 Gone`;敲木鱼 `hit_sound` 目标例外开放,复用 VectorEngine Vidu 音效生成、OSS 私有对象、`asset_object` 和 entity binding 链路,目标字段固定为 `entityKind='wooden_fish_work'`、`slot='hit_sound'`、`assetKind='wooden_fish_hit_sound'`、`storagePrefix='wooden_fish_assets'`。
|
||||
- 音频:视觉小说专用音频路由保留;拼图、抓大鹅和敲木鱼提示词生成音效入口暂时关闭,通用 `/api/creation/audio/*` 对这些目标返回 `410 Gone`。敲木鱼创作只接收上传 / 录音音频资产;未提供时由 `api-server` 写回内置默认木鱼音 `/wooden-fish/default-hit-sound.mp3`。
|
||||
- OSS:私有 generated legacy path 进入浏览器前必须通过 `/api/assets/read-url` 换签;不要裸请求 `/generated-*`。
|
||||
- 外部 API 失败审计:外部供应商调用未成功时,`api-server` 必须发送 OTLP 失败事件并写入 `tracking_event`。当前通用 VectorEngine `gpt-image-2-all` 图片生成 / 编辑适配器在 `request_send`、`response_body`、`upstream_status`、`response_parse`、`missing_image` 和 `image_download` 阶段失败时记录 `external_api_call_failure`,`scope_kind = module`、`scope_id = provider`、`module_key = external-api`;metadata 固定包含 provider、endpoint、operation、failureStage、statusCode、statusClass、timeout、retryable、errorMessage、latencyMs、promptChars、referenceImageCount 和 imageModel。入库优先复用 tracking outbox,outbox 不可写或保护阈值拒绝时回退同步写 SpacetimeDB;不得新增前端兜底或在 SpacetimeDB reducer 内做外部 I/O。
|
||||
|
||||
@@ -423,7 +423,7 @@ npm run check:server-rs-ddd
|
||||
|
||||
- Rust 结构体:`WoodenFishWorkProfileRow`
|
||||
- 源码:`server-rs/crates/spacetime-module/src/wooden_fish/tables.rs`
|
||||
- 说明:敲木鱼作品 profile 真相,包含敲击物图案、背景环境图、敲击音效、飘字配置、发布状态和公开计数;`background_asset_json` 是后加入字段,保存 image2 生成的 9:16 背景环境图资产快照,旧迁移数据按 `None` 兼容。
|
||||
- 说明:敲木鱼作品 profile 真相,包含敲击物图案、背景环境图、主题返回按钮图、敲击音效、飘字配置、发布状态和公开计数;`background_asset_json` 保存 image2 生成的 9:16 背景环境图资产快照,`back_button_asset_json` 保存 image2 生成并去绿后的 1:1 返回按钮图资产快照,旧迁移数据按 `None` 兼容。
|
||||
|
||||
### SpacetimeDB view:`wooden_fish_gallery_card_view`
|
||||
|
||||
@@ -437,7 +437,7 @@ npm run check:server-rs-ddd
|
||||
- Rust view:`wooden_fish_gallery_view`
|
||||
- 返回类型:`Vec<WoodenFishGalleryViewRow>`
|
||||
- 源码:`server-rs/crates/spacetime-module/src/wooden_fish.rs`
|
||||
- 说明:敲木鱼公开详情兼容投影,包含敲击物图案、敲击音效和飘字配置;公开列表主路径优先使用 `wooden_fish_gallery_card_view`。
|
||||
- 说明:敲木鱼公开详情兼容投影,包含敲击物图案、背景环境图、主题返回按钮图、敲击音效和飘字配置;公开列表主路径优先使用 `wooden_fish_gallery_card_view`。
|
||||
|
||||
### `match3d_agent_message`
|
||||
|
||||
|
||||
@@ -45,10 +45,20 @@ npm run dev:api-server
|
||||
|
||||
后端日志默认写入 `logs/api-server/`。后端 API smoke 使用 `npm run dev:api-server` 并检查 `/healthz`;不要使用旧 `api-server:maincloud` 或任何 `GENARRATIVE_SPACETIME_MAINCLOUD_*` 口径。
|
||||
|
||||
如果本地 `GET /api/creation-entry/config` 返回 `No such procedure`,通常是 `.env.local` 指向的 SpacetimeDB 库还没有发布当前 `spacetime-module`,或当前 CLI 身份无权发布该库。debug 构建的 `api-server` 会临时使用后端默认入口配置兜底,避免创作作品架整块消失;正式修复仍应切换到拥有目标库权限的 SpacetimeDB 身份后重新运行 `npm run dev` 完成发布,或用 gitignored 的 `spacetime.local.json` 指向可发布的本地库。
|
||||
如果本地 `GET /api/creation-entry/config` 返回 `No such procedure`,或 `api-server` 日志出现 `no such table: puzzle_gallery_card_view` / `no such table: wooden_fish_gallery_card_view` 这类公开 view 缺失,通常是 `.env.local` 指向的 SpacetimeDB 库还没有发布当前 `spacetime-module`,或当前 CLI 身份无权发布该库。debug 构建的 `api-server` 会临时使用后端默认入口配置兜底,避免创作作品架整块消失;正式修复仍应切换到拥有目标库权限的 SpacetimeDB 身份后重新运行 `npm run dev` 完成发布,或用 gitignored 的 `spacetime.local.json` 指向可发布的本地库。
|
||||
|
||||
本地排查 schema 漂移时,先用当前 dev server 显式查询目标库,例如:
|
||||
|
||||
```bash
|
||||
spacetime sql <database> "SELECT * FROM puzzle_gallery_card_view LIMIT 1" --server http://127.0.0.1:3101
|
||||
```
|
||||
|
||||
如果旧 `.env.local` 仍指向缺少当前 view 的库,例如 `xushi-p4wfr`,而当前可发布库已经包含这些 view,可在 gitignored 的 `spacetime.local.json` 写入 `{"database":"genarrative-dev-codex"}` 作为本机覆盖;写入时不要带 UTF-8 BOM,否则 `scripts/dev.mjs` 会忽略该文件。修改后重启 `api-server`,再检查 `/healthz` 和 `/api/runtime/puzzle/gallery`。
|
||||
|
||||
本地 `npm run dev:spacetime` 发布模块时必须显式忽略仓库根目录的 `spacetime.json`,由脚本固定追加 `--no-config` 并使用命令参数里传入的数据库名和 `--server http://127.0.0.1:3101`。否则 CLI 可能把发布目标改写到配置文件里的其他数据库,导致 `dev:spacetime` 启动后又因发布失败自动退出,浏览器随后会在 `ws://127.0.0.1:3101/v1/database/.../subscribe` 看到连接拒绝。
|
||||
|
||||
本地 `spacetime` CLI / standalone 版本必须和 `server-rs/Cargo.toml` 里锁定的 `spacetimedb` 版本一致。若版本错配,procedure 返回值可能在宿主侧触发 `Failed to BSATN deserialize procedure return value`,api-server 最终表现为敲木鱼等创作动作的 `SpacetimeDB procedure 调用超时`。排障时先运行 `spacetime --version`,再对照 `server-rs/Cargo.toml` 的 `spacetimedb = "..."`;需要切版本时执行 `spacetime version install <version> && spacetime version use <version>`,然后重新启动 `npm run dev:spacetime`。当前 `scripts/dev.mjs` 会在启动和复用本地 SpacetimeDB 前写入并校验 `dev-spacetime-tool-version`,避免把旧 standalone 继续带进新一轮创作。
|
||||
|
||||
本地 `.env`、`.env.local` 或 `.env.secrets.local` 修改后必须重启 `api-server` 才会生效;若已经通过 `npm run dev` 启动完整联调,可在该终端输入 `rs api-server`。排查 RPG / 拼图 / 抓大鹅等 VectorEngine 生图链路时,确认 `VECTOR_ENGINE_BASE_URL`、`VECTOR_ENGINE_API_KEY` 和 `VECTOR_ENGINE_IMAGE_REQUEST_TIMEOUT_MS` 只在本地或服务器密钥文件中配置,不能写入 Git。开局 CG 故事板、首图、背景和图集都属于长耗时图片请求;后端默认会把 `VECTOR_ENGINE_IMAGE_REQUEST_TIMEOUT_MS` 下限收口到 `1000000`,旧进程仍可能沿用重启前的短超时。若开局 CG 故事板在 `send()` 阶段失败且日志显示 `SendRequest`,先看同一 request_id 的 `request_body_bytes`、`reference_data_url_bytes`、`sourceChain` 和 `rootSource`;当前开局 CG 会把角色图与首幕背景图压到单边 768 的 JPEG 后再作为 generations `image` 数组发送,`/v1/images/generations` 使用默认 HTTP 协商,只有 multipart `/v1/images/edits` 单独强制 HTTP/1.1。
|
||||
|
||||
查看本地 Rust / SpacetimeDB 日志:
|
||||
|
||||
@@ -133,12 +133,12 @@ RPG / 拼图等运行态存档选择入口统一在个人中心 `常用功能 >
|
||||
创作输入固定为:
|
||||
|
||||
1. `敲什么`:敲击物单图资产槽位。默认模板使用内置透明 PNG `/wooden-fish/default-hit-object.png` 作为 `bundled-default` 敲击物资产,避免默认关键词被重新语义化改形;用户输入自定义关键词或上传参考图时,后端必须以默认木鱼图作为基础结构和画风参考,使用 image2 生成最终敲击物图案,上传图只作为新主题参考,不直接进入运行态。自定义 `compile-draft` / `regenerate-hit-object` 必须完成 image2 -> OSS 私有对象 -> asset object 登记和绑定后,再由 `api-server` 注入真实 `hitObjectAsset.imageSrc`,不能只写 `/generated-wooden-fish-assets/...` 占位路径,也不能接受前端请求自带的 `hitObjectAsset` 短路生成。
|
||||
2. `敲击音效`:音频资产槽位,支持描述生成、上传和麦克风录制,统一写回 `hitSoundAsset`。描述生成复用通用 `/api/creation/audio/sound-effect` 的 VectorEngine Vidu 音效生成、下载、OSS 私有对象、asset object 登记和 entity binding 链路;木鱼目标固定为 `entityKind='wooden_fish_work'`、`slot='hit_sound'`、`assetKind='wooden_fish_hit_sound'`、`storagePrefix='wooden_fish_assets'`,不得再返回 `410 Gone`,也不得由 `spacetime-client` 合成假音频路径。
|
||||
3. `功德有什么`:最多 8 条飘字,默认 `幸运、健康、财富、姻缘、幸福、事业、成功、功德`;创作态只保存词条名,运行态飘字展示时再追加 `+1`。
|
||||
2. `敲击音效`:音频资产槽位,当前创作阶段只支持用户上传或麦克风录制;未提供音频时统一写回内置默认木鱼音 `/wooden-fish/default-hit-sound.mp3`。提示词生成音效入口临时关闭,通用 `/api/creation/audio/sound-effect` 对木鱼 `hit_sound` 目标也返回 `410 Gone`;`hitSoundPrompt` 只作为历史兼容字段保留,不参与当前创作流程,也不得由 `spacetime-client` 合成假音频路径。
|
||||
3. `功德有什么`:最多 8 条飘字,默认 `幸运、健康、财富、姻缘、幸福、事业、成功、功德`;创作态只保存词条名,运行态飘字展示时再追加 `+1`。运行态顶部总数卡采用品牌化徽标样式,子项计数器预置展示在可展开面板中,未出现词条初始值为 0。
|
||||
|
||||
图片生成链路固定为双图 image2 流程:第一步用默认木鱼图作为结构和画风参考,按用户题材关键词或参考图主题生成 `1:1` 透明底新敲击物;第二步用新敲击物作为主题和画风参考生成 `9:16` 背景环境图,背景图只适配主题和画风,不能包含新敲击物本体,也不能增加木槌互动物品。两个资产分别写回 `hitObjectAsset` 与 `backgroundAsset`,并绑定到 `wooden_fish_work` 的 `hit_object` / `background` 槽位。运行态和结果页消费 `backgroundAsset` 做竖屏背景,中央再叠加 `hitObjectAsset`。
|
||||
图片生成链路固定为三图 image2 流程:第一步用默认木鱼图作为结构和画风参考,按用户题材关键词或参考图主题生成 `1:1` 绿色背景主体图(纯绿色绿幕),prompt 必须显式要求背景为单一纯绿色 `#00FF00` 且平整无纹理、无渐变、无阴影、无道具,主体完整居中,且禁止黑底、白底、棋盘格和任何实底背景;后端在落库前只对这张绿幕主体图执行去绿背景处理,不做泛抠图,避免误伤玉米等主体像素。第二步必须使用第一步抠图完成后的透明图作为参考图,再用新敲击物作为主题和画风参考生成 `9:16` 背景环境图,背景图只适配主题和画风,不能包含新敲击物本体,也不能增加木槌互动物品;画面中央主体预留区必须干净,中央 40% 区域禁止出现主题主体、主体局部特写、轮廓影子或重复元素,主题元素只能作为外围氛围。第三步必须使用去绿后的敲击物主体图和背景环境图作为参考图生成 `1:1` 返回按钮图,返回按钮必须始终是标准圆形,中央只保留单个左箭头,参考图只约束圆形底色和箭头配色,不得延伸到复杂造型和花纹;按钮不得出现文字、数字、水印、额外 UI 面板或木槌物品。三个资产分别写回 `hitObjectAsset`、`backgroundAsset` 与 `backButtonAsset`,并绑定到 `wooden_fish_work` 的 `hit_object` / `background` / `back_button` 槽位。运行态和结果页消费 `backgroundAsset` 做竖屏背景,中央再叠加 `hitObjectAsset`,左上角返回按钮消费 `backButtonAsset`。
|
||||
|
||||
运行态规则真相以后端 run 摘要为准,前端只做点击低延迟表现、敲击动画、音频播放和飘字渲染。每次非功能区点击在当前 run 内累计 `totalTapCount` 和 `wordCounters`;计数不进入账号长期账本,不做排行榜。顶部计数器仅在词条首次出现时创建,后续同词条继续累加。
|
||||
运行态规则真相以后端 run 摘要为准,前端只做点击低延迟表现、敲击动画、音频播放和飘字渲染。每次非功能区点击在当前 run 内累计 `totalTapCount` 和 `wordCounters`;计数不进入账号长期账本,不做排行榜。顶部总数卡点击后展开子项计数器面板,子项计数在面板中按词条纵列预置展示,未出现词条初始值为 0,后续同词条继续累加;运行态左上角使用主题化返回按钮图,不提供右上角重开按钮。
|
||||
|
||||
平台首页推荐、精选、最新、公开详情、搜索、已玩作品和公开试玩统一按 `sourceType='wooden-fish'` 与 `WF-*` 公开作品号识别敲木鱼作品;公开列表应走 `wooden_fish_gallery_card_view` 订阅缓存,公开详情或运行态启动时卡片摘要不足则补读完整 work profile。
|
||||
|
||||
|
||||
@@ -57,6 +57,7 @@ export interface WoodenFishActionRequest {
|
||||
hitObjectReferenceImageSrc?: string | null;
|
||||
hitObjectAsset?: WoodenFishImageAsset | null;
|
||||
backgroundAsset?: WoodenFishImageAsset | null;
|
||||
backButtonAsset?: WoodenFishImageAsset | null;
|
||||
hitSoundPrompt?: string | null;
|
||||
hitSoundAsset?: WoodenFishAudioAsset | null;
|
||||
floatingWords?: string[] | null;
|
||||
@@ -80,6 +81,7 @@ export interface WoodenFishDraftResponse {
|
||||
floatingWords: string[];
|
||||
hitObjectAsset: WoodenFishImageAsset | null;
|
||||
backgroundAsset: WoodenFishImageAsset | null;
|
||||
backButtonAsset?: WoodenFishImageAsset | null;
|
||||
hitSoundAsset: WoodenFishAudioAsset | null;
|
||||
coverImageSrc: string | null;
|
||||
generationStatus: WoodenFishGenerationStatus;
|
||||
@@ -127,6 +129,7 @@ export interface WoodenFishWorkProfileResponse {
|
||||
draft: WoodenFishDraftResponse;
|
||||
hitObjectAsset: WoodenFishImageAsset;
|
||||
backgroundAsset: WoodenFishImageAsset | null;
|
||||
backButtonAsset: WoodenFishImageAsset | null;
|
||||
hitSoundAsset: WoodenFishAudioAsset;
|
||||
floatingWords: string[];
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 40 KiB |
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#101010"/>
|
||||
<rect x="270" y="214" width="484" height="606" rx="228" fill="#fff5df"/>
|
||||
<circle cx="650" cy="330" r="112" fill="#d77750"/>
|
||||
<circle cx="676" cy="354" r="86" fill="#fff5df"/>
|
||||
<circle cx="430" cy="470" r="34" fill="#121212"/>
|
||||
<circle cx="590" cy="470" r="34" fill="#121212"/>
|
||||
<path d="M512 552L540 590L578 618L540 646L512 684L484 646L446 618L484 590Z" fill="#ffd25d"/>
|
||||
<rect x="360" y="742" width="304" height="48" rx="24" fill="#d77750"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 652 B |
|
Before Width: | Height: | Size: 46 KiB |
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#101418"/>
|
||||
<path d="M236 504C236 294 382 176 512 176C676 176 788 322 788 504C788 702 648 832 512 832C372 832 236 702 236 504Z" fill="#fff5df"/>
|
||||
<circle cx="618" cy="326" r="72" fill="#101418"/>
|
||||
<circle cx="618" cy="326" r="34" fill="#ffd25d"/>
|
||||
<circle cx="438" cy="488" r="30" fill="#101418"/>
|
||||
<rect x="506" y="548" width="126" height="46" rx="23" fill="#d77750"/>
|
||||
<path d="M512 624L536 658L570 682L536 706L512 740L488 706L454 682L488 658Z" fill="#ffd25d"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 659 B |
|
Before Width: | Height: | Size: 40 KiB |
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#17110e"/>
|
||||
<rect x="254" y="254" width="516" height="516" rx="190" fill="#d77750"/>
|
||||
<rect x="330" y="320" width="364" height="386" rx="140" fill="#fff5df"/>
|
||||
<circle cx="440" cy="478" r="30" fill="#17110e"/>
|
||||
<circle cx="584" cy="478" r="30" fill="#17110e"/>
|
||||
<rect x="458" y="594" width="108" height="44" rx="22" fill="#d77750"/>
|
||||
<circle cx="512" cy="254" r="54" fill="#ffd25d"/>
|
||||
<circle cx="512" cy="254" r="24" fill="#17110e"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 631 B |
|
Before Width: | Height: | Size: 31 KiB |
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#101418"/>
|
||||
<path d="M628 217L759 272L814 402L759 724L628 779H396L265 724L210 402L265 272L396 217Z" fill="#fff5df"/>
|
||||
<circle cx="512" cy="398" r="126" fill="#101418"/>
|
||||
<circle cx="512" cy="398" r="62" fill="#ffd25d"/>
|
||||
<circle cx="390" cy="570" r="30" fill="#101418"/>
|
||||
<circle cx="634" cy="570" r="30" fill="#101418"/>
|
||||
<rect x="380" y="704" width="264" height="54" rx="27" fill="#31c7a9"/>
|
||||
<rect x="318" y="268" width="142" height="58" rx="29" fill="#ff6a5f"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 662 B |
|
Before Width: | Height: | Size: 44 KiB |
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#111111"/>
|
||||
<rect x="340" y="188" width="344" height="648" rx="172" fill="#fff5df"/>
|
||||
<circle cx="512" cy="336" r="112" fill="#d77750"/>
|
||||
<rect x="390" y="442" width="244" height="280" rx="122" fill="#111111"/>
|
||||
<circle cx="512" cy="582" r="58" fill="#ffd25d"/>
|
||||
<circle cx="432" cy="332" r="24" fill="#121212"/>
|
||||
<circle cx="592" cy="332" r="24" fill="#121212"/>
|
||||
<rect x="404" y="782" width="216" height="60" rx="30" fill="#fff5df"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 632 B |
|
Before Width: | Height: | Size: 42 KiB |
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#101010"/>
|
||||
<rect x="286" y="300" width="452" height="456" rx="150" fill="#fff5df"/>
|
||||
<circle cx="286" cy="530" r="88" fill="#101010"/>
|
||||
<circle cx="738" cy="530" r="88" fill="#101010"/>
|
||||
<circle cx="512" cy="300" r="76" fill="#ffd25d"/>
|
||||
<circle cx="430" cy="474" r="24" fill="#101010"/>
|
||||
<circle cx="594" cy="474" r="24" fill="#101010"/>
|
||||
<path d="M512 536L540 576L580 604L540 632L512 672L484 632L444 604L484 576Z" fill="#101010"/>
|
||||
<path d="M512 570L526 590L546 604L526 618L512 638L498 618L478 604L498 590Z" fill="#ffd25d"/>
|
||||
<rect x="360" y="744" width="304" height="54" rx="27" fill="#d77750"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 798 B |
|
Before Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 762 KiB |
|
Before Width: | Height: | Size: 801 KiB |
|
Before Width: | Height: | Size: 807 KiB |
|
Before Width: | Height: | Size: 793 KiB |
|
Before Width: | Height: | Size: 822 KiB |
|
Before Width: | Height: | Size: 750 KiB |
|
Before Width: | Height: | Size: 530 KiB |
|
Before Width: | Height: | Size: 362 KiB |
|
Before Width: | Height: | Size: 990 KiB |
|
Before Width: | Height: | Size: 805 KiB |
|
Before Width: | Height: | Size: 751 KiB |
|
Before Width: | Height: | Size: 798 KiB |
|
Before Width: | Height: | Size: 54 KiB |
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#101418"/>
|
||||
<circle cx="512" cy="512" r="274" fill="#fff3d7"/>
|
||||
<circle cx="512" cy="512" r="142" fill="#101418"/>
|
||||
<path d="M512 442L538 486L582 512L538 538L512 582L486 538L442 512L486 486Z" fill="#ffd35f"/>
|
||||
<circle cx="648" cy="340" r="64" fill="#df7650"/>
|
||||
<circle cx="666" cy="360" r="40" fill="#101418"/>
|
||||
<circle cx="374" cy="650" r="46" fill="#2ec5ad"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 557 B |
|
Before Width: | Height: | Size: 34 KiB |
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#101010"/>
|
||||
<rect x="308" y="210" width="400" height="600" rx="198" fill="#fff3d7"/>
|
||||
<circle cx="672" cy="302" r="82" fill="#df7650"/>
|
||||
<circle cx="716" cy="336" r="74" fill="#101010"/>
|
||||
<circle cx="402" cy="458" r="34" fill="#111111"/>
|
||||
<path d="M548 520L572 560L612 584L572 608L548 648L524 608L484 584L524 560Z" fill="#ffd35f"/>
|
||||
<rect x="362" y="742" width="298" height="50" rx="25" fill="#df7650"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 599 B |
|
Before Width: | Height: | Size: 44 KiB |
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#101418"/>
|
||||
<circle cx="512" cy="512" r="276" fill="#fff3d7"/>
|
||||
<circle cx="724" cy="394" r="94" fill="#101418"/>
|
||||
<circle cx="692" cy="412" r="38" fill="#ffd35f"/>
|
||||
<circle cx="314" cy="512" r="76" fill="#101418"/>
|
||||
<rect x="442" y="642" width="152" height="48" rx="24" fill="#df7650"/>
|
||||
<circle cx="438" cy="448" r="32" fill="#111111"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 534 B |
|
Before Width: | Height: | Size: 31 KiB |
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#17110e"/>
|
||||
<path d="M630 228L796 394V630L630 796H394L228 630V394L394 228Z" fill="#fff3d7"/>
|
||||
<circle cx="512" cy="282" r="76" fill="#ffd35f"/>
|
||||
<rect x="376" y="356" width="272" height="370" rx="136" fill="#df7650"/>
|
||||
<circle cx="430" cy="528" r="28" fill="#17110e"/>
|
||||
<circle cx="594" cy="528" r="28" fill="#17110e"/>
|
||||
<path d="M512 576L534 612L570 634L534 656L512 692L490 656L454 634L490 612Z" fill="#fff3d7"/>
|
||||
<rect x="386" y="764" width="252" height="54" rx="27" fill="#2ec5ad"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 682 B |
|
Before Width: | Height: | Size: 40 KiB |
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#101010"/>
|
||||
<rect x="270" y="300" width="484" height="440" rx="148" fill="#fff3d7"/>
|
||||
<circle cx="270" cy="520" r="84" fill="#101010"/>
|
||||
<circle cx="754" cy="520" r="84" fill="#101010"/>
|
||||
<rect x="390" y="404" width="244" height="246" rx="110" fill="#df7650"/>
|
||||
<circle cx="512" cy="526" r="62" fill="#ffd35f"/>
|
||||
<circle cx="512" cy="526" r="28" fill="#101010"/>
|
||||
<rect x="356" y="728" width="312" height="54" rx="27" fill="#bd5b3d"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 631 B |
|
Before Width: | Height: | Size: 47 KiB |
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<rect width="1024" height="1024" rx="160" fill="#17110e"/>
|
||||
<rect x="340" y="184" width="344" height="648" rx="172" fill="#fff3d7"/>
|
||||
<circle cx="512" cy="348" r="124" fill="#df7650"/>
|
||||
<circle cx="512" cy="348" r="56" fill="#17110e"/>
|
||||
<path d="M512 306L527 333L554 348L527 363L512 390L497 363L470 348L497 333Z" fill="#ffd35f"/>
|
||||
<rect x="412" y="492" width="200" height="198" rx="98" fill="#17110e"/>
|
||||
<circle cx="512" cy="592" r="50" fill="#ffd35f"/>
|
||||
<rect x="404" y="764" width="216" height="60" rx="30" fill="#fff3d7"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 674 B |
|
Before Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 43 KiB |
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="1024" height="1024" rx="160" fill="#101418"/>
|
||||
|
||||
<path d="M244 548 L512 430 L780 548 L512 674 Z" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#fffaf0" stroke-width="66"/>
|
||||
<path d="M292 656 L468 734 Q512 752 556 734 L732 656" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#fffaf0" stroke-width="52"/>
|
||||
<circle cx="337" cy="548" r="15" fill="#ffd45d"/>
|
||||
<path d="M512 326 L512 514" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#fffaf0" stroke-width="70"/>
|
||||
<circle cx="512" cy="208" r="62" fill="#ffd45d"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 728 B |
|
Before Width: | Height: | Size: 35 KiB |
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="1024" height="1024" rx="160" fill="#151515"/>
|
||||
|
||||
<path d="M252 548 L512 436 L772 548 L512 666 Z" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="62"/>
|
||||
<path d="M304 642 L474 718 Q512 736 550 718 L720 642" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="50"/>
|
||||
<circle cx="346" cy="548" r="16" fill="#ffffff"/>
|
||||
<circle cx="512" cy="556" r="12" fill="#f5c95d"/>
|
||||
<path d="M512 334 L512 504" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="64"/>
|
||||
<circle cx="512" cy="204" r="62" fill="#f5c95d"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 780 B |
|
Before Width: | Height: | Size: 36 KiB |
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="1024" height="1024" rx="160" fill="#151515"/>
|
||||
|
||||
<path d="M244 548 L512 430 L780 548 L512 674 Z" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="66"/>
|
||||
<path d="M292 656 L468 734 Q512 752 556 734 L732 656" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="52"/>
|
||||
<circle cx="337" cy="548" r="17" fill="#ffffff"/>
|
||||
<path d="M512 326 L512 514" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="68"/>
|
||||
<circle cx="512" cy="214" r="62" fill="#ffffff"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 728 B |
|
Before Width: | Height: | Size: 40 KiB |
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="1024" height="1024" rx="160" fill="#121212"/>
|
||||
|
||||
<path d="M276 522 L512 420 L748 522" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="54"/>
|
||||
<path d="M236 586 L512 708 L788 586" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="60"/>
|
||||
<path d="M292 676 L478 756 Q512 770 546 756 L732 676" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="42"/>
|
||||
<circle cx="355" cy="544" r="13" fill="#ffffff"/>
|
||||
<path d="M512 304 L512 494" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="58"/>
|
||||
<circle cx="512" cy="202" r="55" fill="#ffffff"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 852 B |
|
Before Width: | Height: | Size: 42 KiB |
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="1024" height="1024" rx="160" fill="#111111"/>
|
||||
|
||||
<path d="M232 560 Q512 410 792 560 Q816 576 792 592 Q610 648 552 692 Q512 716 472 692 Q414 648 232 592 Q208 576 232 560 Z" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#fffdf4" stroke-width="56"/>
|
||||
<path d="M278 642 L470 728 Q512 748 554 728 L746 642" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#fffdf4" stroke-width="46"/>
|
||||
<circle cx="342" cy="554" r="15" fill="#fffdf4"/>
|
||||
<path d="M512 316 L512 518" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#fffdf4" stroke-width="72"/>
|
||||
<circle cx="512" cy="205" r="58" fill="#fffdf4"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 803 B |
|
Before Width: | Height: | Size: 36 KiB |
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="1024" height="1024" rx="160" fill="#171717"/>
|
||||
|
||||
<path d="M246 532 L512 420 L778 532 L512 650 Z" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="58"/>
|
||||
<path d="M286 628 L472 710 Q512 728 552 710 L738 628" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="48"/>
|
||||
<path d="M330 708 L478 774 Q512 790 546 774 L694 708" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="38"/>
|
||||
<circle cx="348" cy="535" r="14" fill="#ffffff"/>
|
||||
<path d="M512 310 L512 504" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="#ffffff" stroke-width="64"/>
|
||||
<circle cx="512" cy="205" r="56" fill="#ffffff"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 880 B |
|
Before Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 768 KiB |
@@ -1,62 +0,0 @@
|
||||
{
|
||||
"model": "gpt-image-2-all",
|
||||
"size": "1024x1024",
|
||||
"generatedAt": "2026-05-14T18:03:02.694Z",
|
||||
"creativeDirection": {
|
||||
"name": "陶泥儿反糖果化脑洞泥印图形标",
|
||||
"textPolicy": "no Chinese, no English, no wordmark",
|
||||
"palette": "灰米白、陶土白、陶土褐、深泥灰、少量暗金土黄",
|
||||
"motif": "哑光软方圆陶泥印章 + 星核凹印/负形 + 极少量刻点",
|
||||
"antiCandyRules": "no glossy highlight, no cream filling, no jelly, no cookie, no chocolate, no candy star"
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"id": "01-matte-clay-stamp",
|
||||
"title": "哑光陶泥印章",
|
||||
"file": "taonier-anti-candy-01-matte-clay-stamp.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n这次必须反糖果化:第一眼必须像哑光陶泥、泥章、窑印、创作印记,绝对不能像糖果、软糖、奶油、饼干、夹心甜点、月饼、巧克力或食品包装。\n核心隐喻:脑洞泥印。一块被轻轻捏平的不规则软方圆陶泥印章,中间有一个抽象星核凹印或镂空星形泥印,表达灵感被压印成作品。\n风格:扁平矢量商标为主,低高光、低饱和、哑光粉陶质感;轮廓清楚,可后续矢量化,适合商标、App 图标、社区头像。\n主色:灰米白、未经上釉的陶土白、陶土褐、深泥灰、少量暗金土黄;颜色必须干燥、克制、低甜度。不使用亮金、糖果黄、奶油黄、粉色、青色、蓝色、紫色、荧光色或彩虹色。\n形态:保留不规则软方圆,但不要鼓胀、不要胶状、不要可食用的圆润光泽。边缘可以有少量粗糙泥料纹理、压痕、手捏不均匀。\n数字感:只允许 2 到 3 个很小的深泥灰或暗土黄刻点,像生成节点或 UGC 扩散点;不要闪亮星星,不要糖珠。\n构图:正方形画布,居中图形标,干净浅灰米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和中间星核凹印。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、旋涡环形旧稿、三色花瓣旧稿。\n强禁止食品感:不要 glossy 高光、不要果冻质感、不要奶油夹心、不要糖霜、不要撒糖粒、不要饼干边、不要巧克力流心、不要金色膨胀星糖。\n本张重点:最克制的陶泥印章。灰米白软方圆主体,中间是压进去的暗陶土星核凹印,只有 2 个微小刻点。几乎无高光。"
|
||||
},
|
||||
{
|
||||
"id": "02-kiln-mark-core",
|
||||
"title": "窑印星核",
|
||||
"file": "taonier-anti-candy-02-kiln-mark-core.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n这次必须反糖果化:第一眼必须像哑光陶泥、泥章、窑印、创作印记,绝对不能像糖果、软糖、奶油、饼干、夹心甜点、月饼、巧克力或食品包装。\n核心隐喻:脑洞泥印。一块被轻轻捏平的不规则软方圆陶泥印章,中间有一个抽象星核凹印或镂空星形泥印,表达灵感被压印成作品。\n风格:扁平矢量商标为主,低高光、低饱和、哑光粉陶质感;轮廓清楚,可后续矢量化,适合商标、App 图标、社区头像。\n主色:灰米白、未经上釉的陶土白、陶土褐、深泥灰、少量暗金土黄;颜色必须干燥、克制、低甜度。不使用亮金、糖果黄、奶油黄、粉色、青色、蓝色、紫色、荧光色或彩虹色。\n形态:保留不规则软方圆,但不要鼓胀、不要胶状、不要可食用的圆润光泽。边缘可以有少量粗糙泥料纹理、压痕、手捏不均匀。\n数字感:只允许 2 到 3 个很小的深泥灰或暗土黄刻点,像生成节点或 UGC 扩散点;不要闪亮星星,不要糖珠。\n构图:正方形画布,居中图形标,干净浅灰米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和中间星核凹印。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、旋涡环形旧稿、三色花瓣旧稿。\n强禁止食品感:不要 glossy 高光、不要果冻质感、不要奶油夹心、不要糖霜、不要撒糖粒、不要饼干边、不要巧克力流心、不要金色膨胀星糖。\n本张重点:窑印感。中间星核像烧陶后的浅浮雕窑印,用深泥灰边缘和陶土褐阴影表现,不要任何金属或糖果光泽。"
|
||||
},
|
||||
{
|
||||
"id": "03-cutout-negative-star",
|
||||
"title": "负形星核",
|
||||
"file": "taonier-anti-candy-03-cutout-negative-star.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n这次必须反糖果化:第一眼必须像哑光陶泥、泥章、窑印、创作印记,绝对不能像糖果、软糖、奶油、饼干、夹心甜点、月饼、巧克力或食品包装。\n核心隐喻:脑洞泥印。一块被轻轻捏平的不规则软方圆陶泥印章,中间有一个抽象星核凹印或镂空星形泥印,表达灵感被压印成作品。\n风格:扁平矢量商标为主,低高光、低饱和、哑光粉陶质感;轮廓清楚,可后续矢量化,适合商标、App 图标、社区头像。\n主色:灰米白、未经上釉的陶土白、陶土褐、深泥灰、少量暗金土黄;颜色必须干燥、克制、低甜度。不使用亮金、糖果黄、奶油黄、粉色、青色、蓝色、紫色、荧光色或彩虹色。\n形态:保留不规则软方圆,但不要鼓胀、不要胶状、不要可食用的圆润光泽。边缘可以有少量粗糙泥料纹理、压痕、手捏不均匀。\n数字感:只允许 2 到 3 个很小的深泥灰或暗土黄刻点,像生成节点或 UGC 扩散点;不要闪亮星星,不要糖珠。\n构图:正方形画布,居中图形标,干净浅灰米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和中间星核凹印。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、旋涡环形旧稿、三色花瓣旧稿。\n强禁止食品感:不要 glossy 高光、不要果冻质感、不要奶油夹心、不要糖霜、不要撒糖粒、不要饼干边、不要巧克力流心、不要金色膨胀星糖。\n本张重点:负形。星核用干净的镂空负形或深泥灰内孔表达,主体是单块哑光陶泥,整体更像可注册商标图形。"
|
||||
},
|
||||
{
|
||||
"id": "04-dry-clay-grain",
|
||||
"title": "干陶颗粒",
|
||||
"file": "taonier-anti-candy-04-dry-clay-grain.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n这次必须反糖果化:第一眼必须像哑光陶泥、泥章、窑印、创作印记,绝对不能像糖果、软糖、奶油、饼干、夹心甜点、月饼、巧克力或食品包装。\n核心隐喻:脑洞泥印。一块被轻轻捏平的不规则软方圆陶泥印章,中间有一个抽象星核凹印或镂空星形泥印,表达灵感被压印成作品。\n风格:扁平矢量商标为主,低高光、低饱和、哑光粉陶质感;轮廓清楚,可后续矢量化,适合商标、App 图标、社区头像。\n主色:灰米白、未经上釉的陶土白、陶土褐、深泥灰、少量暗金土黄;颜色必须干燥、克制、低甜度。不使用亮金、糖果黄、奶油黄、粉色、青色、蓝色、紫色、荧光色或彩虹色。\n形态:保留不规则软方圆,但不要鼓胀、不要胶状、不要可食用的圆润光泽。边缘可以有少量粗糙泥料纹理、压痕、手捏不均匀。\n数字感:只允许 2 到 3 个很小的深泥灰或暗土黄刻点,像生成节点或 UGC 扩散点;不要闪亮星星,不要糖珠。\n构图:正方形画布,居中图形标,干净浅灰米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和中间星核凹印。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、旋涡环形旧稿、三色花瓣旧稿。\n强禁止食品感:不要 glossy 高光、不要果冻质感、不要奶油夹心、不要糖霜、不要撒糖粒、不要饼干边、不要巧克力流心、不要金色膨胀星糖。\n本张重点:干陶质感。加入非常细微的陶土颗粒和粉陶纹理,但保持扁平图标,不要照片写实,不要脏乱。"
|
||||
},
|
||||
{
|
||||
"id": "05-hand-pressed-token",
|
||||
"title": "手压泥币",
|
||||
"file": "taonier-anti-candy-05-hand-pressed-token.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n这次必须反糖果化:第一眼必须像哑光陶泥、泥章、窑印、创作印记,绝对不能像糖果、软糖、奶油、饼干、夹心甜点、月饼、巧克力或食品包装。\n核心隐喻:脑洞泥印。一块被轻轻捏平的不规则软方圆陶泥印章,中间有一个抽象星核凹印或镂空星形泥印,表达灵感被压印成作品。\n风格:扁平矢量商标为主,低高光、低饱和、哑光粉陶质感;轮廓清楚,可后续矢量化,适合商标、App 图标、社区头像。\n主色:灰米白、未经上釉的陶土白、陶土褐、深泥灰、少量暗金土黄;颜色必须干燥、克制、低甜度。不使用亮金、糖果黄、奶油黄、粉色、青色、蓝色、紫色、荧光色或彩虹色。\n形态:保留不规则软方圆,但不要鼓胀、不要胶状、不要可食用的圆润光泽。边缘可以有少量粗糙泥料纹理、压痕、手捏不均匀。\n数字感:只允许 2 到 3 个很小的深泥灰或暗土黄刻点,像生成节点或 UGC 扩散点;不要闪亮星星,不要糖珠。\n构图:正方形画布,居中图形标,干净浅灰米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和中间星核凹印。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、旋涡环形旧稿、三色花瓣旧稿。\n强禁止食品感:不要 glossy 高光、不要果冻质感、不要奶油夹心、不要糖霜、不要撒糖粒、不要饼干边、不要巧克力流心、不要金色膨胀星糖。\n本张重点:手压泥币。像一枚被手工压平的陶泥代币,边缘不完全对称,中间星核为凹刻符号,但不要出现手或工具。"
|
||||
},
|
||||
{
|
||||
"id": "06-digital-clay-glyph",
|
||||
"title": "数字泥符",
|
||||
"file": "taonier-anti-candy-06-digital-clay-glyph.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n这次必须反糖果化:第一眼必须像哑光陶泥、泥章、窑印、创作印记,绝对不能像糖果、软糖、奶油、饼干、夹心甜点、月饼、巧克力或食品包装。\n核心隐喻:脑洞泥印。一块被轻轻捏平的不规则软方圆陶泥印章,中间有一个抽象星核凹印或镂空星形泥印,表达灵感被压印成作品。\n风格:扁平矢量商标为主,低高光、低饱和、哑光粉陶质感;轮廓清楚,可后续矢量化,适合商标、App 图标、社区头像。\n主色:灰米白、未经上釉的陶土白、陶土褐、深泥灰、少量暗金土黄;颜色必须干燥、克制、低甜度。不使用亮金、糖果黄、奶油黄、粉色、青色、蓝色、紫色、荧光色或彩虹色。\n形态:保留不规则软方圆,但不要鼓胀、不要胶状、不要可食用的圆润光泽。边缘可以有少量粗糙泥料纹理、压痕、手捏不均匀。\n数字感:只允许 2 到 3 个很小的深泥灰或暗土黄刻点,像生成节点或 UGC 扩散点;不要闪亮星星,不要糖珠。\n构图:正方形画布,居中图形标,干净浅灰米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和中间星核凹印。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、旋涡环形旧稿、三色花瓣旧稿。\n强禁止食品感:不要 glossy 高光、不要果冻质感、不要奶油夹心、不要糖霜、不要撒糖粒、不要饼干边、不要巧克力流心、不要金色膨胀星糖。\n本张重点:AI 与 UGC 暗示更强。用 3 个极小方形刻点围绕星核,像生成节点,但必须像刻在陶泥上的小孔。"
|
||||
},
|
||||
{
|
||||
"id": "07-premium-flat-mark",
|
||||
"title": "精品扁平标",
|
||||
"file": "taonier-anti-candy-07-premium-flat-mark.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n这次必须反糖果化:第一眼必须像哑光陶泥、泥章、窑印、创作印记,绝对不能像糖果、软糖、奶油、饼干、夹心甜点、月饼、巧克力或食品包装。\n核心隐喻:脑洞泥印。一块被轻轻捏平的不规则软方圆陶泥印章,中间有一个抽象星核凹印或镂空星形泥印,表达灵感被压印成作品。\n风格:扁平矢量商标为主,低高光、低饱和、哑光粉陶质感;轮廓清楚,可后续矢量化,适合商标、App 图标、社区头像。\n主色:灰米白、未经上釉的陶土白、陶土褐、深泥灰、少量暗金土黄;颜色必须干燥、克制、低甜度。不使用亮金、糖果黄、奶油黄、粉色、青色、蓝色、紫色、荧光色或彩虹色。\n形态:保留不规则软方圆,但不要鼓胀、不要胶状、不要可食用的圆润光泽。边缘可以有少量粗糙泥料纹理、压痕、手捏不均匀。\n数字感:只允许 2 到 3 个很小的深泥灰或暗土黄刻点,像生成节点或 UGC 扩散点;不要闪亮星星,不要糖珠。\n构图:正方形画布,居中图形标,干净浅灰米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和中间星核凹印。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、旋涡环形旧稿、三色花瓣旧稿。\n强禁止食品感:不要 glossy 高光、不要果冻质感、不要奶油夹心、不要糖霜、不要撒糖粒、不要饼干边、不要巧克力流心、不要金色膨胀星糖。\n本张重点:更互联网精品。减少纹理,强化几何平衡和负形,灰米白主体、深泥灰星核、陶土褐小刻痕,适合 App 图标。"
|
||||
},
|
||||
{
|
||||
"id": "08-monochrome-proof",
|
||||
"title": "单色验证版",
|
||||
"file": "taonier-anti-candy-08-monochrome-proof.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n这次必须反糖果化:第一眼必须像哑光陶泥、泥章、窑印、创作印记,绝对不能像糖果、软糖、奶油、饼干、夹心甜点、月饼、巧克力或食品包装。\n核心隐喻:脑洞泥印。一块被轻轻捏平的不规则软方圆陶泥印章,中间有一个抽象星核凹印或镂空星形泥印,表达灵感被压印成作品。\n风格:扁平矢量商标为主,低高光、低饱和、哑光粉陶质感;轮廓清楚,可后续矢量化,适合商标、App 图标、社区头像。\n主色:灰米白、未经上釉的陶土白、陶土褐、深泥灰、少量暗金土黄;颜色必须干燥、克制、低甜度。不使用亮金、糖果黄、奶油黄、粉色、青色、蓝色、紫色、荧光色或彩虹色。\n形态:保留不规则软方圆,但不要鼓胀、不要胶状、不要可食用的圆润光泽。边缘可以有少量粗糙泥料纹理、压痕、手捏不均匀。\n数字感:只允许 2 到 3 个很小的深泥灰或暗土黄刻点,像生成节点或 UGC 扩散点;不要闪亮星星,不要糖珠。\n构图:正方形画布,居中图形标,干净浅灰米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和中间星核凹印。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、旋涡环形旧稿、三色花瓣旧稿。\n强禁止食品感:不要 glossy 高光、不要果冻质感、不要奶油夹心、不要糖霜、不要撒糖粒、不要饼干边、不要巧克力流心、不要金色膨胀星糖。\n本张重点:黑白商标验证。尽量用单色深浅关系表达软方圆和星核凹印,减少装饰,确保黑白化后轮廓仍成立。"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 659 KiB |
|
Before Width: | Height: | Size: 900 KiB |
|
Before Width: | Height: | Size: 738 KiB |
|
Before Width: | Height: | Size: 844 KiB |
|
Before Width: | Height: | Size: 802 KiB |
|
Before Width: | Height: | Size: 776 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 680 KiB |
@@ -1,61 +0,0 @@
|
||||
{
|
||||
"model": "gpt-image-2-all",
|
||||
"size": "1024x1024",
|
||||
"generatedAt": "2026-05-14T17:45:55.245Z",
|
||||
"creativeDirection": {
|
||||
"name": "陶泥儿脑洞星核图形标",
|
||||
"textPolicy": "no Chinese, no English, no wordmark",
|
||||
"palette": "奶白、米白、暖棕、陶土棕、少量暖金",
|
||||
"motif": "不规则软方圆陶泥团 + 脑洞星核 + 极少量星点"
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"id": "01-minimal-braincore",
|
||||
"title": "极简脑洞星核",
|
||||
"file": "taonier-braincore-01-minimal-braincore.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n核心隐喻:脑洞星核。一团奶白色、暖棕色调的不规则软方圆陶泥包裹一枚暖金色创意星核,表达灵感被捏造成型。\n风格:扁平矢量商标为主,带非常轻微的软陶质感;结构简洁、边缘柔和、轮廓清晰,适合商标、App 图标、社区头像。\n主色:奶白、米白、暖棕、陶土棕、少量暖金;整体温暖高级,不使用粉色、青色、蓝色、紫色、荧光色或彩虹色。\n数字感:只允许在星核周围出现 2 到 4 个极小暖金星点或像素点,暗示 AI 生成、UGC 传播和轻游戏趣味。\n构图:正方形画布,居中图形标,干净浅米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和星核。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、拟物甜品感。\n必须保持全新构图,不参考任何既有陶泥儿 logo 方案,不做旋涡环形旧稿,不做三色花瓣旧稿。\n本张重点:极简。只保留一个奶白不规则软方圆陶泥主体、一个居中的暖金四角星核、2 个极小暖金星点。不要额外装饰。"
|
||||
},
|
||||
{
|
||||
"id": "02-soft-square-clay-seal",
|
||||
"title": "软方圆陶泥印记",
|
||||
"file": "taonier-braincore-02-soft-square-clay-seal.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n核心隐喻:脑洞星核。一团奶白色、暖棕色调的不规则软方圆陶泥包裹一枚暖金色创意星核,表达灵感被捏造成型。\n风格:扁平矢量商标为主,带非常轻微的软陶质感;结构简洁、边缘柔和、轮廓清晰,适合商标、App 图标、社区头像。\n主色:奶白、米白、暖棕、陶土棕、少量暖金;整体温暖高级,不使用粉色、青色、蓝色、紫色、荧光色或彩虹色。\n数字感:只允许在星核周围出现 2 到 4 个极小暖金星点或像素点,暗示 AI 生成、UGC 传播和轻游戏趣味。\n构图:正方形画布,居中图形标,干净浅米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和星核。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、拟物甜品感。\n必须保持全新构图,不参考任何既有陶泥儿 logo 方案,不做旋涡环形旧稿,不做三色花瓣旧稿。\n本张重点:陶泥印记。主体像被轻轻按压成型的软方圆印章,边缘有自然手捏起伏,但不能像儿童玩具。星核略微偏心。"
|
||||
},
|
||||
{
|
||||
"id": "03-warm-brown-embedded-core",
|
||||
"title": "暖棕星核嵌入",
|
||||
"file": "taonier-braincore-03-warm-brown-embedded-core.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n核心隐喻:脑洞星核。一团奶白色、暖棕色调的不规则软方圆陶泥包裹一枚暖金色创意星核,表达灵感被捏造成型。\n风格:扁平矢量商标为主,带非常轻微的软陶质感;结构简洁、边缘柔和、轮廓清晰,适合商标、App 图标、社区头像。\n主色:奶白、米白、暖棕、陶土棕、少量暖金;整体温暖高级,不使用粉色、青色、蓝色、紫色、荧光色或彩虹色。\n数字感:只允许在星核周围出现 2 到 4 个极小暖金星点或像素点,暗示 AI 生成、UGC 传播和轻游戏趣味。\n构图:正方形画布,居中图形标,干净浅米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和星核。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、拟物甜品感。\n必须保持全新构图,不参考任何既有陶泥儿 logo 方案,不做旋涡环形旧稿,不做三色花瓣旧稿。\n本张重点:嵌入感。用暖棕内凹形或陶土棕阴影承托暖金星核,像灵感被嵌进陶泥里,仍保持扁平商标质感。"
|
||||
},
|
||||
{
|
||||
"id": "04-subtle-pinch-marks",
|
||||
"title": "轻微捏痕版本",
|
||||
"file": "taonier-braincore-04-subtle-pinch-marks.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n核心隐喻:脑洞星核。一团奶白色、暖棕色调的不规则软方圆陶泥包裹一枚暖金色创意星核,表达灵感被捏造成型。\n风格:扁平矢量商标为主,带非常轻微的软陶质感;结构简洁、边缘柔和、轮廓清晰,适合商标、App 图标、社区头像。\n主色:奶白、米白、暖棕、陶土棕、少量暖金;整体温暖高级,不使用粉色、青色、蓝色、紫色、荧光色或彩虹色。\n数字感:只允许在星核周围出现 2 到 4 个极小暖金星点或像素点,暗示 AI 生成、UGC 传播和轻游戏趣味。\n构图:正方形画布,居中图形标,干净浅米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和星核。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、拟物甜品感。\n必须保持全新构图,不参考任何既有陶泥儿 logo 方案,不做旋涡环形旧稿,不做三色花瓣旧稿。\n本张重点:捏痕。在陶泥主体边缘加入 2 到 3 个极轻微暖棕捏痕或凹口,表现可塑性;捏痕必须抽象、克制、可矢量化。"
|
||||
},
|
||||
{
|
||||
"id": "05-premium-geometric-balance",
|
||||
"title": "精品几何比例",
|
||||
"file": "taonier-braincore-05-premium-geometric-balance.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n核心隐喻:脑洞星核。一团奶白色、暖棕色调的不规则软方圆陶泥包裹一枚暖金色创意星核,表达灵感被捏造成型。\n风格:扁平矢量商标为主,带非常轻微的软陶质感;结构简洁、边缘柔和、轮廓清晰,适合商标、App 图标、社区头像。\n主色:奶白、米白、暖棕、陶土棕、少量暖金;整体温暖高级,不使用粉色、青色、蓝色、紫色、荧光色或彩虹色。\n数字感:只允许在星核周围出现 2 到 4 个极小暖金星点或像素点,暗示 AI 生成、UGC 传播和轻游戏趣味。\n构图:正方形画布,居中图形标,干净浅米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和星核。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、拟物甜品感。\n必须保持全新构图,不参考任何既有陶泥儿 logo 方案,不做旋涡环形旧稿,不做三色花瓣旧稿。\n本张重点:精品比例。整体更接近高级互联网 App 图标,几何平衡、负形干净、软方圆轮廓稳定,陶泥质感只保留一点点。"
|
||||
},
|
||||
{
|
||||
"id": "06-soft-clay-texture",
|
||||
"title": "柔软陶泥质感",
|
||||
"file": "taonier-braincore-06-soft-clay-texture.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n核心隐喻:脑洞星核。一团奶白色、暖棕色调的不规则软方圆陶泥包裹一枚暖金色创意星核,表达灵感被捏造成型。\n风格:扁平矢量商标为主,带非常轻微的软陶质感;结构简洁、边缘柔和、轮廓清晰,适合商标、App 图标、社区头像。\n主色:奶白、米白、暖棕、陶土棕、少量暖金;整体温暖高级,不使用粉色、青色、蓝色、紫色、荧光色或彩虹色。\n数字感:只允许在星核周围出现 2 到 4 个极小暖金星点或像素点,暗示 AI 生成、UGC 传播和轻游戏趣味。\n构图:正方形画布,居中图形标,干净浅米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和星核。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、拟物甜品感。\n必须保持全新构图,不参考任何既有陶泥儿 logo 方案,不做旋涡环形旧稿,不做三色花瓣旧稿。\n本张重点:柔软质感。在不破坏扁平矢量感的前提下,加入细腻奶油陶泥的微妙高光和暖棕渐层,不能变成 3D 玩具。"
|
||||
},
|
||||
{
|
||||
"id": "07-app-icon-ready",
|
||||
"title": "App 图标优先",
|
||||
"file": "taonier-braincore-07-app-icon-ready.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n核心隐喻:脑洞星核。一团奶白色、暖棕色调的不规则软方圆陶泥包裹一枚暖金色创意星核,表达灵感被捏造成型。\n风格:扁平矢量商标为主,带非常轻微的软陶质感;结构简洁、边缘柔和、轮廓清晰,适合商标、App 图标、社区头像。\n主色:奶白、米白、暖棕、陶土棕、少量暖金;整体温暖高级,不使用粉色、青色、蓝色、紫色、荧光色或彩虹色。\n数字感:只允许在星核周围出现 2 到 4 个极小暖金星点或像素点,暗示 AI 生成、UGC 传播和轻游戏趣味。\n构图:正方形画布,居中图形标,干净浅米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和星核。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、拟物甜品感。\n必须保持全新构图,不参考任何既有陶泥儿 logo 方案,不做旋涡环形旧稿,不做三色花瓣旧稿。\n本张重点:App 图标。图形占画面约 72%,轮廓饱满有记忆点,星核清晰醒目,适合放入圆角方形 App icon。"
|
||||
},
|
||||
{
|
||||
"id": "08-trademark-monochrome-ready",
|
||||
"title": "商标黑白提炼",
|
||||
"file": "taonier-braincore-08-trademark-monochrome-ready.png",
|
||||
"prompt": "请生成一枚全新的「陶泥儿」产品商标图形标概念稿,但画面中绝对不要出现任何中文字、英文字母、数字、符号字样或品牌字标。\n产品定位:精品 AI UGC 轻休闲小游戏创作与传播平台,用户可以像捏陶泥一样把脑洞、梗和灵感塑造成小游戏或趣味内容。\n核心隐喻:脑洞星核。一团奶白色、暖棕色调的不规则软方圆陶泥包裹一枚暖金色创意星核,表达灵感被捏造成型。\n风格:扁平矢量商标为主,带非常轻微的软陶质感;结构简洁、边缘柔和、轮廓清晰,适合商标、App 图标、社区头像。\n主色:奶白、米白、暖棕、陶土棕、少量暖金;整体温暖高级,不使用粉色、青色、蓝色、紫色、荧光色或彩虹色。\n数字感:只允许在星核周围出现 2 到 4 个极小暖金星点或像素点,暗示 AI 生成、UGC 传播和轻游戏趣味。\n构图:正方形画布,居中图形标,干净浅米白背景,留足安全边距;缩小到 64px 时仍能看清软方圆轮廓和星核。\n禁止:脸、眼睛、嘴巴、表情、角色身体、吉祥物立绘、儿童黏土玩具感、陶艺工具、手、笔刷、复杂场景、按钮、UI、边框、水印、文字、商标字标、拟物甜品感。\n必须保持全新构图,不参考任何既有陶泥儿 logo 方案,不做旋涡环形旧稿,不做三色花瓣旧稿。\n本张重点:商标注册。优先保证黑白化后仍清楚,减少渐变和细节,用奶白主体、暖棕负形和暖金星核形成强轮廓。"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 587 KiB |
|
Before Width: | Height: | Size: 626 KiB |
|
Before Width: | Height: | Size: 623 KiB |
|
Before Width: | Height: | Size: 630 KiB |
|
Before Width: | Height: | Size: 633 KiB |
|
Before Width: | Height: | Size: 611 KiB |
|
Before Width: | Height: | Size: 590 KiB |
|
Before Width: | Height: | Size: 629 KiB |
|
Before Width: | Height: | Size: 589 KiB |
@@ -1,88 +0,0 @@
|
||||
{
|
||||
"model": "gpt-image-2-all",
|
||||
"size": "1024x1024",
|
||||
"generatedAt": "2026-05-14T20:18:49.419Z",
|
||||
"logoSkillSummary": {
|
||||
"requiredReview": "visual inspection, 32px readability, black-white viability",
|
||||
"outputStatus": "AI concept only; final logo needs vector cleanup"
|
||||
},
|
||||
"brief": {
|
||||
"brand": "陶泥儿",
|
||||
"logoType": "symbol/icon-only mark, no wordmark",
|
||||
"product": "AI UGC 轻休闲小游戏创作与传播平台,用户像捏陶泥一样把脑洞、梗和灵感塑造成作品",
|
||||
"personality": [
|
||||
"亲和",
|
||||
"精品",
|
||||
"创作感",
|
||||
"轻松",
|
||||
"年轻",
|
||||
"有传播记忆点"
|
||||
],
|
||||
"mustHave": [
|
||||
"闭合不规则几何底盘",
|
||||
"外轮廓由流畅曲线组成",
|
||||
"整体是一个完整符号而不是自由飘带",
|
||||
"32px 仍能识别",
|
||||
"黑白化后仍成立",
|
||||
"无中文、无英文、无字标"
|
||||
],
|
||||
"avoid": [
|
||||
"整体方形或圆角方块",
|
||||
"中心星星或任何星形",
|
||||
"自由飘带、旋涡、S/G 字母感",
|
||||
"巧克力面包、甜点、饼干、糖果等食物感",
|
||||
"砖块、土块、泥饼、陶片、考古印章",
|
||||
"脸、表情、吉祥物、手、工具"
|
||||
]
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"id": "01-closed-curve-mark",
|
||||
"title": "闭合曲线标",
|
||||
"file": "taonier-logo-brief-01-closed-curve-mark.png",
|
||||
"prompt": "Create an icon-only brand logo symbol for the Chinese product named \"陶泥儿\"; do not render any Chinese, English, letters, numbers, wordmark, tagline, or text.\nBrand personality: friendly, premium, creative, lightweight, young, memorable, suitable for an AI UGC casual game creation platform.\nCore metaphor: users shape imagination like clay. The logo should communicate soft creative material becoming a refined digital product symbol.\nLogo type: abstract symbol/icon only. Not an emblem with text, not a mascot, not an app-icon rounded-square background.\nMain element: one closed irregular geometric base shape made from smooth flowing curves. The outer contour must be closed, continuous, recognizable, organic, and vector-friendly.\nThe shape must not be a square, rounded square, circle, ellipse, simple blob, ribbon, swirl, S shape, G shape, open ring, or loose strip. It should feel like a refined custom symbol with 5-7 soft curve turns.\nInternal design: use only 1-2 broad smooth curve partitions or negative-shape cuts to make the mark memorable. No center icon inserted. No star, no spark, no hole shaped like a star.\nStyle: modern minimalist vector logo with very subtle matte clay warmth. Clean edges, broad shapes, high contrast, no tiny details. It must look good and recognizable at 32px favicon size.\nColor: warm ceramic white, light terracotta, clay orange, warm brown, with optional small low-saturation teal, indigo-gray, or dark mud gray accent. Avoid sweet candy colors. No glossy highlights.\nFood avoidance is critical: the mark must not look like bread, chocolate bread, croissant, pastry, cookie, candy, donut, cream filling, sauce, baked dough, dessert, or food packaging.\nMaterial avoidance: do not make it look like brick, dirt clod, mud pie, pottery shard, stone, archaeological stamp, or rough handmade craft class object.\nComposition: centered on a clean light background, generous safe area, no border, no UI, no watermark. Use simple readable silhouette first.\nValidation targets: black-and-white version should still read clearly; the large shape should be recognizable at 32px.\nVariant focus: the cleanest closed irregular curve mark. Use two large color areas separated by one smooth internal curve. Maximize 32px readability."
|
||||
},
|
||||
{
|
||||
"id": "02-friendly-geo-seed",
|
||||
"title": "亲和几何种",
|
||||
"file": "taonier-logo-brief-02-friendly-geo-seed.png",
|
||||
"prompt": "Create an icon-only brand logo symbol for the Chinese product named \"陶泥儿\"; do not render any Chinese, English, letters, numbers, wordmark, tagline, or text.\nBrand personality: friendly, premium, creative, lightweight, young, memorable, suitable for an AI UGC casual game creation platform.\nCore metaphor: users shape imagination like clay. The logo should communicate soft creative material becoming a refined digital product symbol.\nLogo type: abstract symbol/icon only. Not an emblem with text, not a mascot, not an app-icon rounded-square background.\nMain element: one closed irregular geometric base shape made from smooth flowing curves. The outer contour must be closed, continuous, recognizable, organic, and vector-friendly.\nThe shape must not be a square, rounded square, circle, ellipse, simple blob, ribbon, swirl, S shape, G shape, open ring, or loose strip. It should feel like a refined custom symbol with 5-7 soft curve turns.\nInternal design: use only 1-2 broad smooth curve partitions or negative-shape cuts to make the mark memorable. No center icon inserted. No star, no spark, no hole shaped like a star.\nStyle: modern minimalist vector logo with very subtle matte clay warmth. Clean edges, broad shapes, high contrast, no tiny details. It must look good and recognizable at 32px favicon size.\nColor: warm ceramic white, light terracotta, clay orange, warm brown, with optional small low-saturation teal, indigo-gray, or dark mud gray accent. Avoid sweet candy colors. No glossy highlights.\nFood avoidance is critical: the mark must not look like bread, chocolate bread, croissant, pastry, cookie, candy, donut, cream filling, sauce, baked dough, dessert, or food packaging.\nMaterial avoidance: do not make it look like brick, dirt clod, mud pie, pottery shard, stone, archaeological stamp, or rough handmade craft class object.\nComposition: centered on a clean light background, generous safe area, no border, no UI, no watermark. Use simple readable silhouette first.\nValidation targets: black-and-white version should still read clearly; the large shape should be recognizable at 32px.\nVariant focus: a friendly seed-like closed geometric base, but not a literal seed, not food. Rounded and approachable with one teal accent curve."
|
||||
},
|
||||
{
|
||||
"id": "03-premium-soft-contour",
|
||||
"title": "精品软轮廓",
|
||||
"file": "taonier-logo-brief-03-premium-soft-contour.png",
|
||||
"prompt": "Create an icon-only brand logo symbol for the Chinese product named \"陶泥儿\"; do not render any Chinese, English, letters, numbers, wordmark, tagline, or text.\nBrand personality: friendly, premium, creative, lightweight, young, memorable, suitable for an AI UGC casual game creation platform.\nCore metaphor: users shape imagination like clay. The logo should communicate soft creative material becoming a refined digital product symbol.\nLogo type: abstract symbol/icon only. Not an emblem with text, not a mascot, not an app-icon rounded-square background.\nMain element: one closed irregular geometric base shape made from smooth flowing curves. The outer contour must be closed, continuous, recognizable, organic, and vector-friendly.\nThe shape must not be a square, rounded square, circle, ellipse, simple blob, ribbon, swirl, S shape, G shape, open ring, or loose strip. It should feel like a refined custom symbol with 5-7 soft curve turns.\nInternal design: use only 1-2 broad smooth curve partitions or negative-shape cuts to make the mark memorable. No center icon inserted. No star, no spark, no hole shaped like a star.\nStyle: modern minimalist vector logo with very subtle matte clay warmth. Clean edges, broad shapes, high contrast, no tiny details. It must look good and recognizable at 32px favicon size.\nColor: warm ceramic white, light terracotta, clay orange, warm brown, with optional small low-saturation teal, indigo-gray, or dark mud gray accent. Avoid sweet candy colors. No glossy highlights.\nFood avoidance is critical: the mark must not look like bread, chocolate bread, croissant, pastry, cookie, candy, donut, cream filling, sauce, baked dough, dessert, or food packaging.\nMaterial avoidance: do not make it look like brick, dirt clod, mud pie, pottery shard, stone, archaeological stamp, or rough handmade craft class object.\nComposition: centered on a clean light background, generous safe area, no border, no UI, no watermark. Use simple readable silhouette first.\nValidation targets: black-and-white version should still read clearly; the large shape should be recognizable at 32px.\nVariant focus: premium, calm, fewer colors. Strong outer contour with a dark mud-gray internal negative curve. Very logo-like, not illustrative."
|
||||
},
|
||||
{
|
||||
"id": "04-playful-closed-tile",
|
||||
"title": "轻玩闭合片",
|
||||
"file": "taonier-logo-brief-04-playful-closed-tile.png",
|
||||
"prompt": "Create an icon-only brand logo symbol for the Chinese product named \"陶泥儿\"; do not render any Chinese, English, letters, numbers, wordmark, tagline, or text.\nBrand personality: friendly, premium, creative, lightweight, young, memorable, suitable for an AI UGC casual game creation platform.\nCore metaphor: users shape imagination like clay. The logo should communicate soft creative material becoming a refined digital product symbol.\nLogo type: abstract symbol/icon only. Not an emblem with text, not a mascot, not an app-icon rounded-square background.\nMain element: one closed irregular geometric base shape made from smooth flowing curves. The outer contour must be closed, continuous, recognizable, organic, and vector-friendly.\nThe shape must not be a square, rounded square, circle, ellipse, simple blob, ribbon, swirl, S shape, G shape, open ring, or loose strip. It should feel like a refined custom symbol with 5-7 soft curve turns.\nInternal design: use only 1-2 broad smooth curve partitions or negative-shape cuts to make the mark memorable. No center icon inserted. No star, no spark, no hole shaped like a star.\nStyle: modern minimalist vector logo with very subtle matte clay warmth. Clean edges, broad shapes, high contrast, no tiny details. It must look good and recognizable at 32px favicon size.\nColor: warm ceramic white, light terracotta, clay orange, warm brown, with optional small low-saturation teal, indigo-gray, or dark mud gray accent. Avoid sweet candy colors. No glossy highlights.\nFood avoidance is critical: the mark must not look like bread, chocolate bread, croissant, pastry, cookie, candy, donut, cream filling, sauce, baked dough, dessert, or food packaging.\nMaterial avoidance: do not make it look like brick, dirt clod, mud pie, pottery shard, stone, archaeological stamp, or rough handmade craft class object.\nComposition: centered on a clean light background, generous safe area, no border, no UI, no watermark. Use simple readable silhouette first.\nValidation targets: black-and-white version should still read clearly; the large shape should be recognizable at 32px.\nVariant focus: a more playful closed irregular tile with warm terracotta and ceramic white. The internal curve should suggest creation flow, not filling."
|
||||
},
|
||||
{
|
||||
"id": "05-monochrome-first",
|
||||
"title": "黑白优先",
|
||||
"file": "taonier-logo-brief-05-monochrome-first.png",
|
||||
"prompt": "Create an icon-only brand logo symbol for the Chinese product named \"陶泥儿\"; do not render any Chinese, English, letters, numbers, wordmark, tagline, or text.\nBrand personality: friendly, premium, creative, lightweight, young, memorable, suitable for an AI UGC casual game creation platform.\nCore metaphor: users shape imagination like clay. The logo should communicate soft creative material becoming a refined digital product symbol.\nLogo type: abstract symbol/icon only. Not an emblem with text, not a mascot, not an app-icon rounded-square background.\nMain element: one closed irregular geometric base shape made from smooth flowing curves. The outer contour must be closed, continuous, recognizable, organic, and vector-friendly.\nThe shape must not be a square, rounded square, circle, ellipse, simple blob, ribbon, swirl, S shape, G shape, open ring, or loose strip. It should feel like a refined custom symbol with 5-7 soft curve turns.\nInternal design: use only 1-2 broad smooth curve partitions or negative-shape cuts to make the mark memorable. No center icon inserted. No star, no spark, no hole shaped like a star.\nStyle: modern minimalist vector logo with very subtle matte clay warmth. Clean edges, broad shapes, high contrast, no tiny details. It must look good and recognizable at 32px favicon size.\nColor: warm ceramic white, light terracotta, clay orange, warm brown, with optional small low-saturation teal, indigo-gray, or dark mud gray accent. Avoid sweet candy colors. No glossy highlights.\nFood avoidance is critical: the mark must not look like bread, chocolate bread, croissant, pastry, cookie, candy, donut, cream filling, sauce, baked dough, dessert, or food packaging.\nMaterial avoidance: do not make it look like brick, dirt clod, mud pie, pottery shard, stone, archaeological stamp, or rough handmade craft class object.\nComposition: centered on a clean light background, generous safe area, no border, no UI, no watermark. Use simple readable silhouette first.\nValidation targets: black-and-white version should still read clearly; the large shape should be recognizable at 32px.\nVariant focus: design as if it will be converted to black and white. Use bold positive and negative shapes; color only supports the structure."
|
||||
},
|
||||
{
|
||||
"id": "06-digital-clay-accent",
|
||||
"title": "数字陶泥点",
|
||||
"file": "taonier-logo-brief-06-digital-clay-accent.png",
|
||||
"prompt": "Create an icon-only brand logo symbol for the Chinese product named \"陶泥儿\"; do not render any Chinese, English, letters, numbers, wordmark, tagline, or text.\nBrand personality: friendly, premium, creative, lightweight, young, memorable, suitable for an AI UGC casual game creation platform.\nCore metaphor: users shape imagination like clay. The logo should communicate soft creative material becoming a refined digital product symbol.\nLogo type: abstract symbol/icon only. Not an emblem with text, not a mascot, not an app-icon rounded-square background.\nMain element: one closed irregular geometric base shape made from smooth flowing curves. The outer contour must be closed, continuous, recognizable, organic, and vector-friendly.\nThe shape must not be a square, rounded square, circle, ellipse, simple blob, ribbon, swirl, S shape, G shape, open ring, or loose strip. It should feel like a refined custom symbol with 5-7 soft curve turns.\nInternal design: use only 1-2 broad smooth curve partitions or negative-shape cuts to make the mark memorable. No center icon inserted. No star, no spark, no hole shaped like a star.\nStyle: modern minimalist vector logo with very subtle matte clay warmth. Clean edges, broad shapes, high contrast, no tiny details. It must look good and recognizable at 32px favicon size.\nColor: warm ceramic white, light terracotta, clay orange, warm brown, with optional small low-saturation teal, indigo-gray, or dark mud gray accent. Avoid sweet candy colors. No glossy highlights.\nFood avoidance is critical: the mark must not look like bread, chocolate bread, croissant, pastry, cookie, candy, donut, cream filling, sauce, baked dough, dessert, or food packaging.\nMaterial avoidance: do not make it look like brick, dirt clod, mud pie, pottery shard, stone, archaeological stamp, or rough handmade craft class object.\nComposition: centered on a clean light background, generous safe area, no border, no UI, no watermark. Use simple readable silhouette first.\nValidation targets: black-and-white version should still read clearly; the large shape should be recognizable at 32px.\nVariant focus: include at most two tiny geometric accent dots or notches that imply AI/UGC, but they must not look like candy sprinkles or decorative confetti."
|
||||
},
|
||||
{
|
||||
"id": "07-compact-avatar-symbol",
|
||||
"title": "头像紧凑标",
|
||||
"file": "taonier-logo-brief-07-compact-avatar-symbol.png",
|
||||
"prompt": "Create an icon-only brand logo symbol for the Chinese product named \"陶泥儿\"; do not render any Chinese, English, letters, numbers, wordmark, tagline, or text.\nBrand personality: friendly, premium, creative, lightweight, young, memorable, suitable for an AI UGC casual game creation platform.\nCore metaphor: users shape imagination like clay. The logo should communicate soft creative material becoming a refined digital product symbol.\nLogo type: abstract symbol/icon only. Not an emblem with text, not a mascot, not an app-icon rounded-square background.\nMain element: one closed irregular geometric base shape made from smooth flowing curves. The outer contour must be closed, continuous, recognizable, organic, and vector-friendly.\nThe shape must not be a square, rounded square, circle, ellipse, simple blob, ribbon, swirl, S shape, G shape, open ring, or loose strip. It should feel like a refined custom symbol with 5-7 soft curve turns.\nInternal design: use only 1-2 broad smooth curve partitions or negative-shape cuts to make the mark memorable. No center icon inserted. No star, no spark, no hole shaped like a star.\nStyle: modern minimalist vector logo with very subtle matte clay warmth. Clean edges, broad shapes, high contrast, no tiny details. It must look good and recognizable at 32px favicon size.\nColor: warm ceramic white, light terracotta, clay orange, warm brown, with optional small low-saturation teal, indigo-gray, or dark mud gray accent. Avoid sweet candy colors. No glossy highlights.\nFood avoidance is critical: the mark must not look like bread, chocolate bread, croissant, pastry, cookie, candy, donut, cream filling, sauce, baked dough, dessert, or food packaging.\nMaterial avoidance: do not make it look like brick, dirt clod, mud pie, pottery shard, stone, archaeological stamp, or rough handmade craft class object.\nComposition: centered on a clean light background, generous safe area, no border, no UI, no watermark. Use simple readable silhouette first.\nValidation targets: black-and-white version should still read clearly; the large shape should be recognizable at 32px.\nVariant focus: compact social-avatar readability. The closed contour should be slightly fuller and more iconic, but not a rounded-square app background."
|
||||
},
|
||||
{
|
||||
"id": "08-designer-vector-ready",
|
||||
"title": "矢量定稿感",
|
||||
"file": "taonier-logo-brief-08-designer-vector-ready.png",
|
||||
"prompt": "Create an icon-only brand logo symbol for the Chinese product named \"陶泥儿\"; do not render any Chinese, English, letters, numbers, wordmark, tagline, or text.\nBrand personality: friendly, premium, creative, lightweight, young, memorable, suitable for an AI UGC casual game creation platform.\nCore metaphor: users shape imagination like clay. The logo should communicate soft creative material becoming a refined digital product symbol.\nLogo type: abstract symbol/icon only. Not an emblem with text, not a mascot, not an app-icon rounded-square background.\nMain element: one closed irregular geometric base shape made from smooth flowing curves. The outer contour must be closed, continuous, recognizable, organic, and vector-friendly.\nThe shape must not be a square, rounded square, circle, ellipse, simple blob, ribbon, swirl, S shape, G shape, open ring, or loose strip. It should feel like a refined custom symbol with 5-7 soft curve turns.\nInternal design: use only 1-2 broad smooth curve partitions or negative-shape cuts to make the mark memorable. No center icon inserted. No star, no spark, no hole shaped like a star.\nStyle: modern minimalist vector logo with very subtle matte clay warmth. Clean edges, broad shapes, high contrast, no tiny details. It must look good and recognizable at 32px favicon size.\nColor: warm ceramic white, light terracotta, clay orange, warm brown, with optional small low-saturation teal, indigo-gray, or dark mud gray accent. Avoid sweet candy colors. No glossy highlights.\nFood avoidance is critical: the mark must not look like bread, chocolate bread, croissant, pastry, cookie, candy, donut, cream filling, sauce, baked dough, dessert, or food packaging.\nMaterial avoidance: do not make it look like brick, dirt clod, mud pie, pottery shard, stone, archaeological stamp, or rough handmade craft class object.\nComposition: centered on a clean light background, generous safe area, no border, no UI, no watermark. Use simple readable silhouette first.\nValidation targets: black-and-white version should still read clearly; the large shape should be recognizable at 32px.\nVariant focus: make it look like a designer-ready vector concept: 2-3 flat shapes, crisp boundaries, distinctive closed outer contour, minimal material texture."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 821 KiB |
|
Before Width: | Height: | Size: 959 KiB |
|
Before Width: | Height: | Size: 839 KiB |
|
Before Width: | Height: | Size: 749 KiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 390 KiB |
|
Before Width: | Height: | Size: 906 KiB |
|
Before Width: | Height: | Size: 822 KiB |
|
Before Width: | Height: | Size: 968 KiB |
|
Before Width: | Height: | Size: 803 KiB |
|
Before Width: | Height: | Size: 783 KiB |