evomeme 0.1.9 → 0.1.10-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/canvas-public/app.js +509 -5999
- package/dist/canvas-public/assets/presets/catalog.json +47 -0
- package/dist/canvas-public/assets/presets/tiles/A_01_CaoDi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_02_ShaMo.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_03_TianKong.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_04_ShuiBo.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_05_HaiMian.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_06_MuDiBan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_07_ShiZhuan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_08_AnRongYan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_09_QingTaiShi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_10_ShenHai.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_11_HuiYanShi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_12_HongTu.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_13_GengDi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_14_HuoShanYan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_15_NiTu.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_16_HuangSha.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_17_CongLin.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_18_ZiYanShi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_19_MoGuTu.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_20_HuaDian.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_21_HaiLang.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_22_GanTu.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_23_QingTaiShiBan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_24_XingKong.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_25_MoFaFuWen.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_26_ShiTuYeDi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_27_LanZhuan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_28_HongZhuan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_29_YueQiu.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_30_JinShuGe.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_31_JinShuJingGai.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_32_ShuZiChuang.png +0 -0
- package/dist/canvas-public/canvas/actions.js +144 -0
- package/dist/canvas-public/canvas/camera.js +28 -0
- package/dist/canvas-public/canvas/chrome.js +14 -0
- package/dist/canvas-public/canvas/data.js +123 -0
- package/dist/canvas-public/canvas/dependencies.js +19 -0
- package/dist/canvas-public/canvas/interactions.js +544 -0
- package/dist/canvas-public/canvas/panel-resize.js +5 -0
- package/dist/canvas-public/canvas/renderer.js +297 -0
- package/dist/canvas-public/canvas/selection.js +62 -0
- package/dist/canvas-public/canvas/serialization.js +118 -0
- package/dist/canvas-public/canvas/sync.js +202 -0
- package/dist/canvas-public/core/api.js +32 -0
- package/dist/canvas-public/core/feature-registry.js +29 -0
- package/dist/canvas-public/core/feature-state.js +228 -0
- package/dist/canvas-public/core/layout.js +133 -0
- package/dist/canvas-public/core/operations.js +38 -0
- package/dist/canvas-public/core/project.js +203 -0
- package/dist/canvas-public/core/state.js +27 -0
- package/dist/canvas-public/dialogs/context-menu.js +118 -0
- package/dist/canvas-public/elements/base.js +100 -0
- package/dist/canvas-public/elements/connections.js +105 -0
- package/dist/canvas-public/elements/drag.js +53 -0
- package/dist/canvas-public/elements/image.js +259 -0
- package/dist/canvas-public/elements/loading-recovery.js +5 -0
- package/dist/canvas-public/elements/loading.js +21 -0
- package/dist/canvas-public/elements/map.js +64 -0
- package/dist/canvas-public/elements/registry.js +58 -0
- package/dist/canvas-public/elements/replacement.js +78 -0
- package/dist/canvas-public/elements/resize.js +210 -0
- package/dist/canvas-public/elements/task-pipeline.js +235 -0
- package/dist/canvas-public/elements/types.js +21 -0
- package/dist/canvas-public/elements/ui.js +14 -0
- package/dist/canvas-public/elements/video.js +64 -0
- package/dist/canvas-public/features/assets/local-assets.js +72 -0
- package/dist/canvas-public/features/assets/official-assets.js +539 -0
- package/dist/canvas-public/features/editing/canvas-size.js +532 -0
- package/dist/canvas-public/features/editing/color-key.js +471 -0
- package/dist/canvas-public/features/editing/cutout.js +20 -0
- package/dist/canvas-public/features/editing/interactive-image-editing.js +982 -0
- package/dist/canvas-public/features/editing/layer-decomposition.js +45 -0
- package/dist/canvas-public/features/editing/manual-split.js +115 -0
- package/dist/canvas-public/features/editing/perfect-pixel.js +299 -0
- package/dist/canvas-public/features/editing/scroll-preview.js +130 -0
- package/dist/canvas-public/features/editing/scroll-seam-elimination.js +71 -0
- package/dist/canvas-public/features/editing/seam-elimination.js +46 -0
- package/dist/canvas-public/features/editing/smart-split.js +49 -0
- package/dist/canvas-public/features/editing/source-preview.js +43 -0
- package/dist/canvas-public/features/editing/video-cycle.js +49 -0
- package/dist/canvas-public/features/editing/video-frames.js +35 -0
- package/dist/canvas-public/features/frame-editor/frame-editing.js +755 -0
- package/dist/canvas-public/features/frame-editor/frame-model.js +63 -0
- package/dist/canvas-public/features/frame-editor/playback.js +83 -0
- package/dist/canvas-public/features/frame-editor/preview.js +151 -0
- package/dist/canvas-public/features/generation/animation.js +272 -0
- package/dist/canvas-public/features/generation/asset-batch.js +102 -0
- package/dist/canvas-public/features/generation/direction.js +163 -0
- package/dist/canvas-public/features/generation/fields.js +73 -0
- package/dist/canvas-public/features/generation/game-ui.js +64 -0
- package/dist/canvas-public/features/generation/image.js +96 -0
- package/dist/canvas-public/features/generation/scroll-image.js +157 -0
- package/dist/canvas-public/features/generation/seamless-tile.js +52 -0
- package/dist/canvas-public/features/generation/tile-transition-atlas.js +79 -0
- package/dist/canvas-public/features/generation/video.js +105 -0
- package/dist/canvas-public/features/map/creation.js +73 -0
- package/dist/canvas-public/features/map/tile-map-editor.js +2520 -0
- package/dist/canvas-public/features/registry.js +59 -0
- package/dist/canvas-public/index.html +84 -259
- package/dist/canvas-public/inspector/controls.js +49 -0
- package/dist/canvas-public/inspector/frame-preview.js +11 -0
- package/dist/canvas-public/inspector/inspector.js +190 -0
- package/dist/canvas-public/inspector/media-inspector.js +517 -0
- package/dist/canvas-public/inspector/media-preview.js +56 -0
- package/dist/canvas-public/inspector/number-stepper.js +96 -0
- package/dist/canvas-public/inspector/resize.js +88 -0
- package/dist/canvas-public/inspector/scroll-preview.js +11 -0
- package/dist/canvas-public/inspector/ui-inspector.js +14 -0
- package/dist/canvas-public/language/en-US.js +1059 -0
- package/dist/canvas-public/language/index.js +91 -0
- package/dist/canvas-public/language/zh-CN.js +1059 -0
- package/dist/canvas-public/map/export.js +10 -0
- package/dist/canvas-public/map/inspector.js +8 -0
- package/dist/canvas-public/map/model.js +409 -0
- package/dist/canvas-public/map/tile-map-editor.js +2 -0
- package/dist/canvas-public/media/metadata.js +183 -0
- package/dist/canvas-public/media/support.js +183 -0
- package/dist/canvas-public/styles/base.css +49 -0
- package/dist/canvas-public/styles/canvas.css +127 -0
- package/dist/canvas-public/styles/controls.css +203 -0
- package/dist/canvas-public/styles/dialogs.css +521 -0
- package/dist/canvas-public/styles/feature-form.css +409 -0
- package/dist/canvas-public/styles/inspector.css +441 -0
- package/dist/canvas-public/styles/layout.css +344 -0
- package/dist/canvas-public/styles/map.css +11 -0
- package/dist/canvas-public/styles/nodes.css +636 -0
- package/dist/canvas-public/styles.css +9 -2247
- package/dist/canvas-public/ui/controls.js +222 -0
- package/dist/canvas-public/ui/elements.js +9 -0
- package/dist/canvas-public/ui/feature-controller.js +296 -0
- package/dist/canvas-public/ui/feature-form.js +402 -0
- package/dist/canvas-public/ui/settings.js +84 -0
- package/dist/canvas-public/ui/toolbar.js +55 -0
- package/dist/canvas-public/vendor/pixi-tilemap.js +126 -0
- package/dist/canvas-public/vendor/pixi.min.js +2340 -0
- package/dist/canvas-public/workers/color-key-worker.js +289 -0
- package/dist/image-workers/perfect-pixel/perfect-pixel-core.js +441 -0
- package/dist/image-workers/perfect-pixel/perfect-pixel-worker.cjs +10 -0
- package/dist/index.js +46710 -12400
- package/dist/skills/en-US/evomeme-canvas/SKILL.md +52 -0
- package/dist/skills/en-US/evomeme-canvas/agents/openai.yaml +7 -0
- package/dist/skills/en-US/evomeme-cloud-fs/SKILL.md +203 -0
- package/dist/skills/en-US/evomeme-cloud-fs/agents/openai.yaml +7 -0
- package/dist/skills/en-US/evomeme-cover/SKILL.md +131 -0
- package/dist/skills/en-US/evomeme-cover/agents/openai.yaml +7 -0
- package/dist/skills/en-US/evomeme-game-maker/SKILL.md +288 -0
- package/dist/skills/en-US/evomeme-game-maker/agents/openai.yaml +4 -0
- package/dist/skills/en-US/evomeme-login/SKILL.md +97 -0
- package/dist/skills/en-US/evomeme-login/agents/openai.yaml +7 -0
- package/dist/skills/en-US/evomeme-mcp/SKILL.md +71 -0
- package/dist/skills/en-US/evomeme-mcp/agents/openai.yaml +7 -0
- package/dist/skills/en-US/evomeme-mcp/references/troubleshooting.md +55 -0
- package/dist/skills/en-US/evomeme-native-bridge-sdk/SKILL.md +286 -0
- package/dist/skills/en-US/evomeme-native-bridge-sdk/agents/openai.yaml +8 -0
- package/dist/skills/en-US/evomeme-tos-upload/SKILL.md +47 -0
- package/dist/skills/en-US/evomeme-tos-upload/agents/openai.yaml +5 -0
- package/dist/skills/en-US/evomeme-ui/SKILL.md +123 -0
- package/dist/skills/en-US/evomeme-ui/agents/openai.yaml +4 -0
- package/dist/skills/en-US/evomeme-ui/references/host-layout.md +69 -0
- package/dist/skills/en-US/game-art/SKILL.md +121 -0
- package/dist/skills/en-US/game-art/agents/openai.yaml +8 -0
- package/dist/skills/en-US/game-asset-align/SKILL.md +47 -0
- package/dist/skills/en-US/game-asset-align/agents/openai.yaml +8 -0
- package/dist/skills/en-US/game-asset-align/references/alignment-contract.md +61 -0
- package/dist/skills/en-US/game-asset-align/references/blender-scene-pipeline.md +35 -0
- package/dist/skills/en-US/game-asset-align/references/canonical-package.md +26 -0
- package/dist/skills/en-US/game-asset-align/references/engine-capabilities.md +14 -0
- package/dist/skills/en-US/game-asset-align/references/lightweight-review.md +34 -0
- package/dist/skills/en-US/game-asset-align/references/repair-policy.md +30 -0
- package/dist/skills/en-US/game-asset-align/references/tool-contract.md +69 -0
- package/dist/skills/en-US/game-asset-align/references/visual-review.md +26 -0
- package/dist/skills/en-US/game-asset-batch-generator/SKILL.md +117 -0
- package/dist/skills/en-US/game-asset-batch-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-asset-image-generator/SKILL.md +86 -0
- package/dist/skills/en-US/game-asset-image-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-asset-image-generator/references/background.md +34 -0
- package/dist/skills/en-US/game-asset-image-generator/references/static-game-assets.md +38 -0
- package/dist/skills/en-US/game-asset-mesh-generator/SKILL.md +35 -0
- package/dist/skills/en-US/game-asset-mesh-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/animation-presets.md +313 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/generation-contracts.md +131 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/image-generator-workflows.md +65 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/postprocess-contracts.md +187 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/threejs-integration.md +113 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/tool-reference.md +67 -0
- package/dist/skills/en-US/game-audio/SKILL.md +121 -0
- package/dist/skills/en-US/game-audio/agents/openai.yaml +4 -0
- package/{skills → dist/skills/en-US}/game-audio/references/bgm-cdn.md +7 -11
- package/{skills → dist/skills/en-US}/game-audio/references/sfx-cdn.md +6 -4
- package/dist/skills/en-US/game-character-view-generator/SKILL.md +110 -0
- package/dist/skills/en-US/game-character-view-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-demo/SKILL.md +103 -0
- package/dist/skills/en-US/game-demo/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-image-layer-decomposer/SKILL.md +99 -0
- package/dist/skills/en-US/game-image-layer-decomposer/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-image-splitter/SKILL.md +114 -0
- package/dist/skills/en-US/game-image-splitter/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-maker/SKILL.md +111 -0
- package/dist/skills/en-US/game-maker/agents/openai.yaml +4 -0
- package/dist/skills/en-US/game-perfect-pixel/SKILL.md +123 -0
- package/dist/skills/en-US/game-perfect-pixel/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-scroll-generator/SKILL.md +110 -0
- package/dist/skills/en-US/game-scroll-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-test/SKILL.md +58 -0
- package/dist/skills/en-US/game-test/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-tile-generator/SKILL.md +152 -0
- package/dist/skills/en-US/game-tile-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-ui/SKILL.md +177 -0
- package/dist/skills/en-US/game-ui/agents/openai.yaml +4 -0
- package/dist/skills/en-US/game-ui-generator/SKILL.md +82 -0
- package/dist/skills/en-US/game-ui-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-ui-generator/references/component-patterns.md +65 -0
- package/dist/skills/en-US/game-ui-generator/references/runtime-integration.md +45 -0
- package/dist/skills/en-US/game-video-cycle/SKILL.md +98 -0
- package/dist/skills/en-US/game-video-cycle/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-video-generator/SKILL.md +78 -0
- package/dist/skills/en-US/game-video-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/godot-3d-game/SKILL.md +41 -0
- package/dist/skills/en-US/godot-3d-game/agents/openai.yaml +8 -0
- package/dist/skills/en-US/godot-3d-game/references/alignment-gates.md +26 -0
- package/dist/skills/en-US/godot-3d-game/references/appearance-alignment.md +54 -0
- package/dist/skills/en-US/godot-3d-game/references/build-and-qa.md +22 -0
- package/dist/skills/en-US/godot-3d-game/references/canonical-asset-runtime.md +27 -0
- package/dist/skills/en-US/godot-3d-game/references/import-and-wrapper-scenes.md +20 -0
- package/dist/skills/en-US/godot-3d-game/references/physics-colliders.md +13 -0
- package/dist/skills/en-US/godot-3d-game/references/project-structure.md +22 -0
- package/dist/skills/en-US/godot-3d-game/references/skeleton-animation.md +16 -0
- package/dist/skills/en-US/phaser-2d-game/SKILL.md +127 -0
- package/dist/skills/en-US/phaser-2d-game/agents/openai.yaml +8 -0
- package/dist/skills/en-US/phaser-2d-game/references/engine-performance.md +64 -0
- package/dist/skills/en-US/phaser-2d-game/references/engine-physics.md +139 -0
- package/dist/skills/en-US/phaser-2d-game/references/engine-runtime.md +129 -0
- package/dist/skills/en-US/phaser-2d-game/references/engine-spritesheets.md +99 -0
- package/dist/skills/en-US/phaser-2d-game/references/engine-tilemaps.md +80 -0
- package/dist/skills/en-US/phaser-2d-game/references/file-structure.md +94 -0
- package/dist/skills/en-US/phaser-2d-graphics-builder/SKILL.md +68 -0
- package/dist/skills/en-US/phaser-2d-graphics-builder/agents/openai.yaml +7 -0
- package/dist/skills/en-US/threejs-3d-game/SKILL.md +117 -0
- package/dist/skills/en-US/threejs-3d-game/agents/openai.yaml +7 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-asset-pipeline.md +155 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-audio.md +70 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-input-camera.md +84 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-performance.md +96 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-physics.md +142 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-runtime.md +199 -0
- package/dist/skills/en-US/threejs-3d-game/references/file-structure.md +353 -0
- package/dist/skills/en-US/threejs-aaa-graphics-builder/SKILL.md +62 -0
- package/dist/skills/en-US/threejs-aaa-graphics-builder/agents/openai.yaml +7 -0
- package/{skills → dist/skills/zh-CN}/evomeme-cloud-fs/SKILL.md +33 -6
- package/{skills → dist/skills/zh-CN}/evomeme-cover/SKILL.md +7 -8
- package/{skills → dist/skills/zh-CN}/evomeme-game-maker/SKILL.md +91 -88
- package/{skills → dist/skills/zh-CN}/evomeme-login/SKILL.md +5 -0
- package/dist/skills/zh-CN/evomeme-mcp/SKILL.md +71 -0
- package/dist/skills/zh-CN/evomeme-mcp/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/evomeme-mcp/references/troubleshooting.md +55 -0
- package/{skills → dist/skills/zh-CN}/evomeme-tos-upload/SKILL.md +6 -5
- package/dist/skills/zh-CN/evomeme-ui/SKILL.md +123 -0
- package/dist/skills/zh-CN/evomeme-ui/agents/openai.yaml +4 -0
- package/dist/skills/zh-CN/evomeme-ui/references/host-layout.md +69 -0
- package/dist/skills/zh-CN/game-asset-align/SKILL.md +47 -0
- package/dist/skills/zh-CN/game-asset-align/agents/openai.yaml +8 -0
- package/dist/skills/zh-CN/game-asset-align/references/alignment-contract.md +61 -0
- package/dist/skills/zh-CN/game-asset-align/references/blender-scene-pipeline.md +35 -0
- package/dist/skills/zh-CN/game-asset-align/references/canonical-package.md +26 -0
- package/dist/skills/zh-CN/game-asset-align/references/engine-capabilities.md +14 -0
- package/dist/skills/zh-CN/game-asset-align/references/lightweight-review.md +34 -0
- package/dist/skills/zh-CN/game-asset-align/references/repair-policy.md +30 -0
- package/dist/skills/zh-CN/game-asset-align/references/tool-contract.md +69 -0
- package/dist/skills/zh-CN/game-asset-align/references/visual-review.md +26 -0
- package/dist/skills/zh-CN/game-asset-batch-generator/SKILL.md +117 -0
- package/dist/skills/zh-CN/game-asset-batch-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-asset-image-generator/SKILL.md +86 -0
- package/{skills → dist/skills/zh-CN}/game-asset-image-generator/references/background.md +3 -1
- package/{skills → dist/skills/zh-CN}/game-asset-image-generator/references/static-game-assets.md +2 -2
- package/dist/skills/zh-CN/game-asset-mesh-generator/SKILL.md +35 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/animation-presets.md +313 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/generation-contracts.md +131 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/image-generator-workflows.md +65 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/postprocess-contracts.md +187 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/threejs-integration.md +113 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/tool-reference.md +67 -0
- package/dist/skills/zh-CN/game-audio/SKILL.md +121 -0
- package/dist/skills/zh-CN/game-audio/agents/openai.yaml +4 -0
- package/dist/skills/zh-CN/game-audio/references/bgm-cdn.md +123 -0
- package/dist/skills/zh-CN/game-audio/references/sfx-cdn.md +79 -0
- package/dist/skills/zh-CN/game-character-view-generator/SKILL.md +110 -0
- package/dist/skills/zh-CN/game-character-view-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-image-layer-decomposer/SKILL.md +99 -0
- package/dist/skills/zh-CN/game-image-layer-decomposer/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-image-splitter/SKILL.md +114 -0
- package/dist/skills/zh-CN/game-image-splitter/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-perfect-pixel/SKILL.md +123 -0
- package/dist/skills/zh-CN/game-perfect-pixel/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-scroll-generator/SKILL.md +110 -0
- package/dist/skills/zh-CN/game-scroll-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-test/references/checklists/playtest-qa.md +12 -0
- package/dist/skills/zh-CN/game-tile-generator/SKILL.md +151 -0
- package/dist/skills/zh-CN/game-tile-generator/agents/openai.yaml +7 -0
- package/{skills → dist/skills/zh-CN}/game-ui/SKILL.md +9 -1
- package/dist/skills/zh-CN/game-ui/references/checklists/game-ui-quality.md +14 -0
- package/dist/skills/zh-CN/game-ui/references/checklists/hud-readability.md +12 -0
- package/dist/skills/zh-CN/game-ui/references/checklists/mobile-input.md +12 -0
- package/dist/skills/zh-CN/game-ui/references/checklists/responsive-ui-fit.md +12 -0
- package/dist/skills/zh-CN/game-ui/references/ui-patterns.md +140 -0
- package/dist/skills/zh-CN/game-ui/references/ui-prompt-templates.md +63 -0
- package/dist/skills/zh-CN/game-ui-generator/SKILL.md +82 -0
- package/dist/skills/zh-CN/game-ui-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-ui-generator/references/component-patterns.md +65 -0
- package/dist/skills/zh-CN/game-ui-generator/references/runtime-integration.md +45 -0
- package/dist/skills/zh-CN/game-video-cycle/SKILL.md +98 -0
- package/dist/skills/zh-CN/game-video-cycle/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-video-generator/SKILL.md +78 -0
- package/dist/skills/zh-CN/game-video-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/godot-3d-game/SKILL.md +41 -0
- package/dist/skills/zh-CN/godot-3d-game/agents/openai.yaml +8 -0
- package/dist/skills/zh-CN/godot-3d-game/references/alignment-gates.md +26 -0
- package/dist/skills/zh-CN/godot-3d-game/references/appearance-alignment.md +54 -0
- package/dist/skills/zh-CN/godot-3d-game/references/build-and-qa.md +22 -0
- package/dist/skills/zh-CN/godot-3d-game/references/canonical-asset-runtime.md +27 -0
- package/dist/skills/zh-CN/godot-3d-game/references/import-and-wrapper-scenes.md +20 -0
- package/dist/skills/zh-CN/godot-3d-game/references/physics-colliders.md +13 -0
- package/dist/skills/zh-CN/godot-3d-game/references/project-structure.md +22 -0
- package/dist/skills/zh-CN/godot-3d-game/references/skeleton-animation.md +16 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/compose-quality.md +10 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +9 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +15 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +10 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +9 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +9 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/compose-recipes.md +71 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +33 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/implementation-blueprint.md +82 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/sprite-recipes.md +90 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/technical-art.md +67 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/vfx-recipes.md +67 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/visual-scorecard.md +129 -0
- package/{skills → dist/skills/zh-CN}/threejs-3d-game/SKILL.md +6 -2
- package/dist/skills/zh-CN/threejs-3d-game/references/engine-asset-pipeline.md +155 -0
- package/{skills → dist/skills/zh-CN}/threejs-aaa-graphics-builder/SKILL.md +6 -6
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +23 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +19 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +14 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +14 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +15 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +17 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +236 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/implementation-blueprint.md +161 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/model-recipes.md +146 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/render-recipes.md +90 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/shader-cookbook.md +292 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/technical-art.md +167 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/visual-scorecard.md +147 -0
- package/dist/stage-blender/bake_materials.py +102 -0
- package/dist/stage-blender/export_scene.py +275 -0
- package/dist/stage-blender/preview_camera.py +90 -0
- package/dist/stage-blender/repair_mesh.py +112 -0
- package/dist/stage-public/app.js +759 -0
- package/dist/stage-public/baked/bakePilot.js +44 -0
- package/dist/stage-public/baked/bakedScene.js +129 -0
- package/dist/stage-public/baked/sceneAppearance.js +225 -0
- package/dist/stage-public/baked/sceneCamera.js +45 -0
- package/dist/stage-public/comparison-contract.js +28 -0
- package/dist/stage-public/delivery.html +4 -0
- package/dist/stage-public/delivery.js +17 -0
- package/dist/stage-public/godot/appearance.gd +170 -0
- package/dist/stage-public/godot/preview.gd +79 -0
- package/dist/stage-public/index.html +141 -0
- package/dist/stage-public/review-app.js +289 -0
- package/dist/stage-public/review-runtime.js +63 -0
- package/dist/stage-public/review.css +24 -0
- package/dist/stage-public/review.html +47 -0
- package/dist/stage-public/scene-runtime.js +212 -0
- package/dist/stage-public/sceneContractRuntime.js +235 -0
- package/dist/stage-public/styles.css +328 -0
- package/dist/stage-public/three-appearance.js +104 -0
- package/dist/stage-public/vendor/three170/LICENSE +21 -0
- package/dist/stage-public/vendor/three170/build/three.module.js +54571 -0
- package/dist/stage-public/vendor/three170/examples/jsm/controls/OrbitControls.js +1523 -0
- package/dist/stage-public/vendor/three170/examples/jsm/environments/RoomEnvironment.js +144 -0
- package/dist/stage-public/vendor/three170/examples/jsm/libs/fflate.module.js +2672 -0
- package/dist/stage-public/vendor/three170/examples/jsm/loaders/EXRLoader.js +2563 -0
- package/dist/stage-public/vendor/three170/examples/jsm/loaders/GLTFLoader.js +4727 -0
- package/dist/stage-public/vendor/three170/examples/jsm/utils/BufferGeometryUtils.js +1373 -0
- package/dist/tile-transition-mask.svg +40 -0
- package/package.json +24 -8
- package/dist/canvas-public/cycle-detect.js +0 -166
- package/dist/canvas-public/smart-split.js +0 -185
- package/skills/game-asset-image-generator/SKILL.md +0 -104
- package/skills/game-audio/SKILL.md +0 -82
- package/skills/game-audio/agents/openai.yaml +0 -4
- package/skills/threejs-3d-game/references/engine-asset-pipeline.md +0 -116
- /package/{skills → dist/skills/en-US}/game-test/references/checklists/playtest-qa.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/checklists/game-ui-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/checklists/hud-readability.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/checklists/mobile-input.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/checklists/responsive-ui-fit.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/ui-patterns.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/ui-prompt-templates.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/compose-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/compose-recipes.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/implementation-blueprint.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/sprite-recipes.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/technical-art.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/vfx-recipes.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/visual-scorecard.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/implementation-blueprint.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/model-recipes.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/render-recipes.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/shader-cookbook.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/technical-art.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/visual-scorecard.md +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-canvas/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-canvas/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-cloud-fs/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-cover/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-game-maker/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-login/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-native-bridge-sdk/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-native-bridge-sdk/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-tos-upload/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-art/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/game-art/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-asset-image-generator/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-demo/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/game-demo/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-maker/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/game-maker/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-test/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/game-test/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-ui/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-performance.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-physics.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-runtime.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-spritesheets.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-tilemaps.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/file-structure.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-graphics-builder/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-graphics-builder/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-audio.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-input-camera.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-performance.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-physics.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-runtime.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/file-structure.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-aaa-graphics-builder/agents/openai.yaml +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 8 8" shape-rendering="geometricPrecision">
|
|
3
|
+
<title>Two-terrain 4x4 transition mask</title>
|
|
4
|
+
<desc>White is terrain 0 and black is terrain 1. Every 2x2 logical region forms one tile. Rounded transitions begin halfway through a logical half-tile and use an exact quarter-circle with radius 0.5.</desc>
|
|
5
|
+
<defs>
|
|
6
|
+
<mask id="terrain-one" maskUnits="userSpaceOnUse" x="0" y="0" width="8" height="8">
|
|
7
|
+
<rect width="8" height="8" fill="black"/>
|
|
8
|
+
<!-- 00011000 / 10011111 / 10011111 / 01111110 / 01111110 / 00000110 / 00000110 / 00011000 -->
|
|
9
|
+
<g fill="white">
|
|
10
|
+
<rect x="3" y="0" width="2" height="1"/><rect x="0" y="1" width="1" height="1"/>
|
|
11
|
+
<rect x="3" y="1" width="5" height="1"/><rect x="0" y="2" width="1" height="1"/>
|
|
12
|
+
<rect x="3" y="2" width="5" height="1"/><rect x="1" y="3" width="6" height="1"/>
|
|
13
|
+
<rect x="1" y="4" width="6" height="1"/><rect x="5" y="5" width="2" height="1"/>
|
|
14
|
+
<rect x="5" y="6" width="2" height="1"/><rect x="3" y="7" width="2" height="1"/>
|
|
15
|
+
</g>
|
|
16
|
+
<g fill="black">
|
|
17
|
+
<rect x="0.5" y="1" width="0.5" height="0.5"/><rect x="0.5" y="2.5" width="0.5" height="0.5"/>
|
|
18
|
+
<rect x="1" y="3" width="0.5" height="0.5"/><rect x="1" y="4.5" width="0.5" height="0.5"/>
|
|
19
|
+
<rect x="3" y="7" width="0.5" height="0.5"/><rect x="5" y="6.5" width="0.5" height="0.5"/>
|
|
20
|
+
<rect x="4.5" y="7" width="0.5" height="0.5"/><rect x="6.5" y="6.5" width="0.5" height="0.5"/>
|
|
21
|
+
</g>
|
|
22
|
+
<g fill="white">
|
|
23
|
+
<circle cx="0.5" cy="1.5" r="0.5"/><circle cx="0.5" cy="2.5" r="0.5"/>
|
|
24
|
+
<circle cx="1.5" cy="3.5" r="0.5"/><circle cx="1.5" cy="4.5" r="0.5"/>
|
|
25
|
+
<circle cx="3.5" cy="7.5" r="0.5"/><circle cx="5.5" cy="6.5" r="0.5"/>
|
|
26
|
+
<circle cx="4.5" cy="7.5" r="0.5"/><circle cx="6.5" cy="6.5" r="0.5"/>
|
|
27
|
+
</g>
|
|
28
|
+
<g fill="white">
|
|
29
|
+
<rect x="5" y="0.5" width="0.5" height="0.5"/><rect x="2.5" y="2.5" width="0.5" height="0.5"/>
|
|
30
|
+
<rect x="7" y="3" width="0.5" height="0.5"/><rect x="4.5" y="5" width="0.5" height="0.5"/>
|
|
31
|
+
</g>
|
|
32
|
+
<g fill="black">
|
|
33
|
+
<circle cx="5.5" cy="0.5" r="0.5"/><circle cx="2.5" cy="2.5" r="0.5"/>
|
|
34
|
+
<circle cx="7.5" cy="3.5" r="0.5"/><circle cx="4.5" cy="5.5" r="0.5"/>
|
|
35
|
+
</g>
|
|
36
|
+
</mask>
|
|
37
|
+
</defs>
|
|
38
|
+
<rect width="8" height="8" fill="white"/>
|
|
39
|
+
<rect width="8" height="8" fill="black" mask="url(#terrain-one)"/>
|
|
40
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "evomeme",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10-beta.13",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "evomemeplugin_client - local stdio MCP server. Install: npx -y evomeme@latest install --ide cursor. Init: npx -y evomeme@latest init.",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,9 +9,13 @@
|
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist/index.js",
|
|
12
|
+
"dist/tile-transition-mask.svg",
|
|
13
|
+
"dist/image-workers",
|
|
12
14
|
"dist/canvas-public",
|
|
15
|
+
"dist/stage-public",
|
|
16
|
+
"dist/stage-blender",
|
|
13
17
|
"bin/evomeme",
|
|
14
|
-
"skills"
|
|
18
|
+
"dist/skills"
|
|
15
19
|
],
|
|
16
20
|
"engines": {
|
|
17
21
|
"node": ">=18.14.1"
|
|
@@ -20,21 +24,28 @@
|
|
|
20
24
|
"version:sync": "node scripts/sync-version.mjs",
|
|
21
25
|
"prepare:prod": "node scripts/prepare-channel.mjs --channel prod",
|
|
22
26
|
"prepare:dev": "node scripts/prepare-channel.mjs --channel dev",
|
|
23
|
-
"
|
|
27
|
+
"skills:render": "node scripts/render-skills.mjs",
|
|
28
|
+
"skills:validate": "npm run skills:render && node scripts/validate-skills.mjs --skills-dir dist/skills",
|
|
29
|
+
"errors:check": "node ../shared/errors/sync.mjs --check",
|
|
30
|
+
"prebuild": "npm run errors:check && npm run version:sync",
|
|
24
31
|
"build": "node scripts/bundle.mjs",
|
|
25
32
|
"start": "node bin/evomeme",
|
|
26
33
|
"dev": "tsx src/index.ts",
|
|
27
34
|
"canvas:dev": "tsx watch src/index.ts canvas --no-open",
|
|
35
|
+
"stage:dev": "tsx watch src/index.ts stage --no-open",
|
|
28
36
|
"mcp:list": "node scripts/call-mcp.mjs --list",
|
|
29
37
|
"mcp:call": "node scripts/call-mcp.mjs",
|
|
30
38
|
"mcp:image:demo": "node scripts/call-mcp.mjs --demo-image",
|
|
31
39
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
32
40
|
"test": "jest",
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
41
|
+
"test:publish": "node --test __tests__/scripts/renderSkills.test.mjs",
|
|
42
|
+
"test:canvas": "jest --runInBand __tests__/canvas",
|
|
43
|
+
"test:canvas:browser": "node scripts/canvas-feature-smoke.mjs",
|
|
44
|
+
"prepack": "npm run build",
|
|
45
|
+
"pack:local": "npm run prepare:prod && npm pack",
|
|
46
|
+
"pack:dev": "npm run prepare:dev && npm pack && npm run prepare:prod",
|
|
47
|
+
"publish:prod": "npm run prepare:prod && npm publish --access public && npm run prepare:prod",
|
|
48
|
+
"publish:dev": "npm run prepare:dev && npm publish --access public && npm run prepare:prod"
|
|
38
49
|
},
|
|
39
50
|
"publishConfig": {
|
|
40
51
|
"access": "public"
|
|
@@ -51,6 +62,9 @@
|
|
|
51
62
|
"@ffmpeg-installer/ffmpeg": "^1.1.0",
|
|
52
63
|
"@ffprobe-installer/ffprobe": "^2.1.2",
|
|
53
64
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
65
|
+
"@pixi/tilemap": "^5.0.2",
|
|
66
|
+
"gltf-validator": "2.0.0-dev.3.10",
|
|
67
|
+
"pixi.js": "^8.20.1",
|
|
54
68
|
"semver": "^7.8.5",
|
|
55
69
|
"update-notifier": "^7.3.1"
|
|
56
70
|
},
|
|
@@ -61,7 +75,9 @@
|
|
|
61
75
|
"@types/update-notifier": "^6.0.8",
|
|
62
76
|
"esbuild": "^0.27.0",
|
|
63
77
|
"jest": "^29.7.0",
|
|
78
|
+
"jsdom": "26.1.0",
|
|
64
79
|
"painterro": "^1.2.92",
|
|
80
|
+
"playwright": "1.63.0",
|
|
65
81
|
"ts-jest": "^29.2.5",
|
|
66
82
|
"tsx": "^4.20.6",
|
|
67
83
|
"typescript": "^5.6.3"
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 浏览器端:缩略灰度 + z-score + 点积,从前向后找最早高相似帧。
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
function zscoreInPlace(vec) {
|
|
6
|
-
let sum = 0
|
|
7
|
-
for (let i = 0; i < vec.length; i++) sum += vec[i]
|
|
8
|
-
const mean = sum / vec.length
|
|
9
|
-
let varSum = 0
|
|
10
|
-
for (let i = 0; i < vec.length; i++) {
|
|
11
|
-
const d = vec[i] - mean
|
|
12
|
-
varSum += d * d
|
|
13
|
-
}
|
|
14
|
-
const std = Math.sqrt(varSum / vec.length) + 1e-8
|
|
15
|
-
for (let i = 0; i < vec.length; i++) vec[i] = (vec[i] - mean) / std
|
|
16
|
-
return vec
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function featureFromImageData(imageData) {
|
|
20
|
-
const { data, width, height } = imageData
|
|
21
|
-
const n = width * height
|
|
22
|
-
const vec = new Float32Array(n)
|
|
23
|
-
for (let i = 0, p = 0; i < n; i++, p += 4) {
|
|
24
|
-
// ITU-R BT.601 亮度
|
|
25
|
-
vec[i] = data[p] * 0.299 + data[p + 1] * 0.587 + data[p + 2] * 0.114
|
|
26
|
-
}
|
|
27
|
-
return zscoreInPlace(vec)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function nccScore(a, b) {
|
|
31
|
-
const n = Math.min(a.length, b.length)
|
|
32
|
-
if (!n) return 0
|
|
33
|
-
let sum = 0
|
|
34
|
-
for (let i = 0; i < n; i++) sum += a[i] * b[i]
|
|
35
|
-
return sum / n
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function waitEvent(target, event, { signal } = {}) {
|
|
39
|
-
return new Promise((resolve, reject) => {
|
|
40
|
-
if (signal?.aborted) {
|
|
41
|
-
reject(new DOMException('Aborted', 'AbortError'))
|
|
42
|
-
return
|
|
43
|
-
}
|
|
44
|
-
const onAbort = () => {
|
|
45
|
-
cleanup()
|
|
46
|
-
reject(new DOMException('Aborted', 'AbortError'))
|
|
47
|
-
}
|
|
48
|
-
const onOk = () => {
|
|
49
|
-
cleanup()
|
|
50
|
-
resolve()
|
|
51
|
-
}
|
|
52
|
-
const cleanup = () => {
|
|
53
|
-
target.removeEventListener(event, onOk)
|
|
54
|
-
signal?.removeEventListener('abort', onAbort)
|
|
55
|
-
}
|
|
56
|
-
target.addEventListener(event, onOk, { once: true })
|
|
57
|
-
signal?.addEventListener('abort', onAbort, { once: true })
|
|
58
|
-
})
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async function seekVideo(video, time, signal) {
|
|
62
|
-
const duration = Number(video.duration)
|
|
63
|
-
const maxT = Number.isFinite(duration) && duration > 0 ? Math.max(0, duration - 1e-4) : time
|
|
64
|
-
const t = Math.min(Math.max(0, time), maxT)
|
|
65
|
-
if (Math.abs((video.currentTime || 0) - t) < 1e-4) return
|
|
66
|
-
const p = waitEvent(video, 'seeked', { signal })
|
|
67
|
-
video.currentTime = t
|
|
68
|
-
await p
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function drawFeature(video, canvas, ctx, thumbWidth) {
|
|
72
|
-
const vw = video.videoWidth || 1
|
|
73
|
-
const vh = video.videoHeight || 1
|
|
74
|
-
const w = Math.max(8, Math.round(thumbWidth))
|
|
75
|
-
const h = Math.max(8, Math.round((vh / vw) * w))
|
|
76
|
-
if (canvas.width !== w) canvas.width = w
|
|
77
|
-
if (canvas.height !== h) canvas.height = h
|
|
78
|
-
ctx.drawImage(video, 0, 0, w, h)
|
|
79
|
-
return featureFromImageData(ctx.getImageData(0, 0, w, h))
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* @param {string} videoUrl
|
|
84
|
-
* @param {{
|
|
85
|
-
* threshold?: number,
|
|
86
|
-
* minGapSec?: number,
|
|
87
|
-
* thumbWidth?: number,
|
|
88
|
-
* onProgress?: (info: object) => void,
|
|
89
|
-
* signal?: AbortSignal,
|
|
90
|
-
* }} [options]
|
|
91
|
-
* @returns {Promise<{ start: number, end: number, score: number, fps: number, scanned: number }>}
|
|
92
|
-
*/
|
|
93
|
-
export async function detectFirstCycle(videoUrl, options = {}) {
|
|
94
|
-
const threshold = Math.min(0.999, Math.max(0.5, Number(options.threshold) || 0.98))
|
|
95
|
-
const minGapSec = Math.max(0.05, Number(options.minGapSec) || 0.4)
|
|
96
|
-
const thumbWidth = Math.max(16, Math.round(Number(options.thumbWidth) || 96))
|
|
97
|
-
const onProgress = typeof options.onProgress === 'function' ? options.onProgress : null
|
|
98
|
-
const signal = options.signal
|
|
99
|
-
|
|
100
|
-
const video = document.createElement('video')
|
|
101
|
-
video.muted = true
|
|
102
|
-
video.playsInline = true
|
|
103
|
-
video.preload = 'auto'
|
|
104
|
-
video.crossOrigin = 'anonymous'
|
|
105
|
-
|
|
106
|
-
const canvas = document.createElement('canvas')
|
|
107
|
-
const ctx = canvas.getContext('2d', { willReadFrequently: true })
|
|
108
|
-
if (!ctx) throw new Error('无法创建 canvas')
|
|
109
|
-
|
|
110
|
-
try {
|
|
111
|
-
const loaded = waitEvent(video, 'loadedmetadata', { signal })
|
|
112
|
-
video.src = videoUrl
|
|
113
|
-
video.load()
|
|
114
|
-
await loaded
|
|
115
|
-
if (!video.videoWidth || !Number.isFinite(video.duration) || video.duration <= 0) {
|
|
116
|
-
throw new Error('无法读取视频元数据')
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const duration = video.duration
|
|
120
|
-
const step = 1 / 24
|
|
121
|
-
const minT = Math.min(duration - step, minGapSec)
|
|
122
|
-
if (!(minT > step)) {
|
|
123
|
-
throw new Error('视频太短,无法提取周期')
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
await seekVideo(video, 0, signal)
|
|
127
|
-
// 部分浏览器 seek(0) 后需一帧稳定
|
|
128
|
-
await new Promise((r) => requestAnimationFrame(() => requestAnimationFrame(r)))
|
|
129
|
-
const ref = drawFeature(video, canvas, ctx, thumbWidth)
|
|
130
|
-
|
|
131
|
-
let scanned = 0
|
|
132
|
-
for (let t = minT; t < duration - 1e-4; t += step) {
|
|
133
|
-
if (signal?.aborted) throw new DOMException('Aborted', 'AbortError')
|
|
134
|
-
await seekVideo(video, t, signal)
|
|
135
|
-
const feat = drawFeature(video, canvas, ctx, thumbWidth)
|
|
136
|
-
const score = nccScore(ref, feat)
|
|
137
|
-
scanned += 1
|
|
138
|
-
onProgress?.({
|
|
139
|
-
time: t,
|
|
140
|
-
score,
|
|
141
|
-
scanned,
|
|
142
|
-
duration,
|
|
143
|
-
threshold,
|
|
144
|
-
})
|
|
145
|
-
if (score >= threshold) {
|
|
146
|
-
return {
|
|
147
|
-
start: 0,
|
|
148
|
-
end: Math.min(t, duration),
|
|
149
|
-
score,
|
|
150
|
-
fps: 24,
|
|
151
|
-
scanned,
|
|
152
|
-
threshold,
|
|
153
|
-
minGapSec,
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
throw new Error(
|
|
159
|
-
`未找到相似度 ≥ ${(threshold * 100).toFixed(0)}% 的周期终点(已扫 ${scanned} 帧,最短间隔 ${minGapSec}s)`,
|
|
160
|
-
)
|
|
161
|
-
} finally {
|
|
162
|
-
video.pause()
|
|
163
|
-
video.removeAttribute('src')
|
|
164
|
-
video.load()
|
|
165
|
-
}
|
|
166
|
-
}
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 智能切分:从一张含多主体的图中提取连通区域,按阅读顺序返回裁切 dataURL。
|
|
3
|
-
* 纯浏览器 Canvas,无外部依赖。
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
function isForeground(r, g, b, a, bg) {
|
|
7
|
-
if (a < 24) return false
|
|
8
|
-
// 相对背景色差够大才算前景(兼容白底 / 棋盘格近似色)
|
|
9
|
-
const dr = r - bg.r
|
|
10
|
-
const dg = g - bg.g
|
|
11
|
-
const db = b - bg.b
|
|
12
|
-
const dist = Math.sqrt(dr * dr + dg * dg + db * db)
|
|
13
|
-
return dist > 28 || a < 250 && a > 24
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function sampleBackground(data, w, h) {
|
|
17
|
-
// 取四角均值作为背景估计
|
|
18
|
-
const pts = [
|
|
19
|
-
[0, 0],
|
|
20
|
-
[w - 1, 0],
|
|
21
|
-
[0, h - 1],
|
|
22
|
-
[w - 1, h - 1],
|
|
23
|
-
[Math.floor(w / 2), 0],
|
|
24
|
-
[0, Math.floor(h / 2)],
|
|
25
|
-
]
|
|
26
|
-
let r = 0
|
|
27
|
-
let g = 0
|
|
28
|
-
let b = 0
|
|
29
|
-
let n = 0
|
|
30
|
-
for (const [x, y] of pts) {
|
|
31
|
-
const i = (y * w + x) * 4
|
|
32
|
-
r += data[i]
|
|
33
|
-
g += data[i + 1]
|
|
34
|
-
b += data[i + 2]
|
|
35
|
-
n += 1
|
|
36
|
-
}
|
|
37
|
-
return { r: r / n, g: g / n, b: b / n }
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function loadImageElement(url) {
|
|
41
|
-
return new Promise((resolve, reject) => {
|
|
42
|
-
const img = new Image()
|
|
43
|
-
img.crossOrigin = 'anonymous'
|
|
44
|
-
img.onload = () => resolve(img)
|
|
45
|
-
img.onerror = () => reject(new Error('图片加载失败'))
|
|
46
|
-
img.src = url
|
|
47
|
-
})
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* @param {string} imageUrl
|
|
52
|
-
* @returns {Promise<string[]>} PNG dataURL 列表(至少 2 张才有意义;找不到则空数组)
|
|
53
|
-
*/
|
|
54
|
-
export async function smartSplitImage(imageUrl) {
|
|
55
|
-
const img = await loadImageElement(imageUrl)
|
|
56
|
-
const maxSide = 1600
|
|
57
|
-
const scale = Math.min(1, maxSide / Math.max(img.naturalWidth, img.naturalHeight))
|
|
58
|
-
const w = Math.max(1, Math.round(img.naturalWidth * scale))
|
|
59
|
-
const h = Math.max(1, Math.round(img.naturalHeight * scale))
|
|
60
|
-
|
|
61
|
-
const canvas = document.createElement('canvas')
|
|
62
|
-
canvas.width = w
|
|
63
|
-
canvas.height = h
|
|
64
|
-
const ctx = canvas.getContext('2d', { willReadFrequently: true })
|
|
65
|
-
ctx.drawImage(img, 0, 0, w, h)
|
|
66
|
-
const { data } = ctx.getImageData(0, 0, w, h)
|
|
67
|
-
const bg = sampleBackground(data, w, h)
|
|
68
|
-
|
|
69
|
-
const visited = new Uint8Array(w * h)
|
|
70
|
-
const boxes = []
|
|
71
|
-
const minArea = Math.max(64, Math.floor((w * h) / 800))
|
|
72
|
-
const queue = new Int32Array(w * h)
|
|
73
|
-
|
|
74
|
-
for (let y = 0; y < h; y += 1) {
|
|
75
|
-
for (let x = 0; x < w; x += 1) {
|
|
76
|
-
const start = y * w + x
|
|
77
|
-
if (visited[start]) continue
|
|
78
|
-
const i0 = start * 4
|
|
79
|
-
if (!isForeground(data[i0], data[i0 + 1], data[i0 + 2], data[i0 + 3], bg)) {
|
|
80
|
-
visited[start] = 1
|
|
81
|
-
continue
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
let qh = 0
|
|
85
|
-
let qt = 0
|
|
86
|
-
queue[qt++] = start
|
|
87
|
-
visited[start] = 1
|
|
88
|
-
let minX = x
|
|
89
|
-
let maxX = x
|
|
90
|
-
let minY = y
|
|
91
|
-
let maxY = y
|
|
92
|
-
let area = 0
|
|
93
|
-
|
|
94
|
-
while (qh < qt) {
|
|
95
|
-
const p = queue[qh++]
|
|
96
|
-
const px = p % w
|
|
97
|
-
const py = (p / w) | 0
|
|
98
|
-
area += 1
|
|
99
|
-
if (px < minX) minX = px
|
|
100
|
-
if (px > maxX) maxX = px
|
|
101
|
-
if (py < minY) minY = py
|
|
102
|
-
if (py > maxY) maxY = py
|
|
103
|
-
|
|
104
|
-
const neighbors = [p - 1, p + 1, p - w, p + w]
|
|
105
|
-
for (const n of neighbors) {
|
|
106
|
-
if (n < 0 || n >= w * h) continue
|
|
107
|
-
if (visited[n]) continue
|
|
108
|
-
const nx = n % w
|
|
109
|
-
const ny = (n / w) | 0
|
|
110
|
-
// 防跨行左右邻居
|
|
111
|
-
if (Math.abs(nx - px) + Math.abs(ny - py) !== 1) continue
|
|
112
|
-
const ni = n * 4
|
|
113
|
-
if (!isForeground(data[ni], data[ni + 1], data[ni + 2], data[ni + 3], bg)) {
|
|
114
|
-
visited[n] = 1
|
|
115
|
-
continue
|
|
116
|
-
}
|
|
117
|
-
visited[n] = 1
|
|
118
|
-
queue[qt++] = n
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const bw = maxX - minX + 1
|
|
123
|
-
const bh = maxY - minY + 1
|
|
124
|
-
if (area >= minArea && bw >= 8 && bh >= 8) {
|
|
125
|
-
// 过滤几乎铺满整图的单一大块(切不出多图)
|
|
126
|
-
if (bw * bh < w * h * 0.92) {
|
|
127
|
-
boxes.push({ minX, minY, maxX, maxY, area })
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
if (boxes.length < 2) return []
|
|
134
|
-
|
|
135
|
-
// 阅读顺序:先上后下,同行按左到右
|
|
136
|
-
const rowTol = Math.max(12, Math.floor(h * 0.03))
|
|
137
|
-
boxes.sort((a, b) => {
|
|
138
|
-
if (Math.abs(a.minY - b.minY) > rowTol) return a.minY - b.minY
|
|
139
|
-
return a.minX - b.minX
|
|
140
|
-
})
|
|
141
|
-
|
|
142
|
-
// 原图尺寸裁切(更高清),并统一到完全相同的画布尺寸,保证序列播放不抖动
|
|
143
|
-
const inv = 1 / scale
|
|
144
|
-
const crops = []
|
|
145
|
-
for (const box of boxes) {
|
|
146
|
-
const sx = Math.max(0, Math.floor(box.minX * inv))
|
|
147
|
-
const sy = Math.max(0, Math.floor(box.minY * inv))
|
|
148
|
-
const sw = Math.min(img.naturalWidth - sx, Math.ceil((box.maxX - box.minX + 1) * inv))
|
|
149
|
-
const sh = Math.min(img.naturalHeight - sy, Math.ceil((box.maxY - box.minY + 1) * inv))
|
|
150
|
-
if (sw < 4 || sh < 4) continue
|
|
151
|
-
crops.push({ sx, sy, sw, sh })
|
|
152
|
-
}
|
|
153
|
-
if (crops.length < 2) return []
|
|
154
|
-
|
|
155
|
-
// 统一尺寸:先按最高补上方白边,再按最宽左右均匀补白边
|
|
156
|
-
const frameW = Math.max(...crops.map((c) => c.sw))
|
|
157
|
-
const frameH = Math.max(...crops.map((c) => c.sh))
|
|
158
|
-
const full = document.createElement('canvas')
|
|
159
|
-
full.width = frameW
|
|
160
|
-
full.height = frameH
|
|
161
|
-
const fctx = full.getContext('2d')
|
|
162
|
-
|
|
163
|
-
const out = []
|
|
164
|
-
for (const crop of crops) {
|
|
165
|
-
fctx.fillStyle = '#ffffff'
|
|
166
|
-
fctx.fillRect(0, 0, frameW, frameH)
|
|
167
|
-
const padTop = frameH - crop.sh
|
|
168
|
-
const padX = frameW - crop.sw
|
|
169
|
-
const dx = Math.floor(padX / 2)
|
|
170
|
-
const dy = padTop
|
|
171
|
-
fctx.drawImage(
|
|
172
|
-
img,
|
|
173
|
-
crop.sx,
|
|
174
|
-
crop.sy,
|
|
175
|
-
crop.sw,
|
|
176
|
-
crop.sh,
|
|
177
|
-
dx,
|
|
178
|
-
dy,
|
|
179
|
-
crop.sw,
|
|
180
|
-
crop.sh,
|
|
181
|
-
)
|
|
182
|
-
out.push(full.toDataURL('image/png'))
|
|
183
|
-
}
|
|
184
|
-
return out
|
|
185
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: game-asset-image-generator
|
|
3
|
-
description: 指导 Agent 正确使用 MCP 提供的各类游戏素材生成与编辑工具。凡涉及生成或编辑游戏概念图和游戏素材(包括图片、模型、视频等),都必须先调用本技能,并确保最终产物按规范保存到当前工作区的 assets/ 目录。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# 游戏素材生成
|
|
7
|
-
|
|
8
|
-
## 工作区素材准则
|
|
9
|
-
|
|
10
|
-
必须遵守以下规则:
|
|
11
|
-
|
|
12
|
-
1. 所有 AI 生成的图片和视频都必须保存到当前工作区根目录的 `assets/` 文件夹。不得只保留远程 URL;即使运行时不直接读取本地文件,`assets/` 中仍必须存在对应素材文件。
|
|
13
|
-
2. evomeme平台游戏使用的所有素材都必须把 TOS URL 写入项目配置(通常为 `public/config.json`)。游戏代码必须通过配置项读取素材 URL,禁止从 `assets/` 导入、读取或拼接素材路径。
|
|
14
|
-
|
|
15
|
-
调用素材工具时,始终把当前工作区根目录的绝对路径传给 `workspace_dir`,确保工具把返回文件保存到正确的 `assets/` 文件夹。
|
|
16
|
-
|
|
17
|
-
## 素材工具
|
|
18
|
-
|
|
19
|
-
当前提供两个素材工具:
|
|
20
|
-
|
|
21
|
-
- `evomeme_generate_game_image`:根据文本提示生成图片。
|
|
22
|
-
- `evomeme_cutout_game_image`:对已有图片做透明背景抠图。
|
|
23
|
-
|
|
24
|
-
两个工具都会提交异步任务并自行轮询,直到任务成功或失败。成功后,工具会下载最终 TOS 图片到 `<workspace_dir>/assets/`,同时返回文本元数据和 MCP `image` 多模态内容块。
|
|
25
|
-
|
|
26
|
-
## 并行调用
|
|
27
|
-
|
|
28
|
-
生成多项素材时,尽可能通过异步 MCP 调用并行发起互不依赖的任务,不要逐项等待一个任务完成后才调用下一个。并行前为每项素材固定提示词、参数和标识;每个调用都显式传入相同的正确 `workspace_dir`,结果返回后依据任务与素材的对应关系分别记录 `job_id`、TOS URL 和本地文件。
|
|
29
|
-
|
|
30
|
-
存在输出依赖的步骤必须保持顺序,例如抠图必须等待待处理图片生成完成,后一张图片必须引用前一张结果时也要先取得有效 URL。并行只用于依赖关系允许同时执行的任务;单个 MCP 工具内部的轮询等待不应阻塞其他独立素材任务的发起。
|
|
31
|
-
|
|
32
|
-
## `evomeme_generate_game_image`
|
|
33
|
-
|
|
34
|
-
根据提示词生成游戏图片。
|
|
35
|
-
|
|
36
|
-
生成小石头、独立云朵、固定姿态敌人等无需动画或动态特效的单个静态游戏元素时,使用 `image_type=asset`,并且必须先读取并遵循 [静态游戏元素提示词指南](references/static-game-assets.md)。如果存在游戏概念图或当前元素的设定概念图,必须按该指南将概念图作为 `reference_image_url` 使用。该指南不适用于背景、视差层、tileset、动画、特效、视频或模型。
|
|
37
|
-
|
|
38
|
-
生成铺满游戏画面的完整单层背景时,使用 `image_type=background`,并且必须先读取并遵循 [游戏背景提示词指南](references/background.md)。如果存在游戏概念图或当前场景的设定概念图,必须按该指南将概念图作为 `reference_image_url` 使用。
|
|
39
|
-
|
|
40
|
-
### 入参
|
|
41
|
-
|
|
42
|
-
| 参数 | 必填 | 类型/可选值 | 说明 |
|
|
43
|
-
| --- | --- | --- | --- |
|
|
44
|
-
| `prompt` | 是 | `string` | 生图提示词。 |
|
|
45
|
-
| `image_type` | 否 | `asset`、`background`、`parallax background`、`tileset` | 图片类型,默认 `background`。`asset`、`parallax background`、`tileset` 会自动抠图。 |
|
|
46
|
-
| `size` | 否 | `2048x2048`、`1728x2304`、`2304x1728`、`2560x1440`、`1440x2560`、`1664x2496`、`2496x1664`、`3024x1296` | 输出尺寸,默认 `2048x2048`。 |
|
|
47
|
-
| `reference_image_url` | 否 | `string` | 参考图片的可访问 URL。 |
|
|
48
|
-
| `image_model` | 否 | `asset-lite`、`asset-pro` | 生图模型,默认 `asset-lite`。 |
|
|
49
|
-
| `workspace_dir` | 否 | `string` | Agent 当前工作区根目录的绝对路径。为满足素材准则,调用时必须显式传入。 |
|
|
50
|
-
|
|
51
|
-
### 出参
|
|
52
|
-
|
|
53
|
-
成功结果的 `content` 包含:
|
|
54
|
-
|
|
55
|
-
1. `content[0]`:文本元数据,包括:
|
|
56
|
-
- `job_id`:异步任务 ID。
|
|
57
|
-
- `tos_url`:最终图片的 TOS URL。
|
|
58
|
-
- `asset_url`:与 `tos_url` 相同,便于兼容已有配置逻辑。
|
|
59
|
-
- `status`:终态,成功时为 `SUCCEEDED`。
|
|
60
|
-
- `attempts`:已执行次数与最大尝试次数。
|
|
61
|
-
- `size`:服务端确认的图片尺寸。
|
|
62
|
-
- `image_type`:服务端确认的图片类型。
|
|
63
|
-
- `has_transparent_background`:是否具有透明背景。
|
|
64
|
-
- `local_path`:下载到当前工作区 `assets/` 的本地绝对路径。
|
|
65
|
-
- `multimodal_base64`:Base64 所在内容块及字符数说明。
|
|
66
|
-
- `mime_type`:图片 MIME 类型。
|
|
67
|
-
2. `content[1]`:MCP 多模态图片内容块:
|
|
68
|
-
- `type: "image"`
|
|
69
|
-
- `data`:不带 Data URL 前缀的 Base64 图片数据。
|
|
70
|
-
- `mimeType`:图片 MIME 类型。
|
|
71
|
-
|
|
72
|
-
本地文件名取最终 TOS URL 路径的最后一段,并清理操作系统不允许的字符。失败时结果带 `isError: true`,文本内容为失败或超时信息。
|
|
73
|
-
|
|
74
|
-
## `evomeme_cutout_game_image`
|
|
75
|
-
|
|
76
|
-
把已有图片处理为透明背景图片。
|
|
77
|
-
|
|
78
|
-
### 入参
|
|
79
|
-
|
|
80
|
-
| 参数 | 必填 | 类型 | 说明 |
|
|
81
|
-
| --- | --- | --- | --- |
|
|
82
|
-
| `image_url` | 是 | `string` | 待抠图原图的可访问 URL。 |
|
|
83
|
-
| `workspace_dir` | 否 | `string` | Agent 当前工作区根目录的绝对路径。为满足素材准则,调用时必须显式传入。 |
|
|
84
|
-
|
|
85
|
-
### 出参
|
|
86
|
-
|
|
87
|
-
成功结果的 `content` 包含:
|
|
88
|
-
|
|
89
|
-
1. `content[0]`:文本元数据,包括:
|
|
90
|
-
- `job_id`:异步任务 ID。
|
|
91
|
-
- `tos_url`:最终抠图结果的 TOS URL。
|
|
92
|
-
- `asset_url`:与 `tos_url` 相同,便于兼容已有配置逻辑。
|
|
93
|
-
- `status`:终态,成功时为 `SUCCEEDED`。
|
|
94
|
-
- `attempts`:已执行次数与最大尝试次数。
|
|
95
|
-
- `has_transparent_background`:透明背景标记,成功结果通常为 `true`。
|
|
96
|
-
- `local_path`:下载到当前工作区 `assets/` 的本地绝对路径。
|
|
97
|
-
- `multimodal_base64`:Base64 所在内容块及字符数说明。
|
|
98
|
-
- `mime_type`:图片 MIME 类型。
|
|
99
|
-
2. `content[1]`:MCP 多模态图片内容块:
|
|
100
|
-
- `type: "image"`
|
|
101
|
-
- `data`:不带 Data URL 前缀的 Base64 图片数据。
|
|
102
|
-
- `mimeType`:图片 MIME 类型。
|
|
103
|
-
|
|
104
|
-
本地文件名取最终 TOS URL 路径的最后一段,并清理操作系统不允许的字符。失败时结果带 `isError: true`,文本内容为失败或超时信息。
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: game-audio
|
|
3
|
-
description: 将已托管的 BGM / SFX 接入 Phaser / Three.js 运行时配置。在游戏需要可用的 CDN 音频 URL、配置绑定或加载器接入,且不在本地生成音频时使用。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# 游戏音频
|
|
7
|
-
|
|
8
|
-
## 概述
|
|
9
|
-
|
|
10
|
-
将此技能用于已托管在 CDN 或对象存储中的游戏音频。按参考文档中的约定将对象键拼成可加载的 HTTPS URL,并写入 `public/config.json` 或运行时加载器。
|
|
11
|
-
|
|
12
|
-
**不生成新音频**。如果所需音频对象在 CDN 中不存在且用户未提供 URL,停止并请用户确认对象键或更新参考清单,不得编造路径。
|
|
13
|
-
|
|
14
|
-
## 何时使用此技能
|
|
15
|
-
|
|
16
|
-
- 设计文档、配置文件或用户指定了某首 BGM 或 SFX 的文件名/键,需要给出可加载 URL
|
|
17
|
-
- 填写 `bgm_main`、`audio_bgm_gameplay`、`audio_sfx_click`、`backgroundMusic`、`src`、`url` 等音频字段
|
|
18
|
-
- 用户明确说音频来自公司 CDN、对象存储或固定托管 URL
|
|
19
|
-
- 接入点击音、拾取音、碰撞音、射击音、爆炸音、成功/失败音等游戏反馈音效
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## 阅读顺序
|
|
24
|
-
|
|
25
|
-
1. 读完本节后,根据任务类型选择并**打开对应参考文档**,不得在未读参考的情况下拼接 URL
|
|
26
|
-
2. **BGM(循环背景音乐)**:`references/bgm-cdn.md`
|
|
27
|
-
3. **SFX(短促触发音效)**:`references/sfx-cdn.md`
|
|
28
|
-
4. 同时涉及 BGM 和 SFX 时,读取两个参考
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## BGM 路由
|
|
33
|
-
|
|
34
|
-
- 加载 BGM 参考文档,从中提取 CDN 根、路径前缀和曲目清单
|
|
35
|
-
- 用于循环背景音乐,对应配置键如 `bgm_main`、`audio_bgm_gameplay`、`audio_bgm_menu`、`backgroundMusic`
|
|
36
|
-
- 曲目不在清单中时,不得编造路径;请用户确认对象键后再配置
|
|
37
|
-
|
|
38
|
-
推荐技能:`game-audio`;BGM 参考 `references/bgm-cdn.md`。
|
|
39
|
-
|
|
40
|
-
## SFX 路由
|
|
41
|
-
|
|
42
|
-
- 加载 `references/sfx-cdn.md`,提取 CDN 根和文件名规则
|
|
43
|
-
- 用于短促触发音效,对应配置键如 `audio_sfx_click`、`audio_sfx_pickup`、`audio_sfx_impact`、`audio_sfx_shoot`、`audio_sfx_explosion`、`audio_sfx_success`、`audio_sfx_fail`
|
|
44
|
-
- 高频触发音效(脚步、拖动、持续碰撞)作为节流或循环播放处理,不逐帧重触发
|
|
45
|
-
|
|
46
|
-
推荐技能:`game-audio`;SFX 参考 `references/sfx-cdn.md`。
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## 工作流
|
|
51
|
-
|
|
52
|
-
1. 确认任务类型:BGM、SFX 或两者
|
|
53
|
-
2. 读取对应参考文档,提取 CDN 根、必需前缀和文件名规则
|
|
54
|
-
3. 从用户、策划案、配置表或参考清单中找到确切的对象键
|
|
55
|
-
4. 拼出完整 HTTPS URL(使用参考中的 CDN 根和前缀,不额外编码整个 URL)
|
|
56
|
-
5. 将 URL 写入对应配置键、清单或运行时加载代码,保留项目现有音频架构
|
|
57
|
-
6. 验证控制标志:BGM 遵守 `audio_music_enabled`,SFX 遵守 `audio_sfx_enabled`;游戏内循环不泄漏到菜单或结算页
|
|
58
|
-
|
|
59
|
-
### 写入 2D 项目配置(`public/config.json`)
|
|
60
|
-
|
|
61
|
-
```json
|
|
62
|
-
"bgm_main": { "value": "https://...", "type": "audio", "label": "背景音乐" },
|
|
63
|
-
"sfx_jump": { "value": "https://...", "type": "audio", "label": "跳跃音效" }
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### 写入 3D 项目配置
|
|
67
|
-
|
|
68
|
-
按项目现有配置结构写入,config 键名遵循 `audio_bgm_*` / `audio_sfx_*` 命名规范。
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## 护栏
|
|
73
|
-
|
|
74
|
-
- 不编造文件名、CDN 域名、目录前缀或百分比编码片段
|
|
75
|
-
- 不静默替换 BGM 和 SFX 的根路径
|
|
76
|
-
- 不以生成音频为由加载已移除的本地音频生成技能
|
|
77
|
-
- 对象键缺失或用户未提供完整 URL 时,停止并要求用户提供或更新参考,不猜测
|
|
78
|
-
|
|
79
|
-
## References
|
|
80
|
-
|
|
81
|
-
- BGM CDN 清单:`references/bgm-cdn.md`
|
|
82
|
-
- SFX CDN 清单:`references/sfx-cdn.md`
|