Files
water/tmp/hatch-pet/omen-cat/run/pet_request.json
yuhaiming 70e2356f22 fix(app): 修复 AppController 安全与查询问题
- 加强异常处理、类型安全和图片上传校验
- 优化设备相关查询,避免重复访问数据源
- 补充并记录并发测试与审查修复实施计划
2026-07-17 08:20:44 +08:00

281 lines
8.3 KiB
JSON

{
"pet_id": "youmiao",
"display_name": "\u5e7d\u55b5",
"description": "\u4e00\u53ea\u62ab\u7740\u6697\u7d2b\u5e7d\u5f71\u515c\u5e3d\u3001\u4ee5\u51b7\u9752\u9762\u7eb9\u89c2\u5bdf\u4efb\u52a1\u7684\u6c89\u9759\u732b\u5f62\u4f19\u4f34.",
"created_at": "2026-07-16T06:34:52.627259+00:00",
"sprite_version_number": 2,
"atlas": {
"columns": 8,
"rows": 11,
"cell_width": 192,
"cell_height": 208,
"width": 1536,
"height": 2288
},
"rows": [
{
"state": "idle",
"row": 0,
"frames": 6,
"purpose": "calm resting, breathing, and blinking loop"
},
{
"state": "running-right",
"row": 1,
"frames": 8,
"purpose": "rightward drag movement loop"
},
{
"state": "running-left",
"row": 2,
"frames": 8,
"purpose": "leftward drag movement loop"
},
{
"state": "waving",
"row": 3,
"frames": 4,
"purpose": "greeting or attention gesture"
},
{
"state": "jumping",
"row": 4,
"frames": 5,
"purpose": "hover or playful jump"
},
{
"state": "failed",
"row": 5,
"frames": 8,
"purpose": "blocked, failed, or cancelled reaction"
},
{
"state": "waiting",
"row": 6,
"frames": 6,
"purpose": "waiting for approval, help, or user input"
},
{
"state": "running",
"row": 7,
"frames": 6,
"purpose": "active task work or processing"
},
{
"state": "review",
"row": 8,
"frames": 6,
"purpose": "ready or completed output review"
},
{
"state": "look-row-9",
"row": 9,
"frames": 8,
"directions": [
"000",
"022.5",
"045",
"067.5",
"090",
"112.5",
"135",
"157.5"
],
"purpose": "clockwise look directions from up through down-right"
},
{
"state": "look-row-10",
"row": 10,
"frames": 8,
"directions": [
"180",
"202.5",
"225",
"247.5",
"270",
"292.5",
"315",
"337.5"
],
"purpose": "clockwise look directions from down through up-left"
}
],
"layout_guides": [
{
"state": "idle",
"path": "references\\layout-guides\\idle.png",
"width": 1152,
"height": 208,
"frames": 6,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
},
{
"state": "running-right",
"path": "references\\layout-guides\\running-right.png",
"width": 1536,
"height": 208,
"frames": 8,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
},
{
"state": "running-left",
"path": "references\\layout-guides\\running-left.png",
"width": 1536,
"height": 208,
"frames": 8,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
},
{
"state": "waving",
"path": "references\\layout-guides\\waving.png",
"width": 768,
"height": 208,
"frames": 4,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
},
{
"state": "jumping",
"path": "references\\layout-guides\\jumping.png",
"width": 960,
"height": 208,
"frames": 5,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
},
{
"state": "failed",
"path": "references\\layout-guides\\failed.png",
"width": 1536,
"height": 208,
"frames": 8,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
},
{
"state": "waiting",
"path": "references\\layout-guides\\waiting.png",
"width": 1152,
"height": 208,
"frames": 6,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
},
{
"state": "running",
"path": "references\\layout-guides\\running.png",
"width": 1152,
"height": 208,
"frames": 6,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
},
{
"state": "review",
"path": "references\\layout-guides\\review.png",
"width": 1152,
"height": 208,
"frames": 6,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
},
{
"state": "look-row-9",
"path": "references\\layout-guides\\look-row-9.png",
"width": 1536,
"height": 208,
"frames": 8,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
},
{
"state": "look-row-10",
"path": "references\\layout-guides\\look-row-10.png",
"width": 1536,
"height": 208,
"frames": 8,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
},
{
"state": "look-cardinals",
"path": "references\\layout-guides\\look-cardinals.png",
"width": 768,
"height": 208,
"frames": 4,
"cell_width": 192,
"cell_height": 208,
"safe_margin_x": 18,
"safe_margin_y": 16,
"usage": "layout guide input only; do not copy visible guide lines into generated sprite strips"
}
],
"references": [
{
"path": "D:\\code\\water\\tmp\\hatch-pet\\omen-cat\\run\\references\\reference-01.png",
"width": 364,
"height": 354,
"mode": "RGB",
"format": "PNG",
"source_path": "D:\\code\\water\\tmp\\hatch-pet\\omen-cat\\reference\\omen-cat-source.png",
"copied_path": "D:\\code\\water\\tmp\\hatch-pet\\omen-cat\\run\\references\\reference-01.png"
}
],
"chroma_key": {
"hex": "#FFFF00",
"rgb": [
255,
255,
0
],
"name": "yellow",
"selection": "auto",
"score": 217.85
},
"pet_notes": "Dark Omen-inspired cartoon cat; oversized angular purple cat-eared hood; black void face with three cyan energy marks; compact feline body; broad charcoal armor and bandage wraps; long attached tail; no weapons, logos, text, scenery, shadows, smoke, particles, detached effects, blur, or bloom",
"style_preset": "flat-vector",
"style_notes": "Dark flat illustration with restrained cel shading, broad readable armor shapes, crisp opaque cyan marks, compact sprite-safe silhouette",
"style_contract": "Pet-safe sprite: compact full-body mascot, readable in a 192x208 cell, clear silhouette, simple face, stable palette/materials, and crisp edges for chroma-key extraction. Style `flat-vector`: Flat vector-style mascot with simple geometric forms, crisp color areas, clean outline, and minimal shading. User style notes: Dark flat illustration with restrained cel shading, broad readable armor shapes, crisp opaque cyan marks, compact sprite-safe silhouette.",
"brand_name": "",
"brand_brief": "",
"brand_sources": [],
"pet_safe_style": "Pet-safe sprite: compact full-body mascot, readable in a 192x208 cell, clear silhouette, simple face, stable palette/materials, and crisp edges for chroma-key extraction.",
"primary_generation_skill": "$imagegen"
}