fix(app): 修复 AppController 安全与查询问题
- 加强异常处理、类型安全和图片上传校验 - 优化设备相关查询,避免重复访问数据源 - 补充并记录并发测试与审查修复实施计划
48
.idea/compiler.xml
generated
@@ -13,30 +13,30 @@
|
||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||
<outputRelativeToContentRoot value="true" />
|
||||
<processorPath useClasspath="false">
|
||||
<entry name="$PROJECT_DIR$/../../repository/com/github/therapi/therapi-runtime-javadoc-scribe/0.15.0/therapi-runtime-javadoc-scribe-0.15.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/com/github/therapi/therapi-runtime-javadoc/0.15.0/therapi-runtime-javadoc-0.15.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/projectlombok/lombok/1.18.42/lombok-1.18.42.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/springframework/boot/spring-boot-configuration-processor/3.5.12/spring-boot-configuration-processor-3.5.12.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/io/github/linpeilie/mapstruct-plus-processor/1.5.0/mapstruct-plus-processor-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/io/github/linpeilie/mapstruct-plus/1.5.0/mapstruct-plus-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/mapstruct/mapstruct/1.6.3/mapstruct-1.6.3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/io/github/linpeilie/mapstruct-plus-object-convert/1.5.0/mapstruct-plus-object-convert-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/cn/easii/tutelary-repackage-javapoet/1.0.5/tutelary-repackage-javapoet-1.0.5.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/mapstruct/mapstruct-processor/1.6.3/mapstruct-processor-1.6.3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/mapstruct/tools/gem/gem-api/1.0.0.Alpha3/gem-api-1.0.0.Alpha3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/projectlombok/lombok-mapstruct-binding/0.2.0/lombok-mapstruct-binding-0.2.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/com/github/therapi/therapi-runtime-javadoc-scribe/0.15.0/therapi-runtime-javadoc-scribe-0.15.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/com/github/therapi/therapi-runtime-javadoc/0.15.0/therapi-runtime-javadoc-0.15.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/projectlombok/lombok/1.18.42/lombok-1.18.42.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/springframework/boot/spring-boot-configuration-processor/3.5.12/spring-boot-configuration-processor-3.5.12.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/io/github/linpeilie/mapstruct-plus-processor/1.5.0/mapstruct-plus-processor-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/io/github/linpeilie/mapstruct-plus/1.5.0/mapstruct-plus-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/mapstruct/mapstruct/1.6.3/mapstruct-1.6.3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/io/github/linpeilie/mapstruct-plus-object-convert/1.5.0/mapstruct-plus-object-convert-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/cn/easii/tutelary-repackage-javapoet/1.0.5/tutelary-repackage-javapoet-1.0.5.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/mapstruct/mapstruct-processor/1.6.3/mapstruct-processor-1.6.3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/mapstruct/tools/gem/gem-api/1.0.0.Alpha3/gem-api-1.0.0.Alpha3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../repository/org/projectlombok/lombok-mapstruct-binding/0.2.0/lombok-mapstruct-binding-0.2.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/com/github/therapi/therapi-runtime-javadoc-scribe/0.15.0/therapi-runtime-javadoc-scribe-0.15.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/com/github/therapi/therapi-runtime-javadoc/0.15.0/therapi-runtime-javadoc-0.15.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/projectlombok/lombok/1.18.42/lombok-1.18.42.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/springframework/boot/spring-boot-configuration-processor/3.5.12/spring-boot-configuration-processor-3.5.12.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/io/github/linpeilie/mapstruct-plus-processor/1.5.0/mapstruct-plus-processor-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/io/github/linpeilie/mapstruct-plus/1.5.0/mapstruct-plus-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/mapstruct/mapstruct/1.6.3/mapstruct-1.6.3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/io/github/linpeilie/mapstruct-plus-object-convert/1.5.0/mapstruct-plus-object-convert-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/cn/easii/tutelary-repackage-javapoet/1.0.5/tutelary-repackage-javapoet-1.0.5.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/mapstruct/mapstruct-processor/1.6.3/mapstruct-processor-1.6.3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/mapstruct/tools/gem/gem-api/1.0.0.Alpha3/gem-api-1.0.0.Alpha3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/projectlombok/lombok-mapstruct-binding/0.2.0/lombok-mapstruct-binding-0.2.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/com/github/therapi/therapi-runtime-javadoc-scribe/0.15.0/therapi-runtime-javadoc-scribe-0.15.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/com/github/therapi/therapi-runtime-javadoc/0.15.0/therapi-runtime-javadoc-0.15.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/projectlombok/lombok/1.18.42/lombok-1.18.42.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/springframework/boot/spring-boot-configuration-processor/3.5.12/spring-boot-configuration-processor-3.5.12.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/io/github/linpeilie/mapstruct-plus-processor/1.5.0/mapstruct-plus-processor-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/io/github/linpeilie/mapstruct-plus/1.5.0/mapstruct-plus-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/mapstruct/mapstruct/1.6.3/mapstruct-1.6.3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/io/github/linpeilie/mapstruct-plus-object-convert/1.5.0/mapstruct-plus-object-convert-1.5.0.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/cn/easii/tutelary-repackage-javapoet/1.0.5/tutelary-repackage-javapoet-1.0.5.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/mapstruct/mapstruct-processor/1.6.3/mapstruct-processor-1.6.3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/mapstruct/tools/gem/gem-api/1.0.0.Alpha3/gem-api-1.0.0.Alpha3.jar" />
|
||||
<entry name="$PROJECT_DIR$/../../../repository/org/projectlombok/lombok-mapstruct-binding/0.2.0/lombok-mapstruct-binding-0.2.0.jar" />
|
||||
</processorPath>
|
||||
<module name="water-app" />
|
||||
<module name="water-common-excel" />
|
||||
|
||||
|
Before Width: | Height: | Size: 67 KiB |
@@ -1,595 +0,0 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"created_at": "2026-07-16T06:34:52.640872+00:00",
|
||||
"run_dir": "D:\\code\\water\\tmp\\hatch-pet\\omen-cat\\run",
|
||||
"primary_generation_skill": "$imagegen",
|
||||
"jobs": [
|
||||
{
|
||||
"id": "base",
|
||||
"kind": "base-pet",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/base-pet.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/base.png",
|
||||
"depends_on": [],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false
|
||||
},
|
||||
{
|
||||
"id": "idle",
|
||||
"kind": "row-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/rows/idle.md",
|
||||
"retry_prompt_file": "prompts/row-retries/idle.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/idle.png",
|
||||
"role": "layout guide for 6 frame slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/idle.png",
|
||||
"depends_on": [
|
||||
"base"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"parallelizable_after": [
|
||||
"base"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": false,
|
||||
"reason": "no deterministic derivation is configured for this state"
|
||||
},
|
||||
"mirror_policy": {}
|
||||
},
|
||||
{
|
||||
"id": "running-right",
|
||||
"kind": "row-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/rows/running-right.md",
|
||||
"retry_prompt_file": "prompts/row-retries/running-right.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/running-right.png",
|
||||
"role": "layout guide for 8 frame slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/running-right.png",
|
||||
"depends_on": [
|
||||
"base"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"parallelizable_after": [
|
||||
"base"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": false,
|
||||
"reason": "no deterministic derivation is configured for this state"
|
||||
},
|
||||
"mirror_policy": {}
|
||||
},
|
||||
{
|
||||
"id": "running-left",
|
||||
"kind": "row-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/rows/running-left.md",
|
||||
"retry_prompt_file": "prompts/row-retries/running-left.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/running-left.png",
|
||||
"role": "layout guide for 8 frame slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
},
|
||||
{
|
||||
"path": "decoded/running-right.png",
|
||||
"role": "rightward gait reference for leftward row decision"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/running-left.png",
|
||||
"depends_on": [
|
||||
"base",
|
||||
"running-right"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"parallelizable_after": [
|
||||
"base",
|
||||
"running-right"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": true,
|
||||
"may_derive_from": "running-right",
|
||||
"derivation": "framewise-horizontal-mirror-preserving-order",
|
||||
"requires_explicit_approval": true,
|
||||
"fallback_generation_skill": "$imagegen"
|
||||
},
|
||||
"mirror_policy": {
|
||||
"may_derive": true,
|
||||
"may_derive_from": "running-right",
|
||||
"derivation": "framewise-horizontal-mirror-preserving-order",
|
||||
"requires_explicit_approval": true,
|
||||
"fallback_generation_skill": "$imagegen"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "waving",
|
||||
"kind": "row-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/rows/waving.md",
|
||||
"retry_prompt_file": "prompts/row-retries/waving.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/waving.png",
|
||||
"role": "layout guide for 4 frame slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/waving.png",
|
||||
"depends_on": [
|
||||
"base"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"parallelizable_after": [
|
||||
"base"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": false,
|
||||
"reason": "state requires its own generated animation semantics"
|
||||
},
|
||||
"mirror_policy": {}
|
||||
},
|
||||
{
|
||||
"id": "jumping",
|
||||
"kind": "row-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/rows/jumping.md",
|
||||
"retry_prompt_file": "prompts/row-retries/jumping.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/jumping.png",
|
||||
"role": "layout guide for 5 frame slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/jumping.png",
|
||||
"depends_on": [
|
||||
"base"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"parallelizable_after": [
|
||||
"base"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": false,
|
||||
"reason": "state requires its own generated animation semantics"
|
||||
},
|
||||
"mirror_policy": {}
|
||||
},
|
||||
{
|
||||
"id": "failed",
|
||||
"kind": "row-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/rows/failed.md",
|
||||
"retry_prompt_file": "prompts/row-retries/failed.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/failed.png",
|
||||
"role": "layout guide for 8 frame slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/failed.png",
|
||||
"depends_on": [
|
||||
"base"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"parallelizable_after": [
|
||||
"base"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": false,
|
||||
"reason": "state requires its own generated animation semantics"
|
||||
},
|
||||
"mirror_policy": {}
|
||||
},
|
||||
{
|
||||
"id": "waiting",
|
||||
"kind": "row-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/rows/waiting.md",
|
||||
"retry_prompt_file": "prompts/row-retries/waiting.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/waiting.png",
|
||||
"role": "layout guide for 6 frame slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/waiting.png",
|
||||
"depends_on": [
|
||||
"base"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"parallelizable_after": [
|
||||
"base"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": false,
|
||||
"reason": "state requires its own generated animation semantics"
|
||||
},
|
||||
"mirror_policy": {}
|
||||
},
|
||||
{
|
||||
"id": "running",
|
||||
"kind": "row-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/rows/running.md",
|
||||
"retry_prompt_file": "prompts/row-retries/running.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/running.png",
|
||||
"role": "layout guide for 6 frame slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/running.png",
|
||||
"depends_on": [
|
||||
"base"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"parallelizable_after": [
|
||||
"base"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": false,
|
||||
"reason": "state requires its own generated animation semantics"
|
||||
},
|
||||
"mirror_policy": {}
|
||||
},
|
||||
{
|
||||
"id": "review",
|
||||
"kind": "row-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/rows/review.md",
|
||||
"retry_prompt_file": "prompts/row-retries/review.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/review.png",
|
||||
"role": "layout guide for 6 frame slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/review.png",
|
||||
"depends_on": [
|
||||
"base"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"parallelizable_after": [
|
||||
"base"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": false,
|
||||
"reason": "state requires its own generated animation semantics"
|
||||
},
|
||||
"mirror_policy": {}
|
||||
},
|
||||
{
|
||||
"id": "look-cardinals",
|
||||
"kind": "look-cardinal-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/look-cardinals.md",
|
||||
"repair_prompt_files": {
|
||||
"000": "prompts/look-anchor-repairs/000.md",
|
||||
"090": "prompts/look-anchor-repairs/090.md",
|
||||
"180": "prompts/look-anchor-repairs/180.md",
|
||||
"270": "prompts/look-anchor-repairs/270.md"
|
||||
},
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/look-cardinals.png",
|
||||
"role": "layout guide for four cardinal slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
},
|
||||
{
|
||||
"path": "qa/contact-sheet.png",
|
||||
"role": "approved standard-row identity, scale, and baseline reference"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/look-cardinals.png",
|
||||
"extracted_output_paths": [
|
||||
"decoded/look-anchors/000.png",
|
||||
"decoded/look-anchors/090.png",
|
||||
"decoded/look-anchors/180.png",
|
||||
"decoded/look-anchors/270.png"
|
||||
],
|
||||
"approved_strip_path": "decoded/look-anchors-approved.png",
|
||||
"depends_on": [
|
||||
"idle",
|
||||
"running-right",
|
||||
"running-left",
|
||||
"waving",
|
||||
"jumping",
|
||||
"failed",
|
||||
"waiting",
|
||||
"running",
|
||||
"review"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"look_mechanics_file": "qa/look-mechanics.md",
|
||||
"directions": [
|
||||
"000",
|
||||
"090",
|
||||
"180",
|
||||
"270"
|
||||
],
|
||||
"packaging_eligible": false,
|
||||
"parallelizable_after": [
|
||||
"idle",
|
||||
"running-right",
|
||||
"running-left",
|
||||
"waving",
|
||||
"jumping",
|
||||
"failed",
|
||||
"waiting",
|
||||
"running",
|
||||
"review"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": false,
|
||||
"reason": "cardinal directions require grounded pet-specific generation"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "look-row-9",
|
||||
"kind": "look-row-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/rows/look-row-9.md",
|
||||
"retry_prompt_file": "prompts/row-retries/look-row-9.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/look-row-9.png",
|
||||
"role": "layout guide for 8 direction slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
},
|
||||
{
|
||||
"path": "qa/contact-sheet.png",
|
||||
"role": "approved standard-row identity, scale, and baseline reference"
|
||||
},
|
||||
{
|
||||
"path": "decoded/look-anchors-approved.png",
|
||||
"role": "approved cardinal reference strip in order 000 up, 090 screen-right, 180 down, 270 screen-left; interpolate intermediate directions evenly"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/look-row-9.png",
|
||||
"depends_on": [
|
||||
"look-cardinals"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"look_mechanics_file": "qa/look-mechanics.md",
|
||||
"directions": [
|
||||
"000",
|
||||
"022.5",
|
||||
"045",
|
||||
"067.5",
|
||||
"090",
|
||||
"112.5",
|
||||
"135",
|
||||
"157.5"
|
||||
],
|
||||
"parallelizable_after": [
|
||||
"look-cardinals"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": false,
|
||||
"reason": "look directions require grounded pet-specific generation"
|
||||
},
|
||||
"coherent_synthesis_required": true,
|
||||
"individual_cell_packaging_allowed": false,
|
||||
"packaging_eligible": true
|
||||
},
|
||||
{
|
||||
"id": "look-row-10",
|
||||
"kind": "look-row-strip",
|
||||
"status": "pending",
|
||||
"prompt_file": "prompts/rows/look-row-10.md",
|
||||
"retry_prompt_file": "prompts/row-retries/look-row-10.md",
|
||||
"input_images": [
|
||||
{
|
||||
"path": "references\\reference-01.png",
|
||||
"role": "pet reference"
|
||||
},
|
||||
{
|
||||
"path": "references/layout-guides/look-row-10.png",
|
||||
"role": "layout guide for 8 direction slots; use for spacing only, do not copy guide lines"
|
||||
},
|
||||
{
|
||||
"path": "references/canonical-base.png",
|
||||
"role": "canonical identity reference"
|
||||
},
|
||||
{
|
||||
"path": "qa/contact-sheet.png",
|
||||
"role": "approved standard-row identity, scale, and baseline reference"
|
||||
},
|
||||
{
|
||||
"path": "decoded/look-anchors-approved.png",
|
||||
"role": "approved cardinal reference strip in order 000 up, 090 screen-right, 180 down, 270 screen-left; interpolate intermediate directions evenly"
|
||||
},
|
||||
{
|
||||
"path": "decoded/look-row-9.png",
|
||||
"role": "completed first half of the clockwise look loop for row 10 continuity"
|
||||
}
|
||||
],
|
||||
"output_path": "decoded/look-row-10.png",
|
||||
"depends_on": [
|
||||
"look-cardinals",
|
||||
"look-row-9"
|
||||
],
|
||||
"generation_skill": "$imagegen",
|
||||
"requires_grounded_generation": true,
|
||||
"allow_prompt_only_generation": false,
|
||||
"identity_reference_paths": [
|
||||
"references/canonical-base.png"
|
||||
],
|
||||
"look_mechanics_file": "qa/look-mechanics.md",
|
||||
"directions": [
|
||||
"180",
|
||||
"202.5",
|
||||
"225",
|
||||
"247.5",
|
||||
"270",
|
||||
"292.5",
|
||||
"315",
|
||||
"337.5"
|
||||
],
|
||||
"parallelizable_after": [
|
||||
"look-cardinals",
|
||||
"look-row-9"
|
||||
],
|
||||
"derivation_policy": {
|
||||
"may_derive": false,
|
||||
"reason": "look directions require grounded pet-specific generation"
|
||||
},
|
||||
"coherent_synthesis_required": true,
|
||||
"individual_cell_packaging_allowed": false,
|
||||
"packaging_eligible": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,280 +0,0 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
Create one clean full-body reference sprite for Codex pet 幽喵.
|
||||
|
||||
Pet identity: 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: 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.
|
||||
|
||||
|
||||
Place a single centered pose on a perfectly flat pure yellow #FFFF00 chroma-key background. Keep the full pet visible, compact, readable at 192x208, and easy to animate. Preserve approved reference identity cues. No scenery, text, borders, checkerboard transparency, shadows, glows, detached effects, or extra props. Keep #FFFF00 and close colors out of the pet, props, highlights, and effects.
|
||||
@@ -1,7 +0,0 @@
|
||||
Repair one cardinal anchor for Codex pet `youmiao`: `000` means looking up.
|
||||
|
||||
Use the canonical base, completed standard contact sheet, approved cardinal-strip cells, and `qa/look-mechanics.md` for identity, scale, registration, and pet-specific gaze mechanics. Keep the face broadly frontal and point the eyes and natural head mechanism toward the TOP edge. Screen coordinates are viewer-relative.
|
||||
|
||||
Output one centered complete full-body pose on a flat pure yellow #FFFF00 background with generous padding. Keep the feet/base and lower body registered to the approved anchors. The requested cardinal must be unmistakable at final 192x208 display size.
|
||||
|
||||
Do not rotate, skew, or tilt the whole sprite to fake gaze. Do not add replacement eyes, labels, arrows, guide marks, shadows, scenery, detached effects, or chroma-key colors inside the pet.
|
||||
@@ -1,7 +0,0 @@
|
||||
Repair one cardinal anchor for Codex pet `youmiao`: `090` means looking right.
|
||||
|
||||
Use the canonical base, completed standard contact sheet, approved cardinal-strip cells, and `qa/look-mechanics.md` for identity, scale, registration, and pet-specific gaze mechanics. Put the nose tip, pupils, face surface, or natural aiming feature on the screen-right side of the head center. Screen coordinates are viewer-relative.
|
||||
|
||||
Output one centered complete full-body pose on a flat pure yellow #FFFF00 background with generous padding. Keep the feet/base and lower body registered to the approved anchors. The requested cardinal must be unmistakable at final 192x208 display size.
|
||||
|
||||
Do not rotate, skew, or tilt the whole sprite to fake gaze. Do not add replacement eyes, labels, arrows, guide marks, shadows, scenery, detached effects, or chroma-key colors inside the pet.
|
||||
@@ -1,7 +0,0 @@
|
||||
Repair one cardinal anchor for Codex pet `youmiao`: `180` means looking down.
|
||||
|
||||
Use the canonical base, completed standard contact sheet, approved cardinal-strip cells, and `qa/look-mechanics.md` for identity, scale, registration, and pet-specific gaze mechanics. Keep the face broadly frontal and point the eyes and natural head mechanism toward the BOTTOM edge. Screen coordinates are viewer-relative.
|
||||
|
||||
Output one centered complete full-body pose on a flat pure yellow #FFFF00 background with generous padding. Keep the feet/base and lower body registered to the approved anchors. The requested cardinal must be unmistakable at final 192x208 display size.
|
||||
|
||||
Do not rotate, skew, or tilt the whole sprite to fake gaze. Do not add replacement eyes, labels, arrows, guide marks, shadows, scenery, detached effects, or chroma-key colors inside the pet.
|
||||
@@ -1,7 +0,0 @@
|
||||
Repair one cardinal anchor for Codex pet `youmiao`: `270` means looking left.
|
||||
|
||||
Use the canonical base, completed standard contact sheet, approved cardinal-strip cells, and `qa/look-mechanics.md` for identity, scale, registration, and pet-specific gaze mechanics. Put the nose tip, pupils, face surface, or natural aiming feature on the screen-left side of the head center. Screen coordinates are viewer-relative.
|
||||
|
||||
Output one centered complete full-body pose on a flat pure yellow #FFFF00 background with generous padding. Keep the feet/base and lower body registered to the approved anchors. The requested cardinal must be unmistakable at final 192x208 display size.
|
||||
|
||||
Do not rotate, skew, or tilt the whole sprite to fake gaze. Do not add replacement eyes, labels, arrows, guide marks, shadows, scenery, detached effects, or chroma-key colors inside the pet.
|
||||
@@ -1,11 +0,0 @@
|
||||
Create one horizontal four-cardinal anchor strip for Codex pet `youmiao`.
|
||||
|
||||
Use the attached canonical base, completed standard contact sheet, and layout guide for exact identity, style, scale, baseline, face construction, materials, palette, markings, props, and spacing. Read `qa/look-mechanics.md` and use the pet's natural gaze mechanism.
|
||||
|
||||
Output exactly four centered complete full-body poses in this exact left-to-right order: `000 up`, `090 screen-right`, `180 down`, `270 screen-left`. Screen-left and screen-right always mean the viewer's image edges, never the character's own left or right.
|
||||
|
||||
For `000`, keep the face broadly frontal and point the eyes and natural head mechanism toward the TOP edge. For `090`, put the nose tip, pupils, face surface, or natural aiming feature on the screen-right side of the head center. For `180`, keep the face broadly frontal and point toward the BOTTOM edge. For `270`, apply the inverse screen-left landmark rule. Every cardinal must be unmistakable without labels.
|
||||
|
||||
Place one pose in each invisible equal-width slot on a flat pure yellow #FFFF00 background with generous padding. Keep scale, feet/base, lower body, and registration consistent across all four slots.
|
||||
|
||||
Do not rotate, skew, or tilt the whole sprite to fake gaze. Do not add replacement eyes, labels, degree text, arrows, boxes, guide marks, shadows, scenery, detached effects, or chroma-key colors inside the pet.
|
||||
@@ -1,14 +0,0 @@
|
||||
Create Codex pet row `failed` for `youmiao`: exactly 8 full-body frames in one horizontal strip on flat pure yellow #FFFF00.
|
||||
|
||||
Use the attached canonical base for identity and the layout guide only for spacing. Same pet in every frame: 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. Preserve silhouette, face, palette, material, proportions, markings, and props.
|
||||
|
||||
Keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`.
|
||||
|
||||
Action: Blocked/failed loop: slumped or deflated reaction with sad or closed eyes.
|
||||
|
||||
State requirements:
|
||||
- Show failure through slumped pose, drooping ears/limbs, closed or sad eyes, and lower body position.
|
||||
- Tears, small smoke puffs, or tiny stars are allowed only if attached to or overlapping the pet silhouette and kept inside the same frame slot.
|
||||
- Do not draw red X marks, floating symbols, detached stars, separated smoke clouds, falling tear drops, dust, or other loose effects.
|
||||
|
||||
One centered complete pose per invisible slot. No text, boxes, guide marks, scenery, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or #FFFF00 colors in the pet.
|
||||
@@ -1,18 +0,0 @@
|
||||
Create Codex pet row `idle` for `youmiao`: exactly 6 full-body frames in one horizontal strip on flat pure yellow #FFFF00.
|
||||
|
||||
Use the attached canonical base for identity and the layout guide only for spacing. Same pet in every frame: 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. Preserve silhouette, face, palette, material, proportions, markings, and props.
|
||||
|
||||
Keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`.
|
||||
|
||||
Action: Calm low-distraction resting loop: subtle breathing, tiny blink, slight head/body bob, and only quiet persona-preserving motion.
|
||||
|
||||
State requirements:
|
||||
- CRITICAL: idle is the low-distraction baseline state and the first frame is also used as the reduced-motion static pet.
|
||||
- Use only subtle idle motion: gentle breathing, a tiny blink, a slight head or body bob, a very small material sway, or another quiet motion that fits the pet persona.
|
||||
- Keep the pet essentially in the same pose, facing direction, silhouette, markings, palette, and prop state across all 6 frames.
|
||||
- Idle variation must stay calm but still read as animation; do not repeat effectively identical copies across the loop.
|
||||
- Do not show waving, walking, running, jumping, talking, working, reviewing, emotional reactions, large gestures, item interactions, or new props.
|
||||
- Feet, base, body, or object anchor should remain planted or nearly planted.
|
||||
- The first and last frames should be very close visually so the loop feels calm and does not pop.
|
||||
|
||||
One centered complete pose per invisible slot. No text, boxes, guide marks, scenery, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or #FFFF00 colors in the pet.
|
||||
@@ -1,14 +0,0 @@
|
||||
Create Codex pet row `jumping` for `youmiao`: exactly 5 full-body frames in one horizontal strip on flat pure yellow #FFFF00.
|
||||
|
||||
Use the attached canonical base for identity and the layout guide only for spacing. Same pet in every frame: 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. Preserve silhouette, face, palette, material, proportions, markings, and props.
|
||||
|
||||
Keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`.
|
||||
|
||||
Action: Hover jump loop: anticipation, lift, airborne peak, descent, and settle through body height.
|
||||
|
||||
State requirements:
|
||||
- Show the jump through pose and vertical body position only: anticipation, lift, airborne peak, descent, settle.
|
||||
- Do not draw ground shadows, contact shadows, drop shadows, oval shadows, landing marks, dust, smears, bounce pads, or motion marks under the pet.
|
||||
- Keep the background outside the pet perfectly flat chroma key with no darker key-colored patches.
|
||||
|
||||
One centered complete pose per invisible slot. No text, boxes, guide marks, scenery, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or #FFFF00 colors in the pet.
|
||||
@@ -1,28 +0,0 @@
|
||||
Create Codex v2 pet look row 10 for `youmiao` as exactly 8 full-body frames in this order: 180, 202.5, 225, 247.5, 270, 292.5, 315, 337.5.
|
||||
|
||||
Use the canonical base, standard contact sheet, layout guide, approved four-cardinal strip, and `qa/look-mechanics.md`. Draw the complete eight-pose row as one coherent animation family, interpolating even 22.5-degree steps between the cardinal pose families. Keep the same pet identity, face construction, materials, palette, markings, and props. Each direction must read correctly at pet size and join continuously at the 000 and 180 boundaries.
|
||||
|
||||
DIRECTION TARGETS — use these to shape the coherent row, not as pixel-level landmark gates:
|
||||
|
||||
1. `180`: vertical DOWN; no horizontal requirement.
|
||||
2. `202.5`: horizontal SCREEN-LEFT and vertical DOWN.
|
||||
3. `225`: horizontal SCREEN-LEFT and vertical DOWN.
|
||||
4. `247.5`: horizontal SCREEN-LEFT and vertical DOWN.
|
||||
5. `270`: horizontal SCREEN-LEFT; no vertical requirement.
|
||||
6. `292.5`: horizontal SCREEN-LEFT and vertical UP.
|
||||
7. `315`: horizontal SCREEN-LEFT and vertical UP.
|
||||
8. `337.5`: horizontal SCREEN-LEFT and vertical UP.
|
||||
|
||||
Cardinals must be unmistakable. Intermediate poses should broadly occupy the intended quadrant and advance naturally through the ordered loop. Minor pupil, nose, eyelid, or aiming-feature deviations are acceptable when the overall direction, continuity, identity, and motion remain coherent. Do not deform the character merely to make every intermediate axis independently obvious.
|
||||
|
||||
HARD LAYOUT AND CONTINUITY CONTRACT — DETERMINISTIC REGISTRATION: draw exactly eight separated pose groups in left-to-right direction order. Keep enough chroma-only space between neighboring poses that each complete pose can be detected without cutting through foreground. Approximate the guide's equal spacing, but do not distort a pose merely to hit an exact source-canvas coordinate; deterministic assembly will crop the eight ordered groups, then apply one shared scale and baseline.
|
||||
|
||||
Use the same body height, head size, baseline, and planted-body position across the generated family. Never overlap neighboring poses, merge two poses into one connected group, crop foreground at the outer canvas edge, or resize one pose independently.
|
||||
|
||||
Keep the feet, base, or lower torso planted at the same coordinates across all eight frames. Express direction through the eyes, face, head, upper body, and physically appropriate prop movement, not by moving, rotating, or rescaling the entire sprite.
|
||||
|
||||
ROW-BOUNDARY LOCK: 180 must continue directly from row 9's 157.5, matching its body size, baseline, planted anchor, expression, and construction. 337.5 must be one even 22.5-degree step before 000: nearly up-facing while remaining on the overall left-hand arc. Do not distort pupils, nose, or body geometry merely to exaggerate the subtle horizontal component.
|
||||
|
||||
PRE-RETURN CHECK: reject this result if it does not contain eight separated pose groups in the required order; neighboring poses overlap; foreground is cropped at the outer canvas edge; any frame changes sprite scale, body or head size, baseline, or planted-body position; the row visibly reverses into the wrong half of the loop; or 180 does not continue from 157.5 or 337.5 does not flow evenly into 000. Minor intermediate pupil or nose deviations are not rejection reasons. Exact cell cropping, resizing, and recentering happen deterministically after generation.
|
||||
|
||||
Use a flat pure yellow #FFFF00 background. One complete unclipped pose per invisible slot. No whole-sprite rotation, replacement eyes, labels, guide marks, shadows, glows, scenery, detached effects, or #FFFF00 colors in the pet.
|
||||
@@ -1,28 +0,0 @@
|
||||
Create Codex v2 pet look row 9 for `youmiao` as exactly 8 full-body frames in this order: 000, 022.5, 045, 067.5, 090, 112.5, 135, 157.5.
|
||||
|
||||
Use the canonical base, standard contact sheet, layout guide, approved four-cardinal strip, and `qa/look-mechanics.md`. Draw the complete eight-pose row as one coherent animation family, interpolating even 22.5-degree steps between the cardinal pose families. Keep the same pet identity, face construction, materials, palette, markings, and props. Each direction must read correctly at pet size and join continuously at the 000 and 180 boundaries.
|
||||
|
||||
DIRECTION TARGETS — use these to shape the coherent row, not as pixel-level landmark gates:
|
||||
|
||||
1. `000`: vertical UP; no horizontal requirement.
|
||||
2. `022.5`: horizontal SCREEN-RIGHT and vertical UP.
|
||||
3. `045`: horizontal SCREEN-RIGHT and vertical UP.
|
||||
4. `067.5`: horizontal SCREEN-RIGHT and vertical UP.
|
||||
5. `090`: horizontal SCREEN-RIGHT; no vertical requirement.
|
||||
6. `112.5`: horizontal SCREEN-RIGHT and vertical DOWN.
|
||||
7. `135`: horizontal SCREEN-RIGHT and vertical DOWN.
|
||||
8. `157.5`: horizontal SCREEN-RIGHT and vertical DOWN.
|
||||
|
||||
Cardinals must be unmistakable. Intermediate poses should broadly occupy the intended quadrant and advance naturally through the ordered loop. Minor pupil, nose, eyelid, or aiming-feature deviations are acceptable when the overall direction, continuity, identity, and motion remain coherent. Do not deform the character merely to make every intermediate axis independently obvious.
|
||||
|
||||
HARD LAYOUT AND CONTINUITY CONTRACT — DETERMINISTIC REGISTRATION: draw exactly eight separated pose groups in left-to-right direction order. Keep enough chroma-only space between neighboring poses that each complete pose can be detected without cutting through foreground. Approximate the guide's equal spacing, but do not distort a pose merely to hit an exact source-canvas coordinate; deterministic assembly will crop the eight ordered groups, then apply one shared scale and baseline.
|
||||
|
||||
Use the same body height, head size, baseline, and planted-body position across the generated family. Never overlap neighboring poses, merge two poses into one connected group, crop foreground at the outer canvas edge, or resize one pose independently.
|
||||
|
||||
Keep the feet, base, or lower torso planted at the same coordinates across all eight frames. Express direction through the eyes, face, head, upper body, and physically appropriate prop movement, not by moving, rotating, or rescaling the entire sprite.
|
||||
|
||||
ROW-BOUNDARY LOCK: 157.5 must be one even 22.5-degree step before 180. Match the approved 180 pose's body size, baseline, planted anchor, expression, and construction. Preserve the overall right-hand arc, but do not distort pupils, nose, or body geometry merely to exaggerate the subtle horizontal component.
|
||||
|
||||
PRE-RETURN CHECK: reject this result if it does not contain eight separated pose groups in the required order; neighboring poses overlap; foreground is cropped at the outer canvas edge; any frame changes sprite scale, body or head size, baseline, or planted-body position; the row visibly reverses into the wrong half of the loop; or 157.5 does not flow evenly into 180. Minor intermediate pupil or nose deviations are not rejection reasons. Exact cell cropping, resizing, and recentering happen deterministically after generation.
|
||||
|
||||
Use a flat pure yellow #FFFF00 background. One complete unclipped pose per invisible slot. No whole-sprite rotation, replacement eyes, labels, guide marks, shadows, glows, scenery, detached effects, or #FFFF00 colors in the pet.
|
||||
@@ -1,13 +0,0 @@
|
||||
Create Codex pet row `review` for `youmiao`: exactly 6 full-body frames in one horizontal strip on flat pure yellow #FFFF00.
|
||||
|
||||
Use the attached canonical base for identity and the layout guide only for spacing. Same pet in every frame: 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. Preserve silhouette, face, palette, material, proportions, markings, and props.
|
||||
|
||||
Keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`.
|
||||
|
||||
Action: Ready-review loop: focused inspection of completed output with lean, blink, narrowed eyes, head tilt, or paw pose.
|
||||
|
||||
State requirements:
|
||||
- Show review through lean, blink, narrowed eyes, head tilt, or paw/hand position.
|
||||
- Do not add magnifying glasses, papers, code, UI, punctuation, symbols, or other new props unless they already exist in the base pet identity.
|
||||
|
||||
One centered complete pose per invisible slot. No text, boxes, guide marks, scenery, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or #FFFF00 colors in the pet.
|
||||
@@ -1,15 +0,0 @@
|
||||
Create Codex pet row `running-left` for `youmiao`: exactly 8 full-body frames in one horizontal strip on flat pure yellow #FFFF00.
|
||||
|
||||
Use the attached canonical base for identity and the layout guide only for spacing. Same pet in every frame: 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. Preserve silhouette, face, palette, material, proportions, markings, and props.
|
||||
|
||||
Keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`.
|
||||
|
||||
Action: Dragging-left loop: show directional movement to the left through body and limb poses only.
|
||||
|
||||
State requirements:
|
||||
- Show directional drag movement to the left through body, limb, and prop movement only.
|
||||
- The row must unmistakably face and travel left.
|
||||
- The movement cadence must alternate visibly across the 8 frames instead of repeating one nearly static stride.
|
||||
- Do not draw speed lines, dust clouds, floor shadows, motion trails, or detached motion effects.
|
||||
|
||||
One centered complete pose per invisible slot. No text, boxes, guide marks, scenery, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or #FFFF00 colors in the pet.
|
||||
@@ -1,15 +0,0 @@
|
||||
Create Codex pet row `running-right` for `youmiao`: exactly 8 full-body frames in one horizontal strip on flat pure yellow #FFFF00.
|
||||
|
||||
Use the attached canonical base for identity and the layout guide only for spacing. Same pet in every frame: 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. Preserve silhouette, face, palette, material, proportions, markings, and props.
|
||||
|
||||
Keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`.
|
||||
|
||||
Action: Dragging-right loop: show directional movement to the right through body and limb poses only.
|
||||
|
||||
State requirements:
|
||||
- Show directional drag movement to the right through body, limb, and prop movement only.
|
||||
- The row must unmistakably face and travel right.
|
||||
- The movement cadence must alternate visibly across the 8 frames instead of repeating one nearly static stride.
|
||||
- Do not draw speed lines, dust clouds, floor shadows, motion trails, or detached motion effects.
|
||||
|
||||
One centered complete pose per invisible slot. No text, boxes, guide marks, scenery, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or #FFFF00 colors in the pet.
|
||||
@@ -1,13 +0,0 @@
|
||||
Create Codex pet row `running` for `youmiao`: exactly 6 full-body frames in one horizontal strip on flat pure yellow #FFFF00.
|
||||
|
||||
Use the attached canonical base for identity and the layout guide only for spacing. Same pet in every frame: 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. Preserve silhouette, face, palette, material, proportions, markings, and props.
|
||||
|
||||
Keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`.
|
||||
|
||||
Action: Working loop: focused active-task processing, thinking, typing, scanning, or effortful concentration; not literal foot-running, jogging, sprinting, treadmill motion, raised knees, long steps, pumping arms, or directional travel.
|
||||
|
||||
State requirements:
|
||||
- Show the pet actively working or processing, as if running a task: focused posture, busy hands or paws, purposeful bobbing, thinking motion, tool or prop motion only if already part of the pet identity, or other non-locomotion activity.
|
||||
- Do not show literal foot-running, jogging, sprinting, treadmill motion, raised knees, long steps, pumping arms, directional travel, speed lines, dust clouds, floor shadows, motion trails, or detached motion effects.
|
||||
|
||||
One centered complete pose per invisible slot. No text, boxes, guide marks, scenery, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or #FFFF00 colors in the pet.
|
||||
@@ -1,13 +0,0 @@
|
||||
Create Codex pet row `waiting` for `youmiao`: exactly 6 full-body frames in one horizontal strip on flat pure yellow #FFFF00.
|
||||
|
||||
Use the attached canonical base for identity and the layout guide only for spacing. Same pet in every frame: 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. Preserve silhouette, face, palette, material, proportions, markings, and props.
|
||||
|
||||
Keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`.
|
||||
|
||||
Action: Needs-input loop: expectant asking pose for approval, help, or user input.
|
||||
|
||||
State requirements:
|
||||
- Show that Codex needs approval, help, or user input through an expectant asking pose.
|
||||
- Keep the motion patient and readable, without turning it into ordinary idle or review.
|
||||
|
||||
One centered complete pose per invisible slot. No text, boxes, guide marks, scenery, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or #FFFF00 colors in the pet.
|
||||
@@ -1,13 +0,0 @@
|
||||
Create Codex pet row `waving` for `youmiao`: exactly 4 full-body frames in one horizontal strip on flat pure yellow #FFFF00.
|
||||
|
||||
Use the attached canonical base for identity and the layout guide only for spacing. Same pet in every frame: 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. Preserve silhouette, face, palette, material, proportions, markings, and props.
|
||||
|
||||
Keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`.
|
||||
|
||||
Action: Greeting loop: paw or limb down, raised, tilted, and returning in a friendly attention gesture.
|
||||
|
||||
State requirements:
|
||||
- Show the greeting through paw, hand, wing, or limb pose only.
|
||||
- Do not draw wave marks, motion arcs, lines, sparkles, symbols, or floating effects around the gesture.
|
||||
|
||||
One centered complete pose per invisible slot. No text, boxes, guide marks, scenery, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or #FFFF00 colors in the pet.
|
||||
@@ -1,18 +0,0 @@
|
||||
Create one horizontal animation strip for Codex pet `youmiao`, state `failed`.
|
||||
|
||||
Use the attached canonical base for identity. Use the attached layout guide only for slot count, spacing, centering, and padding; do not draw the guide.
|
||||
|
||||
Output exactly 8 full-body frames in one left-to-right row on flat pure yellow #FFFF00. Treat the row as 8 invisible equal-width slots: one centered complete pose per slot, evenly spaced, with no overlap, clipping, empty slots, labels, or borders.
|
||||
|
||||
Identity: same pet in every frame: 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. Preserve silhouette, face, proportions, markings, palette, material, style, and props.
|
||||
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. 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.
|
||||
Animation continuity: keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`. Move the pose within the slot instead of redrawing the pet larger or smaller frame to frame.
|
||||
|
||||
State action: Blocked/failed loop: slumped or deflated reaction with sad or closed eyes.
|
||||
|
||||
State requirements:
|
||||
- Show failure through slumped pose, drooping ears/limbs, closed or sad eyes, and lower body position.
|
||||
- Tears, small smoke puffs, or tiny stars are allowed only if attached to or overlapping the pet silhouette and kept inside the same frame slot.
|
||||
- Do not draw red X marks, floating symbols, detached stars, separated smoke clouds, falling tear drops, dust, or other loose effects.
|
||||
|
||||
Clean extraction: crisp opaque edges, safe padding, no scenery, text, guide marks, checkerboard, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or chroma-key colors inside the pet.
|
||||
@@ -1,22 +0,0 @@
|
||||
Create one horizontal animation strip for Codex pet `youmiao`, state `idle`.
|
||||
|
||||
Use the attached canonical base for identity. Use the attached layout guide only for slot count, spacing, centering, and padding; do not draw the guide.
|
||||
|
||||
Output exactly 6 full-body frames in one left-to-right row on flat pure yellow #FFFF00. Treat the row as 6 invisible equal-width slots: one centered complete pose per slot, evenly spaced, with no overlap, clipping, empty slots, labels, or borders.
|
||||
|
||||
Identity: same pet in every frame: 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. Preserve silhouette, face, proportions, markings, palette, material, style, and props.
|
||||
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. 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.
|
||||
Animation continuity: keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`. Move the pose within the slot instead of redrawing the pet larger or smaller frame to frame.
|
||||
|
||||
State action: Calm low-distraction resting loop: subtle breathing, tiny blink, slight head/body bob, and only quiet persona-preserving motion.
|
||||
|
||||
State requirements:
|
||||
- CRITICAL: idle is the low-distraction baseline state and the first frame is also used as the reduced-motion static pet.
|
||||
- Use only subtle idle motion: gentle breathing, a tiny blink, a slight head or body bob, a very small material sway, or another quiet motion that fits the pet persona.
|
||||
- Keep the pet essentially in the same pose, facing direction, silhouette, markings, palette, and prop state across all 6 frames.
|
||||
- Idle variation must stay calm but still read as animation; do not repeat effectively identical copies across the loop.
|
||||
- Do not show waving, walking, running, jumping, talking, working, reviewing, emotional reactions, large gestures, item interactions, or new props.
|
||||
- Feet, base, body, or object anchor should remain planted or nearly planted.
|
||||
- The first and last frames should be very close visually so the loop feels calm and does not pop.
|
||||
|
||||
Clean extraction: crisp opaque edges, safe padding, no scenery, text, guide marks, checkerboard, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or chroma-key colors inside the pet.
|
||||
@@ -1,18 +0,0 @@
|
||||
Create one horizontal animation strip for Codex pet `youmiao`, state `jumping`.
|
||||
|
||||
Use the attached canonical base for identity. Use the attached layout guide only for slot count, spacing, centering, and padding; do not draw the guide.
|
||||
|
||||
Output exactly 5 full-body frames in one left-to-right row on flat pure yellow #FFFF00. Treat the row as 5 invisible equal-width slots: one centered complete pose per slot, evenly spaced, with no overlap, clipping, empty slots, labels, or borders.
|
||||
|
||||
Identity: same pet in every frame: 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. Preserve silhouette, face, proportions, markings, palette, material, style, and props.
|
||||
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. 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.
|
||||
Animation continuity: keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`. Move the pose within the slot instead of redrawing the pet larger or smaller frame to frame.
|
||||
|
||||
State action: Hover jump loop: anticipation, lift, airborne peak, descent, and settle through body height.
|
||||
|
||||
State requirements:
|
||||
- Show the jump through pose and vertical body position only: anticipation, lift, airborne peak, descent, settle.
|
||||
- Do not draw ground shadows, contact shadows, drop shadows, oval shadows, landing marks, dust, smears, bounce pads, or motion marks under the pet.
|
||||
- Keep the background outside the pet perfectly flat chroma key with no darker key-colored patches.
|
||||
|
||||
Clean extraction: crisp opaque edges, safe padding, no scenery, text, guide marks, checkerboard, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or chroma-key colors inside the pet.
|
||||
@@ -1,36 +0,0 @@
|
||||
Create one horizontal look-direction strip for Codex pet `youmiao`, atlas row 10.
|
||||
|
||||
Use the attached canonical base, completed standard contact sheet, layout guide, and approved four-cardinal strip for identity, scale, registration, spacing, direction semantics, and cross-row continuity. Read `qa/look-mechanics.md` and follow its pet-specific movement and eye/prop mechanics. The approved cardinal strip and completed coherent row 9 are authoritative. Use the cardinals for direction meaning and row 9 for cross-row identity, scale, registration, and continuity.
|
||||
|
||||
COHERENT SYNTHESIS LOCK: produce one unified eight-pose row. Do not paste, tile, or independently restyle individual cells. Every final cell must be drawn together with the same face construction, body proportions, line/render quality, lighting, materials, scale, baseline, and registration.
|
||||
|
||||
Output exactly 8 complete full-body frames in this exact left-to-right order: 180, 202.5, 225, 247.5, 270, 292.5, 315, 337.5. Degrees are clockwise: 000 is up, 090 right, 180 down, and 270 left. Neutral/front is not part of this row.
|
||||
|
||||
DIRECTION TARGETS — use these to shape the coherent row, not as pixel-level landmark gates:
|
||||
|
||||
1. `180`: vertical DOWN; no horizontal requirement.
|
||||
2. `202.5`: horizontal SCREEN-LEFT and vertical DOWN.
|
||||
3. `225`: horizontal SCREEN-LEFT and vertical DOWN.
|
||||
4. `247.5`: horizontal SCREEN-LEFT and vertical DOWN.
|
||||
5. `270`: horizontal SCREEN-LEFT; no vertical requirement.
|
||||
6. `292.5`: horizontal SCREEN-LEFT and vertical UP.
|
||||
7. `315`: horizontal SCREEN-LEFT and vertical UP.
|
||||
8. `337.5`: horizontal SCREEN-LEFT and vertical UP.
|
||||
|
||||
Cardinals must be unmistakable. Intermediate poses should broadly occupy the intended quadrant and advance naturally through the ordered loop. Minor pupil, nose, eyelid, or aiming-feature deviations are acceptable when the overall direction, continuity, identity, and motion remain coherent. Do not deform the character merely to make every intermediate axis independently obvious.
|
||||
|
||||
SCREEN-COORDINATE LOCK: screen-left means the viewer's left image edge, never the character's own left. The row should travel naturally through the left half of the loop. Near-vertical 202.5 and 337.5 may have subtle horizontal cues; prioritize a coherent arc over exact pupil or nose placement.
|
||||
|
||||
HARD LAYOUT AND CONTINUITY CONTRACT — DETERMINISTIC REGISTRATION: draw exactly eight separated pose groups in left-to-right direction order. Keep enough chroma-only space between neighboring poses that each complete pose can be detected without cutting through foreground. Approximate the guide's equal spacing, but do not distort a pose merely to hit an exact source-canvas coordinate; deterministic assembly will crop the eight ordered groups, then apply one shared scale and baseline.
|
||||
|
||||
Use the same body height, head size, baseline, and planted-body position across the generated family. Never overlap neighboring poses, merge two poses into one connected group, crop foreground at the outer canvas edge, or resize one pose independently.
|
||||
|
||||
Keep the feet, base, or lower torso planted at the same coordinates across all eight frames. Express direction through the eyes, face, head, upper body, and physically appropriate prop movement, not by moving, rotating, or rescaling the entire sprite.
|
||||
|
||||
Place one centered pose in each invisible equal-width slot on flat pure yellow #FFFF00. Change only the natural parts needed to express gaze: eyes, eyelids, head, face, neck, upper body, appendages, and constrained prop follow-through. Keep identity, silhouette, materials, palette, markings, and props consistent.
|
||||
|
||||
ROW-BOUNDARY LOCK: 180 must continue directly from row 9's 157.5, matching its body size, baseline, planted anchor, expression, and construction. 337.5 must be one even 22.5-degree step before 000: nearly up-facing while remaining on the overall left-hand arc. Do not distort pupils, nose, or body geometry merely to exaggerate the subtle horizontal component.
|
||||
|
||||
PRE-RETURN CHECK: reject this result if it does not contain eight separated pose groups in the required order; neighboring poses overlap; foreground is cropped at the outer canvas edge; any frame changes sprite scale, body or head size, baseline, or planted-body position; the row visibly reverses into the wrong half of the loop; or 180 does not continue from 157.5 or 337.5 does not flow evenly into 000. Minor intermediate pupil or nose deviations are not rejection reasons. Exact cell cropping, resizing, and recentering happen deterministically after generation.
|
||||
|
||||
Do not rotate, skew, or tilt the whole sprite to fake gaze. Do not add replacement/googly eyes, labels, degree text, arrows, clocks, grids, shadows, glows, scenery, detached effects, or chroma-key colors inside the pet.
|
||||
@@ -1,36 +0,0 @@
|
||||
Create one horizontal look-direction strip for Codex pet `youmiao`, atlas row 9.
|
||||
|
||||
Use the attached canonical base, completed standard contact sheet, layout guide, and approved four-cardinal strip for identity, scale, registration, spacing, direction semantics, and cross-row continuity. Read `qa/look-mechanics.md` and follow its pet-specific movement and eye/prop mechanics. The approved cardinal strip is authoritative for the up, screen-right, down, and screen-left pose families. Interpolate the intermediate directions as even 22.5-degree steps between those anchors.
|
||||
|
||||
COHERENT SYNTHESIS LOCK: produce one unified eight-pose row. Do not paste, tile, or independently restyle individual cells. Every final cell must be drawn together with the same face construction, body proportions, line/render quality, lighting, materials, scale, baseline, and registration.
|
||||
|
||||
Output exactly 8 complete full-body frames in this exact left-to-right order: 000, 022.5, 045, 067.5, 090, 112.5, 135, 157.5. Degrees are clockwise: 000 is up, 090 right, 180 down, and 270 left. Neutral/front is not part of this row.
|
||||
|
||||
DIRECTION TARGETS — use these to shape the coherent row, not as pixel-level landmark gates:
|
||||
|
||||
1. `000`: vertical UP; no horizontal requirement.
|
||||
2. `022.5`: horizontal SCREEN-RIGHT and vertical UP.
|
||||
3. `045`: horizontal SCREEN-RIGHT and vertical UP.
|
||||
4. `067.5`: horizontal SCREEN-RIGHT and vertical UP.
|
||||
5. `090`: horizontal SCREEN-RIGHT; no vertical requirement.
|
||||
6. `112.5`: horizontal SCREEN-RIGHT and vertical DOWN.
|
||||
7. `135`: horizontal SCREEN-RIGHT and vertical DOWN.
|
||||
8. `157.5`: horizontal SCREEN-RIGHT and vertical DOWN.
|
||||
|
||||
Cardinals must be unmistakable. Intermediate poses should broadly occupy the intended quadrant and advance naturally through the ordered loop. Minor pupil, nose, eyelid, or aiming-feature deviations are acceptable when the overall direction, continuity, identity, and motion remain coherent. Do not deform the character merely to make every intermediate axis independently obvious.
|
||||
|
||||
SCREEN-COORDINATE LOCK: screen-right means the viewer's right image edge, never the character's own right. The row should travel naturally through the right half of the loop. Near-vertical 022.5 and 157.5 may have subtle horizontal cues; prioritize a coherent arc over exact pupil or nose placement.
|
||||
|
||||
HARD LAYOUT AND CONTINUITY CONTRACT — DETERMINISTIC REGISTRATION: draw exactly eight separated pose groups in left-to-right direction order. Keep enough chroma-only space between neighboring poses that each complete pose can be detected without cutting through foreground. Approximate the guide's equal spacing, but do not distort a pose merely to hit an exact source-canvas coordinate; deterministic assembly will crop the eight ordered groups, then apply one shared scale and baseline.
|
||||
|
||||
Use the same body height, head size, baseline, and planted-body position across the generated family. Never overlap neighboring poses, merge two poses into one connected group, crop foreground at the outer canvas edge, or resize one pose independently.
|
||||
|
||||
Keep the feet, base, or lower torso planted at the same coordinates across all eight frames. Express direction through the eyes, face, head, upper body, and physically appropriate prop movement, not by moving, rotating, or rescaling the entire sprite.
|
||||
|
||||
Place one centered pose in each invisible equal-width slot on flat pure yellow #FFFF00. Change only the natural parts needed to express gaze: eyes, eyelids, head, face, neck, upper body, appendages, and constrained prop follow-through. Keep identity, silhouette, materials, palette, markings, and props consistent.
|
||||
|
||||
ROW-BOUNDARY LOCK: 157.5 must be one even 22.5-degree step before 180. Match the approved 180 pose's body size, baseline, planted anchor, expression, and construction. Preserve the overall right-hand arc, but do not distort pupils, nose, or body geometry merely to exaggerate the subtle horizontal component.
|
||||
|
||||
PRE-RETURN CHECK: reject this result if it does not contain eight separated pose groups in the required order; neighboring poses overlap; foreground is cropped at the outer canvas edge; any frame changes sprite scale, body or head size, baseline, or planted-body position; the row visibly reverses into the wrong half of the loop; or 157.5 does not flow evenly into 180. Minor intermediate pupil or nose deviations are not rejection reasons. Exact cell cropping, resizing, and recentering happen deterministically after generation.
|
||||
|
||||
Do not rotate, skew, or tilt the whole sprite to fake gaze. Do not add replacement/googly eyes, labels, degree text, arrows, clocks, grids, shadows, glows, scenery, detached effects, or chroma-key colors inside the pet.
|
||||
@@ -1,17 +0,0 @@
|
||||
Create one horizontal animation strip for Codex pet `youmiao`, state `review`.
|
||||
|
||||
Use the attached canonical base for identity. Use the attached layout guide only for slot count, spacing, centering, and padding; do not draw the guide.
|
||||
|
||||
Output exactly 6 full-body frames in one left-to-right row on flat pure yellow #FFFF00. Treat the row as 6 invisible equal-width slots: one centered complete pose per slot, evenly spaced, with no overlap, clipping, empty slots, labels, or borders.
|
||||
|
||||
Identity: same pet in every frame: 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. Preserve silhouette, face, proportions, markings, palette, material, style, and props.
|
||||
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. 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.
|
||||
Animation continuity: keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`. Move the pose within the slot instead of redrawing the pet larger or smaller frame to frame.
|
||||
|
||||
State action: Ready-review loop: focused inspection of completed output with lean, blink, narrowed eyes, head tilt, or paw pose.
|
||||
|
||||
State requirements:
|
||||
- Show review through lean, blink, narrowed eyes, head tilt, or paw/hand position.
|
||||
- Do not add magnifying glasses, papers, code, UI, punctuation, symbols, or other new props unless they already exist in the base pet identity.
|
||||
|
||||
Clean extraction: crisp opaque edges, safe padding, no scenery, text, guide marks, checkerboard, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or chroma-key colors inside the pet.
|
||||
@@ -1,19 +0,0 @@
|
||||
Create one horizontal animation strip for Codex pet `youmiao`, state `running-left`.
|
||||
|
||||
Use the attached canonical base for identity. Use the attached layout guide only for slot count, spacing, centering, and padding; do not draw the guide.
|
||||
|
||||
Output exactly 8 full-body frames in one left-to-right row on flat pure yellow #FFFF00. Treat the row as 8 invisible equal-width slots: one centered complete pose per slot, evenly spaced, with no overlap, clipping, empty slots, labels, or borders.
|
||||
|
||||
Identity: same pet in every frame: 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. Preserve silhouette, face, proportions, markings, palette, material, style, and props.
|
||||
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. 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.
|
||||
Animation continuity: keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`. Move the pose within the slot instead of redrawing the pet larger or smaller frame to frame.
|
||||
|
||||
State action: Dragging-left loop: show directional movement to the left through body and limb poses only.
|
||||
|
||||
State requirements:
|
||||
- Show directional drag movement to the left through body, limb, and prop movement only.
|
||||
- The row must unmistakably face and travel left.
|
||||
- The movement cadence must alternate visibly across the 8 frames instead of repeating one nearly static stride.
|
||||
- Do not draw speed lines, dust clouds, floor shadows, motion trails, or detached motion effects.
|
||||
|
||||
Clean extraction: crisp opaque edges, safe padding, no scenery, text, guide marks, checkerboard, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or chroma-key colors inside the pet.
|
||||
@@ -1,19 +0,0 @@
|
||||
Create one horizontal animation strip for Codex pet `youmiao`, state `running-right`.
|
||||
|
||||
Use the attached canonical base for identity. Use the attached layout guide only for slot count, spacing, centering, and padding; do not draw the guide.
|
||||
|
||||
Output exactly 8 full-body frames in one left-to-right row on flat pure yellow #FFFF00. Treat the row as 8 invisible equal-width slots: one centered complete pose per slot, evenly spaced, with no overlap, clipping, empty slots, labels, or borders.
|
||||
|
||||
Identity: same pet in every frame: 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. Preserve silhouette, face, proportions, markings, palette, material, style, and props.
|
||||
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. 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.
|
||||
Animation continuity: keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`. Move the pose within the slot instead of redrawing the pet larger or smaller frame to frame.
|
||||
|
||||
State action: Dragging-right loop: show directional movement to the right through body and limb poses only.
|
||||
|
||||
State requirements:
|
||||
- Show directional drag movement to the right through body, limb, and prop movement only.
|
||||
- The row must unmistakably face and travel right.
|
||||
- The movement cadence must alternate visibly across the 8 frames instead of repeating one nearly static stride.
|
||||
- Do not draw speed lines, dust clouds, floor shadows, motion trails, or detached motion effects.
|
||||
|
||||
Clean extraction: crisp opaque edges, safe padding, no scenery, text, guide marks, checkerboard, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or chroma-key colors inside the pet.
|
||||
@@ -1,17 +0,0 @@
|
||||
Create one horizontal animation strip for Codex pet `youmiao`, state `running`.
|
||||
|
||||
Use the attached canonical base for identity. Use the attached layout guide only for slot count, spacing, centering, and padding; do not draw the guide.
|
||||
|
||||
Output exactly 6 full-body frames in one left-to-right row on flat pure yellow #FFFF00. Treat the row as 6 invisible equal-width slots: one centered complete pose per slot, evenly spaced, with no overlap, clipping, empty slots, labels, or borders.
|
||||
|
||||
Identity: same pet in every frame: 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. Preserve silhouette, face, proportions, markings, palette, material, style, and props.
|
||||
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. 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.
|
||||
Animation continuity: keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`. Move the pose within the slot instead of redrawing the pet larger or smaller frame to frame.
|
||||
|
||||
State action: Working loop: focused active-task processing, thinking, typing, scanning, or effortful concentration; not literal foot-running, jogging, sprinting, treadmill motion, raised knees, long steps, pumping arms, or directional travel.
|
||||
|
||||
State requirements:
|
||||
- Show the pet actively working or processing, as if running a task: focused posture, busy hands or paws, purposeful bobbing, thinking motion, tool or prop motion only if already part of the pet identity, or other non-locomotion activity.
|
||||
- Do not show literal foot-running, jogging, sprinting, treadmill motion, raised knees, long steps, pumping arms, directional travel, speed lines, dust clouds, floor shadows, motion trails, or detached motion effects.
|
||||
|
||||
Clean extraction: crisp opaque edges, safe padding, no scenery, text, guide marks, checkerboard, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or chroma-key colors inside the pet.
|
||||
@@ -1,17 +0,0 @@
|
||||
Create one horizontal animation strip for Codex pet `youmiao`, state `waiting`.
|
||||
|
||||
Use the attached canonical base for identity. Use the attached layout guide only for slot count, spacing, centering, and padding; do not draw the guide.
|
||||
|
||||
Output exactly 6 full-body frames in one left-to-right row on flat pure yellow #FFFF00. Treat the row as 6 invisible equal-width slots: one centered complete pose per slot, evenly spaced, with no overlap, clipping, empty slots, labels, or borders.
|
||||
|
||||
Identity: same pet in every frame: 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. Preserve silhouette, face, proportions, markings, palette, material, style, and props.
|
||||
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. 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.
|
||||
Animation continuity: keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`. Move the pose within the slot instead of redrawing the pet larger or smaller frame to frame.
|
||||
|
||||
State action: Needs-input loop: expectant asking pose for approval, help, or user input.
|
||||
|
||||
State requirements:
|
||||
- Show that Codex needs approval, help, or user input through an expectant asking pose.
|
||||
- Keep the motion patient and readable, without turning it into ordinary idle or review.
|
||||
|
||||
Clean extraction: crisp opaque edges, safe padding, no scenery, text, guide marks, checkerboard, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or chroma-key colors inside the pet.
|
||||
@@ -1,17 +0,0 @@
|
||||
Create one horizontal animation strip for Codex pet `youmiao`, state `waving`.
|
||||
|
||||
Use the attached canonical base for identity. Use the attached layout guide only for slot count, spacing, centering, and padding; do not draw the guide.
|
||||
|
||||
Output exactly 4 full-body frames in one left-to-right row on flat pure yellow #FFFF00. Treat the row as 4 invisible equal-width slots: one centered complete pose per slot, evenly spaced, with no overlap, clipping, empty slots, labels, or borders.
|
||||
|
||||
Identity: same pet in every frame: 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. Preserve silhouette, face, proportions, markings, palette, material, style, and props.
|
||||
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. 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.
|
||||
Animation continuity: keep apparent pet scale and baseline stable within the row unless the state itself intentionally changes vertical position, such as `jumping`. Move the pose within the slot instead of redrawing the pet larger or smaller frame to frame.
|
||||
|
||||
State action: Greeting loop: paw or limb down, raised, tilted, and returning in a friendly attention gesture.
|
||||
|
||||
State requirements:
|
||||
- Show the greeting through paw, hand, wing, or limb pose only.
|
||||
- Do not draw wave marks, motion arcs, lines, sparkles, symbols, or floating effects around the gesture.
|
||||
|
||||
Clean extraction: crisp opaque edges, safe padding, no scenery, text, guide marks, checkerboard, shadows, glows, motion blur, speed lines, dust, detached effects, stray pixels, or chroma-key colors inside the pet.
|
||||
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 67 KiB |
@@ -10,6 +10,8 @@ import org.dromara.app.domain.vo.AppDeviceVo;
|
||||
import org.dromara.app.domain.vo.DashboardStatsVo;
|
||||
import org.dromara.app.service.IAppDeviceService;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.core.utils.file.FileUtils;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
@@ -22,6 +24,8 @@ import org.dromara.common.web.core.BaseController;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -122,6 +126,26 @@ public class AppDeviceController extends BaseController {
|
||||
return toAjax(appDeviceService.generateQrCode(List.of(ids)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量下载设备二维码 ZIP。
|
||||
*
|
||||
* @param deviceNos 逗号分隔的设备编号
|
||||
*/
|
||||
@SaCheckPermission("app:device:edit")
|
||||
@Log(title = "设备二维码", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/downloadQrCodes")
|
||||
public void downloadQrCodes(HttpServletResponse response,
|
||||
@NotEmpty(message = "设备编号不能为空") @RequestParam("deviceNos") String deviceNos) throws IOException {
|
||||
List<String> ids = Arrays.stream(deviceNos.split(","))
|
||||
.map(String::trim)
|
||||
.filter(StringUtils::isNotBlank)
|
||||
.toList();
|
||||
response.reset();
|
||||
FileUtils.setAttachmentResponseHeader(response, "device_qrcodes.zip");
|
||||
response.setContentType("application/zip");
|
||||
appDeviceService.downloadQrCodes(ids, response.getOutputStream());
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除设备信息
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@ import org.dromara.app.domain.vo.DashboardStatsVo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -104,6 +106,15 @@ public interface IAppDeviceService {
|
||||
*/
|
||||
Boolean generateQrCode(Collection<String> deviceNos);
|
||||
|
||||
/**
|
||||
* 从 OSS 批量下载设备二维码并打包为 ZIP。
|
||||
*
|
||||
* @param deviceNos 设备编号集合
|
||||
* @param outputStream ZIP 输出流
|
||||
* @throws IOException 写入 ZIP 失败
|
||||
*/
|
||||
void downloadQrCodes(Collection<String> deviceNos, OutputStream outputStream) throws IOException;
|
||||
|
||||
/**
|
||||
* 校验并批量删除设备信息
|
||||
信息
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.oss.core.OssClient;
|
||||
import org.dromara.common.oss.entity.UploadResult;
|
||||
import org.dromara.common.oss.factory.OssFactory;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
@@ -41,11 +42,13 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@@ -379,6 +382,53 @@ public class AppDeviceServiceImpl implements IAppDeviceService {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void downloadQrCodes(Collection<String> deviceNos, OutputStream outputStream) throws IOException {
|
||||
if (deviceNos == null || deviceNos.isEmpty()) {
|
||||
throw new ServiceException("设备编号不能为空");
|
||||
}
|
||||
if (outputStream == null) {
|
||||
throw new ServiceException("下载输出流不能为空");
|
||||
}
|
||||
|
||||
List<String> normalizedDeviceNos = deviceNos.stream()
|
||||
.map(deviceNo -> deviceNo == null ? "" : deviceNo.trim())
|
||||
.toList();
|
||||
if (normalizedDeviceNos.stream().anyMatch(StringUtils::isBlank)) {
|
||||
throw new ServiceException("设备编号不能为空");
|
||||
}
|
||||
|
||||
List<String> distinctDeviceNos = normalizedDeviceNos.stream().distinct().toList();
|
||||
List<AppDevice> devices = baseMapper.selectByIds(distinctDeviceNos);
|
||||
if (devices.size() != distinctDeviceNos.size()) {
|
||||
throw new ServiceException("存在无效的设备编号");
|
||||
}
|
||||
if (devices.stream().anyMatch(device -> StringUtils.isBlank(device.getQrcode()))) {
|
||||
throw new ServiceException("所选设备存在未生成二维码的设备");
|
||||
}
|
||||
|
||||
OssClient storage = OssFactory.instance();
|
||||
try (ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream)) {
|
||||
for (AppDevice device : devices) {
|
||||
Path tempFile = storage.fileDownload(device.getQrcode());
|
||||
try {
|
||||
zipOutputStream.putNextEntry(new ZipEntry(buildQrCodeFileName(device.getDeviceNo())));
|
||||
try (InputStream inputStream = Files.newInputStream(tempFile)) {
|
||||
inputStream.transferTo(zipOutputStream);
|
||||
}
|
||||
zipOutputStream.closeEntry();
|
||||
} finally {
|
||||
Files.deleteIfExists(tempFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String buildQrCodeFileName(String deviceNo) {
|
||||
String safeDeviceNo = deviceNo.replaceAll("[\\\\/:*?\"<>|]", "_");
|
||||
return safeDeviceNo + "_qrcode.png";
|
||||
}
|
||||
|
||||
private String buildQrCodeContent(AppDevice device) {
|
||||
if (StringUtils.isBlank(device.getMacAddress())) {
|
||||
throw new ServiceException("设备MAC地址不能为空,无法生成二维码");
|
||||
|
||||