evomeme 0.1.9 → 0.1.10

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.
Files changed (405) hide show
  1. package/dist/canvas-public/app.js +509 -5999
  2. package/dist/canvas-public/assets/presets/catalog.json +47 -0
  3. package/dist/canvas-public/assets/presets/tiles/A_01_CaoDi.png +0 -0
  4. package/dist/canvas-public/assets/presets/tiles/A_02_ShaMo.png +0 -0
  5. package/dist/canvas-public/assets/presets/tiles/A_03_TianKong.png +0 -0
  6. package/dist/canvas-public/assets/presets/tiles/A_04_ShuiBo.png +0 -0
  7. package/dist/canvas-public/assets/presets/tiles/A_05_HaiMian.png +0 -0
  8. package/dist/canvas-public/assets/presets/tiles/A_06_MuDiBan.png +0 -0
  9. package/dist/canvas-public/assets/presets/tiles/A_07_ShiZhuan.png +0 -0
  10. package/dist/canvas-public/assets/presets/tiles/A_08_AnRongYan.png +0 -0
  11. package/dist/canvas-public/assets/presets/tiles/A_09_QingTaiShi.png +0 -0
  12. package/dist/canvas-public/assets/presets/tiles/A_10_ShenHai.png +0 -0
  13. package/dist/canvas-public/assets/presets/tiles/A_11_HuiYanShi.png +0 -0
  14. package/dist/canvas-public/assets/presets/tiles/A_12_HongTu.png +0 -0
  15. package/dist/canvas-public/assets/presets/tiles/A_13_GengDi.png +0 -0
  16. package/dist/canvas-public/assets/presets/tiles/A_14_HuoShanYan.png +0 -0
  17. package/dist/canvas-public/assets/presets/tiles/A_15_NiTu.png +0 -0
  18. package/dist/canvas-public/assets/presets/tiles/A_16_HuangSha.png +0 -0
  19. package/dist/canvas-public/assets/presets/tiles/A_17_CongLin.png +0 -0
  20. package/dist/canvas-public/assets/presets/tiles/A_18_ZiYanShi.png +0 -0
  21. package/dist/canvas-public/assets/presets/tiles/A_19_MoGuTu.png +0 -0
  22. package/dist/canvas-public/assets/presets/tiles/A_20_HuaDian.png +0 -0
  23. package/dist/canvas-public/assets/presets/tiles/A_21_HaiLang.png +0 -0
  24. package/dist/canvas-public/assets/presets/tiles/A_22_GanTu.png +0 -0
  25. package/dist/canvas-public/assets/presets/tiles/A_23_QingTaiShiBan.png +0 -0
  26. package/dist/canvas-public/assets/presets/tiles/A_24_XingKong.png +0 -0
  27. package/dist/canvas-public/assets/presets/tiles/A_25_MoFaFuWen.png +0 -0
  28. package/dist/canvas-public/assets/presets/tiles/A_26_ShiTuYeDi.png +0 -0
  29. package/dist/canvas-public/assets/presets/tiles/A_27_LanZhuan.png +0 -0
  30. package/dist/canvas-public/assets/presets/tiles/A_28_HongZhuan.png +0 -0
  31. package/dist/canvas-public/assets/presets/tiles/A_29_YueQiu.png +0 -0
  32. package/dist/canvas-public/assets/presets/tiles/A_30_JinShuGe.png +0 -0
  33. package/dist/canvas-public/assets/presets/tiles/A_31_JinShuJingGai.png +0 -0
  34. package/dist/canvas-public/assets/presets/tiles/A_32_ShuZiChuang.png +0 -0
  35. package/dist/canvas-public/canvas/actions.js +143 -0
  36. package/dist/canvas-public/canvas/camera.js +28 -0
  37. package/dist/canvas-public/canvas/chrome.js +13 -0
  38. package/dist/canvas-public/canvas/data.js +123 -0
  39. package/dist/canvas-public/canvas/dependencies.js +19 -0
  40. package/dist/canvas-public/canvas/interactions.js +544 -0
  41. package/dist/canvas-public/canvas/panel-resize.js +5 -0
  42. package/dist/canvas-public/canvas/renderer.js +297 -0
  43. package/dist/canvas-public/canvas/selection.js +62 -0
  44. package/dist/canvas-public/canvas/serialization.js +118 -0
  45. package/dist/canvas-public/canvas/sync.js +202 -0
  46. package/dist/canvas-public/core/api.js +27 -0
  47. package/dist/canvas-public/core/feature-registry.js +29 -0
  48. package/dist/canvas-public/core/feature-state.js +228 -0
  49. package/dist/canvas-public/core/layout.js +133 -0
  50. package/dist/canvas-public/core/operations.js +38 -0
  51. package/dist/canvas-public/core/project.js +203 -0
  52. package/dist/canvas-public/core/state.js +27 -0
  53. package/dist/canvas-public/dialogs/context-menu.js +118 -0
  54. package/dist/canvas-public/elements/base.js +100 -0
  55. package/dist/canvas-public/elements/connections.js +105 -0
  56. package/dist/canvas-public/elements/drag.js +53 -0
  57. package/dist/canvas-public/elements/image.js +259 -0
  58. package/dist/canvas-public/elements/loading-recovery.js +5 -0
  59. package/dist/canvas-public/elements/loading.js +21 -0
  60. package/dist/canvas-public/elements/map.js +64 -0
  61. package/dist/canvas-public/elements/registry.js +58 -0
  62. package/dist/canvas-public/elements/replacement.js +78 -0
  63. package/dist/canvas-public/elements/resize.js +210 -0
  64. package/dist/canvas-public/elements/task-pipeline.js +234 -0
  65. package/dist/canvas-public/elements/types.js +21 -0
  66. package/dist/canvas-public/elements/ui.js +14 -0
  67. package/dist/canvas-public/elements/video.js +64 -0
  68. package/dist/canvas-public/features/assets/local-assets.js +72 -0
  69. package/dist/canvas-public/features/assets/official-assets.js +538 -0
  70. package/dist/canvas-public/features/editing/canvas-size.js +532 -0
  71. package/dist/canvas-public/features/editing/color-key.js +469 -0
  72. package/dist/canvas-public/features/editing/cutout.js +20 -0
  73. package/dist/canvas-public/features/editing/interactive-image-editing.js +981 -0
  74. package/dist/canvas-public/features/editing/layer-decomposition.js +44 -0
  75. package/dist/canvas-public/features/editing/manual-split.js +114 -0
  76. package/dist/canvas-public/features/editing/perfect-pixel.js +336 -0
  77. package/dist/canvas-public/features/editing/scroll-preview.js +129 -0
  78. package/dist/canvas-public/features/editing/scroll-seam-elimination.js +71 -0
  79. package/dist/canvas-public/features/editing/seam-elimination.js +46 -0
  80. package/dist/canvas-public/features/editing/smart-split.js +48 -0
  81. package/dist/canvas-public/features/editing/source-preview.js +43 -0
  82. package/dist/canvas-public/features/editing/video-cycle.js +49 -0
  83. package/dist/canvas-public/features/editing/video-frames.js +35 -0
  84. package/dist/canvas-public/features/frame-editor/frame-editing.js +755 -0
  85. package/dist/canvas-public/features/frame-editor/frame-model.js +63 -0
  86. package/dist/canvas-public/features/frame-editor/playback.js +83 -0
  87. package/dist/canvas-public/features/frame-editor/preview.js +149 -0
  88. package/dist/canvas-public/features/generation/animation.js +272 -0
  89. package/dist/canvas-public/features/generation/asset-batch.js +102 -0
  90. package/dist/canvas-public/features/generation/direction.js +163 -0
  91. package/dist/canvas-public/features/generation/fields.js +73 -0
  92. package/dist/canvas-public/features/generation/game-ui.js +64 -0
  93. package/dist/canvas-public/features/generation/image.js +83 -0
  94. package/dist/canvas-public/features/generation/scroll-image.js +157 -0
  95. package/dist/canvas-public/features/generation/seamless-tile.js +52 -0
  96. package/dist/canvas-public/features/generation/tile-transition-atlas.js +79 -0
  97. package/dist/canvas-public/features/generation/video.js +105 -0
  98. package/dist/canvas-public/features/map/creation.js +73 -0
  99. package/dist/canvas-public/features/map/tile-map-editor.js +2518 -0
  100. package/dist/canvas-public/features/registry.js +59 -0
  101. package/dist/canvas-public/index.html +84 -259
  102. package/dist/canvas-public/inspector/controls.js +49 -0
  103. package/dist/canvas-public/inspector/frame-preview.js +11 -0
  104. package/dist/canvas-public/inspector/inspector.js +190 -0
  105. package/dist/canvas-public/inspector/media-inspector.js +517 -0
  106. package/dist/canvas-public/inspector/media-preview.js +56 -0
  107. package/dist/canvas-public/inspector/number-stepper.js +96 -0
  108. package/dist/canvas-public/inspector/resize.js +88 -0
  109. package/dist/canvas-public/inspector/scroll-preview.js +11 -0
  110. package/dist/canvas-public/inspector/ui-inspector.js +14 -0
  111. package/dist/canvas-public/language/en-US.js +1059 -0
  112. package/dist/canvas-public/language/index.js +79 -0
  113. package/dist/canvas-public/language/zh-CN.js +1059 -0
  114. package/dist/canvas-public/map/export.js +9 -0
  115. package/dist/canvas-public/map/inspector.js +8 -0
  116. package/dist/canvas-public/map/model.js +409 -0
  117. package/dist/canvas-public/map/tile-map-editor.js +2 -0
  118. package/dist/canvas-public/media/metadata.js +183 -0
  119. package/dist/canvas-public/media/support.js +183 -0
  120. package/dist/canvas-public/styles/base.css +49 -0
  121. package/dist/canvas-public/styles/canvas.css +127 -0
  122. package/dist/canvas-public/styles/controls.css +203 -0
  123. package/dist/canvas-public/styles/dialogs.css +521 -0
  124. package/dist/canvas-public/styles/feature-form.css +409 -0
  125. package/dist/canvas-public/styles/inspector.css +441 -0
  126. package/dist/canvas-public/styles/layout.css +344 -0
  127. package/dist/canvas-public/styles/map.css +11 -0
  128. package/dist/canvas-public/styles/nodes.css +636 -0
  129. package/dist/canvas-public/styles.css +9 -2247
  130. package/dist/canvas-public/ui/controls.js +222 -0
  131. package/dist/canvas-public/ui/elements.js +9 -0
  132. package/dist/canvas-public/ui/feature-controller.js +296 -0
  133. package/dist/canvas-public/ui/feature-form.js +401 -0
  134. package/dist/canvas-public/ui/settings.js +83 -0
  135. package/dist/canvas-public/ui/toolbar.js +55 -0
  136. package/dist/canvas-public/vendor/pixi-tilemap.js +126 -0
  137. package/dist/canvas-public/vendor/pixi.min.js +2340 -0
  138. package/dist/canvas-public/workers/color-key-worker.js +289 -0
  139. package/dist/canvas-public/workers/perfect-pixel-worker.js +510 -0
  140. package/dist/index.js +42236 -13382
  141. package/dist/skills/en-US/evomeme-canvas/SKILL.md +52 -0
  142. package/dist/skills/en-US/evomeme-canvas/agents/openai.yaml +7 -0
  143. package/dist/skills/en-US/evomeme-cloud-fs/SKILL.md +176 -0
  144. package/dist/skills/en-US/evomeme-cloud-fs/agents/openai.yaml +7 -0
  145. package/dist/skills/en-US/evomeme-cover/SKILL.md +132 -0
  146. package/dist/skills/en-US/evomeme-cover/agents/openai.yaml +7 -0
  147. package/dist/skills/en-US/evomeme-game-maker/SKILL.md +288 -0
  148. package/dist/skills/en-US/evomeme-game-maker/agents/openai.yaml +4 -0
  149. package/dist/skills/en-US/evomeme-login/SKILL.md +92 -0
  150. package/dist/skills/en-US/evomeme-login/agents/openai.yaml +7 -0
  151. package/dist/skills/en-US/evomeme-native-bridge-sdk/SKILL.md +286 -0
  152. package/dist/skills/en-US/evomeme-native-bridge-sdk/agents/openai.yaml +8 -0
  153. package/dist/skills/en-US/evomeme-tos-upload/SKILL.md +47 -0
  154. package/dist/skills/en-US/evomeme-tos-upload/agents/openai.yaml +5 -0
  155. package/dist/skills/en-US/evomeme-ui/SKILL.md +123 -0
  156. package/dist/skills/en-US/evomeme-ui/agents/openai.yaml +4 -0
  157. package/dist/skills/en-US/evomeme-ui/references/host-layout.md +69 -0
  158. package/dist/skills/en-US/game-art/SKILL.md +121 -0
  159. package/dist/skills/en-US/game-art/agents/openai.yaml +8 -0
  160. package/dist/skills/en-US/game-asset-align/SKILL.md +45 -0
  161. package/dist/skills/en-US/game-asset-align/agents/openai.yaml +8 -0
  162. package/dist/skills/en-US/game-asset-align/references/alignment-contract.md +61 -0
  163. package/dist/skills/en-US/game-asset-align/references/blender-scene-pipeline.md +45 -0
  164. package/dist/skills/en-US/game-asset-align/references/canonical-package.md +26 -0
  165. package/dist/skills/en-US/game-asset-align/references/engine-capabilities.md +14 -0
  166. package/dist/skills/en-US/game-asset-align/references/lightweight-review.md +32 -0
  167. package/dist/skills/en-US/game-asset-align/references/repair-policy.md +30 -0
  168. package/dist/skills/en-US/game-asset-align/references/tool-contract.md +39 -0
  169. package/dist/skills/en-US/game-asset-align/references/visual-review.md +26 -0
  170. package/dist/skills/en-US/game-asset-image-generator/SKILL.md +104 -0
  171. package/dist/skills/en-US/game-asset-image-generator/agents/openai.yaml +7 -0
  172. package/dist/skills/en-US/game-asset-image-generator/references/background.md +32 -0
  173. package/dist/skills/en-US/game-asset-image-generator/references/static-game-assets.md +38 -0
  174. package/dist/skills/en-US/game-audio/SKILL.md +82 -0
  175. package/dist/skills/en-US/game-audio/agents/openai.yaml +4 -0
  176. package/dist/skills/en-US/game-demo/SKILL.md +103 -0
  177. package/dist/skills/en-US/game-demo/agents/openai.yaml +7 -0
  178. package/dist/skills/en-US/game-maker/SKILL.md +111 -0
  179. package/dist/skills/en-US/game-maker/agents/openai.yaml +4 -0
  180. package/dist/skills/en-US/game-test/SKILL.md +58 -0
  181. package/dist/skills/en-US/game-test/agents/openai.yaml +7 -0
  182. package/dist/skills/en-US/game-ui/SKILL.md +177 -0
  183. package/dist/skills/en-US/game-ui/agents/openai.yaml +4 -0
  184. package/dist/skills/en-US/godot-3d-game/SKILL.md +39 -0
  185. package/dist/skills/en-US/godot-3d-game/agents/openai.yaml +8 -0
  186. package/dist/skills/en-US/godot-3d-game/references/alignment-gates.md +26 -0
  187. package/dist/skills/en-US/godot-3d-game/references/appearance-alignment.md +52 -0
  188. package/dist/skills/en-US/godot-3d-game/references/build-and-qa.md +22 -0
  189. package/dist/skills/en-US/godot-3d-game/references/canonical-asset-runtime.md +27 -0
  190. package/dist/skills/en-US/godot-3d-game/references/import-and-wrapper-scenes.md +20 -0
  191. package/dist/skills/en-US/godot-3d-game/references/physics-colliders.md +13 -0
  192. package/dist/skills/en-US/godot-3d-game/references/project-structure.md +22 -0
  193. package/dist/skills/en-US/godot-3d-game/references/skeleton-animation.md +16 -0
  194. package/dist/skills/en-US/phaser-2d-game/SKILL.md +127 -0
  195. package/dist/skills/en-US/phaser-2d-game/agents/openai.yaml +8 -0
  196. package/dist/skills/en-US/phaser-2d-game/references/engine-performance.md +64 -0
  197. package/dist/skills/en-US/phaser-2d-game/references/engine-physics.md +139 -0
  198. package/dist/skills/en-US/phaser-2d-game/references/engine-runtime.md +129 -0
  199. package/dist/skills/en-US/phaser-2d-game/references/engine-spritesheets.md +99 -0
  200. package/dist/skills/en-US/phaser-2d-game/references/engine-tilemaps.md +80 -0
  201. package/dist/skills/en-US/phaser-2d-game/references/file-structure.md +94 -0
  202. package/dist/skills/en-US/phaser-2d-graphics-builder/SKILL.md +68 -0
  203. package/dist/skills/en-US/phaser-2d-graphics-builder/agents/openai.yaml +7 -0
  204. package/dist/skills/en-US/threejs-3d-game/SKILL.md +117 -0
  205. package/dist/skills/en-US/threejs-3d-game/agents/openai.yaml +7 -0
  206. package/dist/skills/en-US/threejs-3d-game/references/engine-asset-pipeline.md +153 -0
  207. package/dist/skills/en-US/threejs-3d-game/references/engine-audio.md +70 -0
  208. package/dist/skills/en-US/threejs-3d-game/references/engine-input-camera.md +84 -0
  209. package/dist/skills/en-US/threejs-3d-game/references/engine-performance.md +96 -0
  210. package/dist/skills/en-US/threejs-3d-game/references/engine-physics.md +142 -0
  211. package/dist/skills/en-US/threejs-3d-game/references/engine-runtime.md +199 -0
  212. package/dist/skills/en-US/threejs-3d-game/references/file-structure.md +353 -0
  213. package/dist/skills/en-US/threejs-aaa-graphics-builder/SKILL.md +62 -0
  214. package/dist/skills/en-US/threejs-aaa-graphics-builder/agents/openai.yaml +7 -0
  215. package/{skills → dist/skills/zh-CN}/evomeme-cloud-fs/SKILL.md +4 -4
  216. package/{skills → dist/skills/zh-CN}/evomeme-cover/SKILL.md +1 -1
  217. package/{skills → dist/skills/zh-CN}/evomeme-game-maker/SKILL.md +91 -88
  218. package/{skills → dist/skills/zh-CN}/evomeme-tos-upload/SKILL.md +6 -5
  219. package/dist/skills/zh-CN/evomeme-ui/SKILL.md +123 -0
  220. package/dist/skills/zh-CN/evomeme-ui/agents/openai.yaml +4 -0
  221. package/dist/skills/zh-CN/evomeme-ui/references/host-layout.md +69 -0
  222. package/dist/skills/zh-CN/game-asset-align/SKILL.md +45 -0
  223. package/dist/skills/zh-CN/game-asset-align/agents/openai.yaml +8 -0
  224. package/dist/skills/zh-CN/game-asset-align/references/alignment-contract.md +61 -0
  225. package/dist/skills/zh-CN/game-asset-align/references/blender-scene-pipeline.md +45 -0
  226. package/dist/skills/zh-CN/game-asset-align/references/canonical-package.md +26 -0
  227. package/dist/skills/zh-CN/game-asset-align/references/engine-capabilities.md +14 -0
  228. package/dist/skills/zh-CN/game-asset-align/references/lightweight-review.md +32 -0
  229. package/dist/skills/zh-CN/game-asset-align/references/repair-policy.md +30 -0
  230. package/dist/skills/zh-CN/game-asset-align/references/tool-contract.md +39 -0
  231. package/dist/skills/zh-CN/game-asset-align/references/visual-review.md +26 -0
  232. package/{skills → dist/skills/zh-CN}/game-asset-image-generator/SKILL.md +1 -1
  233. package/dist/skills/zh-CN/game-audio/references/bgm-cdn.md +127 -0
  234. package/dist/skills/zh-CN/game-audio/references/sfx-cdn.md +77 -0
  235. package/dist/skills/zh-CN/game-test/references/checklists/playtest-qa.md +12 -0
  236. package/{skills → dist/skills/zh-CN}/game-ui/SKILL.md +9 -1
  237. package/dist/skills/zh-CN/game-ui/references/checklists/game-ui-quality.md +14 -0
  238. package/dist/skills/zh-CN/game-ui/references/checklists/hud-readability.md +12 -0
  239. package/dist/skills/zh-CN/game-ui/references/checklists/mobile-input.md +12 -0
  240. package/dist/skills/zh-CN/game-ui/references/checklists/responsive-ui-fit.md +12 -0
  241. package/dist/skills/zh-CN/game-ui/references/ui-patterns.md +140 -0
  242. package/dist/skills/zh-CN/game-ui/references/ui-prompt-templates.md +63 -0
  243. package/dist/skills/zh-CN/godot-3d-game/SKILL.md +39 -0
  244. package/dist/skills/zh-CN/godot-3d-game/agents/openai.yaml +8 -0
  245. package/dist/skills/zh-CN/godot-3d-game/references/alignment-gates.md +26 -0
  246. package/dist/skills/zh-CN/godot-3d-game/references/appearance-alignment.md +52 -0
  247. package/dist/skills/zh-CN/godot-3d-game/references/build-and-qa.md +22 -0
  248. package/dist/skills/zh-CN/godot-3d-game/references/canonical-asset-runtime.md +27 -0
  249. package/dist/skills/zh-CN/godot-3d-game/references/import-and-wrapper-scenes.md +20 -0
  250. package/dist/skills/zh-CN/godot-3d-game/references/physics-colliders.md +13 -0
  251. package/dist/skills/zh-CN/godot-3d-game/references/project-structure.md +22 -0
  252. package/dist/skills/zh-CN/godot-3d-game/references/skeleton-animation.md +16 -0
  253. package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
  254. package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
  255. package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  256. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/compose-quality.md +10 -0
  257. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +9 -0
  258. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +15 -0
  259. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +10 -0
  260. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +9 -0
  261. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +9 -0
  262. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/compose-recipes.md +71 -0
  263. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +33 -0
  264. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/implementation-blueprint.md +82 -0
  265. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/sprite-recipes.md +90 -0
  266. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/technical-art.md +67 -0
  267. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/vfx-recipes.md +67 -0
  268. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/visual-scorecard.md +129 -0
  269. package/{skills → dist/skills/zh-CN}/threejs-3d-game/SKILL.md +6 -2
  270. package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-asset-pipeline.md +52 -15
  271. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
  272. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
  273. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  274. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +23 -0
  275. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +19 -0
  276. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +14 -0
  277. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +14 -0
  278. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +15 -0
  279. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +17 -0
  280. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +236 -0
  281. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/implementation-blueprint.md +161 -0
  282. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/model-recipes.md +146 -0
  283. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/render-recipes.md +90 -0
  284. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/shader-cookbook.md +292 -0
  285. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/technical-art.md +167 -0
  286. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/visual-scorecard.md +147 -0
  287. package/dist/stage-blender/bake_materials.py +102 -0
  288. package/dist/stage-blender/export_scene.py +275 -0
  289. package/dist/stage-blender/preview_camera.py +90 -0
  290. package/dist/stage-blender/repair_mesh.py +112 -0
  291. package/dist/stage-public/app.js +759 -0
  292. package/dist/stage-public/baked/bakePilot.js +44 -0
  293. package/dist/stage-public/baked/bakedScene.js +129 -0
  294. package/dist/stage-public/baked/sceneAppearance.js +225 -0
  295. package/dist/stage-public/baked/sceneCamera.js +45 -0
  296. package/dist/stage-public/comparison-contract.js +28 -0
  297. package/dist/stage-public/delivery.html +4 -0
  298. package/dist/stage-public/delivery.js +17 -0
  299. package/dist/stage-public/godot/appearance.gd +170 -0
  300. package/dist/stage-public/godot/preview.gd +79 -0
  301. package/dist/stage-public/index.html +141 -0
  302. package/dist/stage-public/review-app.js +289 -0
  303. package/dist/stage-public/review-runtime.js +63 -0
  304. package/dist/stage-public/review.css +24 -0
  305. package/dist/stage-public/review.html +47 -0
  306. package/dist/stage-public/scene-runtime.js +212 -0
  307. package/dist/stage-public/sceneContractRuntime.js +235 -0
  308. package/dist/stage-public/styles.css +328 -0
  309. package/dist/stage-public/three-appearance.js +104 -0
  310. package/dist/stage-public/vendor/three170/LICENSE +21 -0
  311. package/dist/stage-public/vendor/three170/build/three.module.js +54571 -0
  312. package/dist/stage-public/vendor/three170/examples/jsm/controls/OrbitControls.js +1523 -0
  313. package/dist/stage-public/vendor/three170/examples/jsm/environments/RoomEnvironment.js +144 -0
  314. package/dist/stage-public/vendor/three170/examples/jsm/libs/fflate.module.js +2672 -0
  315. package/dist/stage-public/vendor/three170/examples/jsm/loaders/EXRLoader.js +2563 -0
  316. package/dist/stage-public/vendor/three170/examples/jsm/loaders/GLTFLoader.js +4727 -0
  317. package/dist/stage-public/vendor/three170/examples/jsm/utils/BufferGeometryUtils.js +1373 -0
  318. package/dist/tile-transition-mask.svg +40 -0
  319. package/package.json +21 -7
  320. package/dist/canvas-public/cycle-detect.js +0 -166
  321. package/dist/canvas-public/smart-split.js +0 -185
  322. /package/{skills → dist/skills/en-US}/game-audio/references/bgm-cdn.md +0 -0
  323. /package/{skills → dist/skills/en-US}/game-audio/references/sfx-cdn.md +0 -0
  324. /package/{skills → dist/skills/en-US}/game-test/references/checklists/playtest-qa.md +0 -0
  325. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/game-ui-quality.md +0 -0
  326. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/hud-readability.md +0 -0
  327. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/mobile-input.md +0 -0
  328. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/responsive-ui-fit.md +0 -0
  329. /package/{skills → dist/skills/en-US}/game-ui/references/ui-patterns.md +0 -0
  330. /package/{skills → dist/skills/en-US}/game-ui/references/ui-prompt-templates.md +0 -0
  331. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
  332. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
  333. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  334. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/compose-quality.md +0 -0
  335. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +0 -0
  336. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +0 -0
  337. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +0 -0
  338. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +0 -0
  339. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +0 -0
  340. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/compose-recipes.md +0 -0
  341. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +0 -0
  342. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/implementation-blueprint.md +0 -0
  343. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/sprite-recipes.md +0 -0
  344. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/technical-art.md +0 -0
  345. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/vfx-recipes.md +0 -0
  346. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/visual-scorecard.md +0 -0
  347. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
  348. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
  349. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  350. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +0 -0
  351. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +0 -0
  352. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +0 -0
  353. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +0 -0
  354. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +0 -0
  355. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +0 -0
  356. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +0 -0
  357. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/implementation-blueprint.md +0 -0
  358. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/model-recipes.md +0 -0
  359. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/render-recipes.md +0 -0
  360. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/shader-cookbook.md +0 -0
  361. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/technical-art.md +0 -0
  362. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/visual-scorecard.md +0 -0
  363. /package/{skills → dist/skills/zh-CN}/evomeme-canvas/SKILL.md +0 -0
  364. /package/{skills → dist/skills/zh-CN}/evomeme-canvas/agents/openai.yaml +0 -0
  365. /package/{skills → dist/skills/zh-CN}/evomeme-cloud-fs/agents/openai.yaml +0 -0
  366. /package/{skills → dist/skills/zh-CN}/evomeme-cover/agents/openai.yaml +0 -0
  367. /package/{skills → dist/skills/zh-CN}/evomeme-game-maker/agents/openai.yaml +0 -0
  368. /package/{skills → dist/skills/zh-CN}/evomeme-login/SKILL.md +0 -0
  369. /package/{skills → dist/skills/zh-CN}/evomeme-login/agents/openai.yaml +0 -0
  370. /package/{skills → dist/skills/zh-CN}/evomeme-native-bridge-sdk/SKILL.md +0 -0
  371. /package/{skills → dist/skills/zh-CN}/evomeme-native-bridge-sdk/agents/openai.yaml +0 -0
  372. /package/{skills → dist/skills/zh-CN}/evomeme-tos-upload/agents/openai.yaml +0 -0
  373. /package/{skills → dist/skills/zh-CN}/game-art/SKILL.md +0 -0
  374. /package/{skills → dist/skills/zh-CN}/game-art/agents/openai.yaml +0 -0
  375. /package/{skills → dist/skills/zh-CN}/game-asset-image-generator/agents/openai.yaml +0 -0
  376. /package/{skills → dist/skills/zh-CN}/game-asset-image-generator/references/background.md +0 -0
  377. /package/{skills → dist/skills/zh-CN}/game-asset-image-generator/references/static-game-assets.md +0 -0
  378. /package/{skills → dist/skills/zh-CN}/game-audio/SKILL.md +0 -0
  379. /package/{skills → dist/skills/zh-CN}/game-audio/agents/openai.yaml +0 -0
  380. /package/{skills → dist/skills/zh-CN}/game-demo/SKILL.md +0 -0
  381. /package/{skills → dist/skills/zh-CN}/game-demo/agents/openai.yaml +0 -0
  382. /package/{skills → dist/skills/zh-CN}/game-maker/SKILL.md +0 -0
  383. /package/{skills → dist/skills/zh-CN}/game-maker/agents/openai.yaml +0 -0
  384. /package/{skills → dist/skills/zh-CN}/game-test/SKILL.md +0 -0
  385. /package/{skills → dist/skills/zh-CN}/game-test/agents/openai.yaml +0 -0
  386. /package/{skills → dist/skills/zh-CN}/game-ui/agents/openai.yaml +0 -0
  387. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/SKILL.md +0 -0
  388. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/agents/openai.yaml +0 -0
  389. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-performance.md +0 -0
  390. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-physics.md +0 -0
  391. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-runtime.md +0 -0
  392. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-spritesheets.md +0 -0
  393. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-tilemaps.md +0 -0
  394. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/file-structure.md +0 -0
  395. /package/{skills → dist/skills/zh-CN}/phaser-2d-graphics-builder/SKILL.md +0 -0
  396. /package/{skills → dist/skills/zh-CN}/phaser-2d-graphics-builder/agents/openai.yaml +0 -0
  397. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/agents/openai.yaml +0 -0
  398. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-audio.md +0 -0
  399. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-input-camera.md +0 -0
  400. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-performance.md +0 -0
  401. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-physics.md +0 -0
  402. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-runtime.md +0 -0
  403. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/file-structure.md +0 -0
  404. /package/{skills → dist/skills/zh-CN}/threejs-aaa-graphics-builder/SKILL.md +0 -0
  405. /package/{skills → dist/skills/zh-CN}/threejs-aaa-graphics-builder/agents/openai.yaml +0 -0
@@ -0,0 +1,59 @@
1
+ import { registerFeature } from '../core/feature-registry.js'
2
+ import image from './generation/image.js'
3
+ import seamlessTile from './generation/seamless-tile.js'
4
+ import scrollImage from './generation/scroll-image.js'
5
+ import tileTransitionAtlas from './generation/tile-transition-atlas.js'
6
+ import video from './generation/video.js'
7
+ import animation from './generation/animation.js'
8
+ import direction, { fourView } from './generation/direction.js'
9
+ import gameUi from './generation/game-ui.js'
10
+ import assetBatch from './generation/asset-batch.js'
11
+ import frameEditor, { frameEditorCreation as frameCreation } from './frame-editor/frame-editing.js'
12
+ import tileMap from './map/creation.js'
13
+ import colorKey from './editing/color-key.js'
14
+ import perfectPixel from './editing/perfect-pixel.js'
15
+ import videoFrames from './editing/video-frames.js'
16
+ import videoCycle from './editing/video-cycle.js'
17
+ import layerDecomposition from './editing/layer-decomposition.js'
18
+ import smartSplit from './editing/smart-split.js'
19
+ import manualSplit from './editing/manual-split.js'
20
+ import seamElimination from './editing/seam-elimination.js'
21
+ import scrollPreview from './editing/scroll-preview.js'
22
+ import scrollSeamElimination from './editing/scroll-seam-elimination.js'
23
+ import interactiveEdit from './editing/interactive-image-editing.js'
24
+ import canvasSize from './editing/canvas-size.js'
25
+ import cutout from './editing/cutout.js'
26
+ import framePreview from './frame-editor/preview.js'
27
+ import officialAssets from './assets/official-assets.js'
28
+
29
+ for (const definition of [
30
+ image,
31
+ seamlessTile,
32
+ scrollImage,
33
+ tileTransitionAtlas,
34
+ video,
35
+ animation,
36
+ fourView,
37
+ direction,
38
+ gameUi,
39
+ assetBatch,
40
+ frameEditor,
41
+ tileMap,
42
+ colorKey,
43
+ perfectPixel,
44
+ videoFrames,
45
+ videoCycle,
46
+ layerDecomposition,
47
+ smartSplit,
48
+ manualSplit,
49
+ seamElimination,
50
+ scrollPreview,
51
+ scrollSeamElimination,
52
+ officialAssets,
53
+ interactiveEdit,
54
+ canvasSize,
55
+ cutout,
56
+ framePreview,
57
+ frameCreation,
58
+ ])
59
+ registerFeature(definition)
@@ -1,9 +1,9 @@
1
1
  <!doctype html>
2
- <html lang="zh-CN">
2
+ <html lang="en-US">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Image Canvas</title>
6
+ <title data-i18n="document.title"></title>
7
7
  <link rel="preconnect" href="https://fonts.googleapis.com" />
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
9
9
  <link
@@ -15,15 +15,15 @@
15
15
  <body>
16
16
  <div class="welcome" id="welcome">
17
17
  <div class="welcome-card">
18
- <p class="welcome-brand">Image Canvas</p>
19
- <h1>打开工程目录</h1>
18
+ <p class="welcome-brand" data-i18n="brand.canvas"></p>
19
+ <h1 data-i18n="html.text025"></h1>
20
20
  <p class="welcome-desc">
21
- 选择一个本地文件夹作为工程。画布、上传与生成结果会保存在该目录下的
22
- <code>.image-canvas/</code> 中。
21
+ <span data-i18n="html.text101"></span>
22
+ <code>.image-canvas/</code> <span data-i18n="html.text102"></span>
23
23
  </p>
24
- <button type="button" class="primary-btn" id="welcome-open-btn">打开工程…</button>
24
+ <button type="button" class="primary-btn" id="welcome-open-btn" data-i18n="html.text026"></button>
25
25
  <div class="welcome-recent" id="welcome-recent" hidden>
26
- <h2>最近打开</h2>
26
+ <h2 data-i18n="html.text027"></h2>
27
27
  <ul id="welcome-recent-list"></ul>
28
28
  </div>
29
29
  <p class="welcome-error" id="welcome-error" hidden></p>
@@ -34,23 +34,43 @@
34
34
  <div class="canvas-pane">
35
35
  <aside class="inspector" id="inspector" hidden>
36
36
  <header class="inspector-header">
37
- <h2 id="inspector-title">属性</h2>
38
- <button type="button" class="ghost-btn" id="inspector-close" title="取消选中">×</button>
37
+ <h2 id="inspector-title" data-i18n="html.text028"></h2>
38
+ <button type="button" class="ghost-btn" id="inspector-close" data-i18n-title="html.text001">×</button>
39
39
  </header>
40
40
  <div class="inspector-body" id="inspector-body"></div>
41
+ <div
42
+ class="inspector-resize-handle"
43
+ id="inspector-resize-handle"
44
+ role="separator"
45
+ data-i18n-aria-label="html.text002"
46
+ aria-orientation="vertical"
47
+ tabindex="0"
48
+ ></div>
41
49
  </aside>
42
50
  <div class="canvas-main">
43
51
  <div class="canvas-shell">
44
52
  <div class="canvas-toolbar">
53
+ <span class="product-brand" data-i18n="brand.product"></span>
45
54
  <div class="project-bar">
46
- <span class="project-name" id="project-name" title="">未打开工程</span>
47
- <button type="button" class="ghost-btn" id="switch-project-btn">切换工程</button>
55
+ <span class="project-name" id="project-name" title="" data-i18n="html.text029"></span>
56
+ <button type="button" class="ghost-btn" id="switch-project-btn" data-i18n="html.text030"></button>
57
+ <button type="button" class="ghost-btn settings-button" id="settings-btn" data-i18n="html.text031"></button>
48
58
  </div>
49
59
  <div class="toolbar-actions" id="toolbar-actions">
50
- <button type="button" class="tool-btn" id="tool-add-assets">添加素材</button>
51
- <button type="button" class="tool-btn" id="tool-image-gen" title="拖到画布指定位置创建图片生成元素">图片生成</button>
52
- <button type="button" class="tool-btn" id="tool-video-gen" title="拖到画布指定位置创建视频生成元素">视频生成</button>
53
- <button type="button" class="ghost-btn" id="reset-view">重置视图</button>
60
+ <div class="toolbar-primary" role="tablist" data-i18n-aria-label="html.text003">
61
+ <button type="button" class="toolbar-primary-button toolbar-category-tab" id="tool-add-assets" role="tab" aria-selected="false" aria-expanded="false" aria-controls="toolbar-asset-tools"><span data-i18n="html.text032"></span><i class="toolbar-category-indicator" aria-hidden="true"></i></button>
62
+ <button type="button" class="toolbar-primary-button toolbar-category-tab" id="toolbar-image-tab" role="tab" aria-selected="false" aria-expanded="false" aria-controls="toolbar-image-tools"><span data-i18n="html.text033"></span><i class="toolbar-category-indicator" aria-hidden="true"></i></button>
63
+ <button type="button" class="toolbar-primary-button toolbar-category-tab" id="toolbar-video-tab" role="tab" aria-selected="false" aria-expanded="false" aria-controls="toolbar-video-tools"><span data-i18n="html.text034"></span><i class="toolbar-category-indicator" aria-hidden="true"></i></button>
64
+ </div>
65
+ <div class="toolbar-ribbon" id="toolbar-ribbon" hidden>
66
+ <div class="toolbar-ribbon-panel" id="toolbar-asset-tools" role="tabpanel" hidden>
67
+ <button type="button" class="toolbar-ribbon-tool toolbar-ribbon-action" id="tool-local-assets" data-i18n-title="html.text004"><span data-i18n="html.text035"></span></button>
68
+ </div>
69
+ <div class="toolbar-ribbon-panel" id="toolbar-image-tools" role="tabpanel" hidden>
70
+ </div>
71
+ <div class="toolbar-ribbon-panel" id="toolbar-video-tools" role="tabpanel" hidden>
72
+ </div>
73
+ </div>
54
74
  </div>
55
75
  </div>
56
76
  <div class="canvas-viewport" id="viewport">
@@ -62,253 +82,72 @@
62
82
  </div>
63
83
  </div>
64
84
 
65
- <div class="ctx-menu" id="ctx-menu" hidden>
66
- <button type="button" data-action="copy">复制</button>
67
- <button type="button" data-action="paste" hidden>粘贴</button>
68
- <button type="button" data-action="cutout" hidden>智能抠图</button>
69
- <button type="button" data-action="interactive-edit" hidden>交互编辑</button>
70
- <button type="button" data-action="layer-decomposition" hidden>大模型图层分离</button>
71
- <button type="button" data-action="video-cycle" hidden>智能周期提取</button>
72
- <button type="button" data-action="video-to-frame-sheet" hidden>视频转序列帧图</button>
73
- <button type="button" data-action="smart-split">智能切分</button>
74
- <button type="button" data-action="manual-split">手动切分</button>
75
- <button type="button" data-action="frame-sheet-preview" hidden>序列帧预览</button>
76
- <button type="button" data-action="frame-sheet-edit" hidden>序列帧编辑</button>
77
- <button type="button" data-action="delete" class="ctx-danger">删除</button>
78
- </div>
79
-
80
- <div class="modal-backdrop modal-backdrop-dark" id="interactive-edit-modal" hidden>
81
- <div class="modal-dialog modal-dialog-interactive-edit" role="dialog" aria-modal="true" aria-labelledby="interactive-edit-title">
85
+ <div class="modal-backdrop modal-backdrop-dark" id="settings-modal" role="dialog" aria-modal="true" aria-labelledby="settings-title" hidden>
86
+ <div class="modal-dialog settings-dialog">
82
87
  <div class="seq-panel-head">
83
- <strong id="interactive-edit-title">交互编辑</strong>
84
- <button type="button" class="ghost-btn" id="interactive-edit-close">关闭</button>
85
- </div>
86
- <div class="interactive-editor-host" id="interactive-editor-host"></div>
87
- <div class="interactive-edit-compose">
88
- <label class="layer-decomposition-prompt" for="interactive-edit-prompt">
89
- 编辑要求
90
- <textarea
91
- id="interactive-edit-prompt"
92
- rows="3"
93
- placeholder="例如:将框选区域替换为木质宝箱,并保持其他内容不变"
94
- ></textarea>
88
+ <strong id="settings-title" data-i18n="html.text031"></strong>
89
+ <button type="button" class="ghost-btn" id="settings-close" data-i18n="html.text044"></button>
90
+ </div>
91
+ <div class="settings-dialog-body">
92
+ <label class="settings-field" for="settings-language">
93
+ <span data-i18n="settings.language.label"></span>
94
+ <select id="settings-language">
95
+ <option value="en-US" data-i18n="settings.language.english"></option>
96
+ <option value="zh-CN" data-i18n="settings.language.chinese"></option>
97
+ </select>
98
+ <span class="settings-field-error" id="settings-language-error" hidden></span>
95
99
  </label>
96
- <p class="modal-hint">画面标记和文字会合并到参考图中,并使用 Pro 模型生成。</p>
97
- <p class="modal-hint" id="interactive-edit-status" hidden></p>
98
- <div class="modal-actions">
99
- <button type="button" class="ghost-btn" id="interactive-edit-cancel">取消</button>
100
- <button type="button" class="ghost-btn" id="interactive-edit-save">保存到画布</button>
101
- <button type="button" class="tool-btn" id="interactive-edit-confirm">生成</button>
102
- </div>
103
100
  </div>
104
101
  </div>
105
102
  </div>
106
103
 
107
- <div class="modal-backdrop modal-backdrop-dark" id="layer-decomposition-modal" hidden>
108
- <div class="modal-dialog modal-dialog-layer-decomposition" role="dialog" aria-modal="true" aria-labelledby="layer-decomposition-title">
109
- <div class="seq-panel-head">
110
- <strong id="layer-decomposition-title">大模型图层分离</strong>
111
- <button type="button" class="ghost-btn" id="layer-decomposition-close">关闭</button>
112
- </div>
113
- <div class="layer-decomposition-preview">
114
- <img id="layer-decomposition-image" alt="待分离图片预览" />
115
- </div>
116
- <label class="layer-decomposition-prompt" for="layer-decomposition-prompt">
117
- 拆分要求
118
- <textarea
119
- id="layer-decomposition-prompt"
120
- rows="4"
121
- placeholder="例如:将人物、背景、文字分别拆分为可独立编辑的图层"
122
- ></textarea>
123
- </label>
124
- <p class="modal-hint">模型会输出一张底图和最多 16 个透明 PNG 图层。</p>
125
- <p class="modal-hint" id="layer-decomposition-status" hidden></p>
126
- <div class="modal-actions">
127
- <button type="button" class="ghost-btn" id="layer-decomposition-cancel">取消</button>
128
- <button type="button" class="tool-btn" id="layer-decomposition-confirm">开始分离</button>
104
+ <div class="ctx-menu" id="ctx-menu" hidden>
105
+ <button type="button" data-action="copy" data-i18n="html.text045"></button>
106
+ <button type="button" data-action="paste" hidden data-i18n="html.text046"></button>
107
+ <button type="button" data-action="export-tile-map" hidden data-i18n="html.text047"></button>
108
+ <div class="ctx-submenu" data-submenu="cutout" hidden>
109
+ <button type="button" class="ctx-submenu-trigger" aria-haspopup="menu" aria-expanded="false">
110
+ <span data-i18n="html.text051"></span><span class="ctx-submenu-arrow" aria-hidden="true">›</span>
111
+ </button>
112
+ <div class="ctx-submenu-panel" role="menu">
129
113
  </div>
130
114
  </div>
131
- </div>
132
-
133
- <div class="modal-backdrop modal-backdrop-dark" id="video-cycle-modal" hidden>
134
- <div class="modal-dialog" role="dialog" aria-modal="true" aria-labelledby="video-cycle-title">
135
- <div class="seq-panel-head">
136
- <strong id="video-cycle-title">智能周期提取</strong>
137
- <button type="button" class="ghost-btn" id="video-cycle-close">关闭</button>
138
- </div>
139
- <p class="modal-hint">
140
- 以首帧为参考,从前向后寻找最早相似度达标的一帧并立即停止,再裁切为首个周期视频。
141
- </p>
142
- <label class="seq-field frame-extract-field">
143
- 相似度阈值
144
- <input
145
- type="number"
146
- id="video-cycle-threshold"
147
- min="50"
148
- max="99.9"
149
- step="0.1"
150
- value="98"
151
- />
152
- <span class="frame-extract-range">%</span>
153
- </label>
154
- <label class="seq-field frame-extract-field">
155
- 最短周期
156
- <input
157
- type="number"
158
- id="video-cycle-min-gap"
159
- min="0.1"
160
- max="10"
161
- step="0.1"
162
- value="0.4"
163
- />
164
- <span class="frame-extract-range">秒(避免开头相邻帧误命中)</span>
165
- </label>
166
- <p class="modal-hint" id="video-cycle-status" hidden></p>
167
- <div class="modal-actions">
168
- <button type="button" class="ghost-btn" id="video-cycle-cancel">取消</button>
169
- <button type="button" class="tool-btn" id="video-cycle-confirm">开始提取</button>
115
+ <div class="ctx-submenu" data-submenu="image-split" hidden>
116
+ <button type="button" class="ctx-submenu-trigger" aria-haspopup="menu" aria-expanded="false">
117
+ <span data-i18n="html.text056"></span><span class="ctx-submenu-arrow" aria-hidden="true">›</span>
118
+ </button>
119
+ <div class="ctx-submenu-panel" role="menu">
170
120
  </div>
171
121
  </div>
172
- </div>
173
-
174
- <div class="modal-backdrop modal-backdrop-dark" id="smart-split-modal" hidden>
175
- <div class="modal-dialog" role="dialog" aria-modal="true" aria-labelledby="smart-split-title">
176
- <div class="seq-panel-head">
177
- <strong id="smart-split-title">智能切分</strong>
178
- <button type="button" class="ghost-btn" id="smart-split-close">关闭</button>
179
- </div>
180
- <p class="modal-hint">
181
- 切分结果统一为最大主体的宽度和高度。选择主体在扩展区域中的固定基准点;主体不会缩放。
182
- </p>
183
- <div class="split-anchor-grid" id="smart-split-anchor-grid" role="radiogroup" aria-label="扩展基准点">
184
- <button type="button" class="split-anchor-btn" data-anchor="top-left" role="radio" aria-checked="false"><span></span>左上</button>
185
- <button type="button" class="split-anchor-btn" data-anchor="top" role="radio" aria-checked="false"><span></span>上</button>
186
- <button type="button" class="split-anchor-btn" data-anchor="top-right" role="radio" aria-checked="false"><span></span>右上</button>
187
- <button type="button" class="split-anchor-btn" data-anchor="left" role="radio" aria-checked="false"><span></span>左</button>
188
- <button type="button" class="split-anchor-btn is-selected" data-anchor="center" role="radio" aria-checked="true"><span></span>中心</button>
189
- <button type="button" class="split-anchor-btn" data-anchor="right" role="radio" aria-checked="false"><span></span>右</button>
190
- <button type="button" class="split-anchor-btn" data-anchor="bottom-left" role="radio" aria-checked="false"><span></span>左下</button>
191
- <button type="button" class="split-anchor-btn" data-anchor="bottom" role="radio" aria-checked="false"><span></span>下</button>
192
- <button type="button" class="split-anchor-btn" data-anchor="bottom-right" role="radio" aria-checked="false"><span></span>右下</button>
193
- </div>
194
- <p class="modal-hint" id="smart-split-status" hidden></p>
195
- <div class="modal-actions">
196
- <button type="button" class="ghost-btn" id="smart-split-cancel">取消</button>
197
- <button type="button" class="tool-btn" id="smart-split-confirm">开始切分</button>
122
+ <div class="ctx-submenu" data-submenu="frame-sheet" hidden>
123
+ <button type="button" class="ctx-submenu-trigger" aria-haspopup="menu" aria-expanded="false">
124
+ <span data-i18n="html.text060"></span><span class="ctx-submenu-arrow" aria-hidden="true">›</span>
125
+ </button>
126
+ <div class="ctx-submenu-panel" role="menu">
198
127
  </div>
199
128
  </div>
200
- </div>
201
-
202
- <div class="modal-backdrop modal-backdrop-dark" id="manual-split-modal" hidden>
203
- <div class="modal-dialog" role="dialog" aria-modal="true" aria-labelledby="manual-split-title">
204
- <div class="seq-panel-head">
205
- <strong id="manual-split-title">手动切分</strong>
206
- <button type="button" class="ghost-btn" id="manual-split-close">关闭</button>
207
- </div>
208
- <p class="modal-hint">
209
- 按行列将原图完整均分,从左到右、从上到下生成图片,不缩放原图。
210
- </p>
211
- <p class="modal-hint" id="manual-split-info"></p>
212
- <div class="seq-sheet-fields">
213
- <label class="seq-field frame-extract-field">
214
- 行数
215
- <input type="number" id="manual-split-rows" min="1" max="64" step="1" value="2" />
216
- </label>
217
- <label class="seq-field frame-extract-field">
218
- 列数
219
- <input type="number" id="manual-split-cols" min="1" max="64" step="1" value="2" />
220
- </label>
221
- </div>
222
- <div class="seq-sheet-preview" id="manual-split-preview" aria-hidden="true"></div>
223
- <p class="modal-hint" id="manual-split-status" hidden></p>
224
- <div class="modal-actions">
225
- <button type="button" class="ghost-btn" id="manual-split-cancel">取消</button>
226
- <button type="button" class="tool-btn" id="manual-split-confirm">开始切分</button>
129
+ <div class="ctx-submenu" data-submenu="character-views" hidden>
130
+ <button type="button" class="ctx-submenu-trigger" aria-haspopup="menu" aria-expanded="false">
131
+ <span data-i18n="html.text063"></span><span class="ctx-submenu-arrow" aria-hidden="true">›</span>
132
+ </button>
133
+ <div class="ctx-submenu-panel" role="menu">
227
134
  </div>
228
135
  </div>
229
- </div>
230
-
231
- <div class="modal-backdrop modal-backdrop-dark" id="frame-extract-modal" hidden>
232
- <div class="modal-dialog" role="dialog" aria-modal="true" aria-labelledby="frame-extract-title">
233
- <div class="seq-panel-head">
234
- <strong id="frame-extract-title">视频转序列帧图</strong>
235
- <button type="button" class="ghost-btn" id="frame-extract-close">关闭</button>
236
- </div>
237
- <p class="modal-hint">
238
- 均匀抽取视频帧后,自动按从左到右、从上到下的顺序拼成一张 PNG 图片。
239
- </p>
240
- <label class="seq-field frame-extract-field">
241
- 抽取帧数
242
- <input type="number" id="frame-extract-count" min="2" max="30" step="1" value="10" />
243
- <span class="frame-extract-range">2 – 30</span>
244
- </label>
245
- <p class="modal-hint" id="frame-extract-status" hidden></p>
246
- <div class="modal-actions">
247
- <button type="button" class="ghost-btn" id="frame-extract-cancel">取消</button>
248
- <button type="button" class="tool-btn" id="frame-extract-confirm">生成序列帧图</button>
136
+ <div class="ctx-submenu" data-submenu="map-tiles" hidden>
137
+ <button type="button" class="ctx-submenu-trigger" aria-haspopup="menu" aria-expanded="false">
138
+ <span data-i18n="html.text066"></span><span class="ctx-submenu-arrow" aria-hidden="true">›</span>
139
+ </button>
140
+ <div class="ctx-submenu-panel" role="menu">
249
141
  </div>
250
142
  </div>
251
- </div>
252
-
253
- <div class="modal-backdrop modal-backdrop-dark" id="frame-preview-modal" hidden>
254
- <div class="modal-dialog" role="dialog" aria-modal="true" aria-labelledby="frame-preview-title">
255
- <div class="seq-panel-head">
256
- <strong id="frame-preview-title">序列帧预览</strong>
257
- <button type="button" class="ghost-btn" id="frame-preview-close">关闭</button>
258
- </div>
259
- <p class="modal-hint">
260
- 将当前图片等分为网格,并按照从左到右、从上到下的顺序在画布内循环播放。不会修改图片文件。
261
- </p>
262
- <div class="seq-sheet-fields">
263
- <label class="seq-field frame-extract-field">
264
- 行数
265
- <input type="number" id="frame-preview-rows" min="1" max="64" step="1" value="2" />
266
- </label>
267
- <label class="seq-field frame-extract-field">
268
- 列数
269
- <input type="number" id="frame-preview-columns" min="1" max="64" step="1" value="2" />
270
- </label>
271
- </div>
272
- <p class="modal-hint" id="frame-preview-info"></p>
273
- <div class="seq-sheet-preview" id="frame-preview-grid" aria-hidden="true"></div>
274
- <label class="seq-field frame-extract-field">
275
- FPS
276
- <input type="number" id="frame-preview-fps" min="0.000001" step="any" value="8" />
277
- </label>
278
- <p class="modal-hint" id="frame-preview-status" hidden></p>
279
- <div class="modal-actions">
280
- <button type="button" class="ghost-btn" id="frame-preview-cancel">取消</button>
281
- <button type="button" class="tool-btn" id="frame-preview-confirm">开始预览</button>
282
- </div>
283
- </div>
284
- </div>
285
-
286
- <div class="modal-backdrop modal-backdrop-dark" id="frame-editor-split-modal" hidden>
287
- <div class="modal-dialog" role="dialog" aria-modal="true" aria-labelledby="frame-editor-split-title">
288
- <div class="seq-panel-head">
289
- <strong id="frame-editor-split-title">创建序列帧编辑器</strong>
290
- <button type="button" class="ghost-btn" id="frame-editor-split-close">关闭</button>
291
- </div>
292
- <p class="modal-hint">
293
- 请设置当前图片包含的行数和列数。已有序列帧预览时会自动填入相同配置;这里允许 1×1。
294
- </p>
295
- <div class="seq-sheet-fields">
296
- <label class="seq-field frame-extract-field">
297
- 行数
298
- <input type="number" id="frame-editor-split-rows" min="1" max="64" step="1" value="2" />
299
- </label>
300
- <label class="seq-field frame-extract-field">
301
- 列数
302
- <input type="number" id="frame-editor-split-columns" min="1" max="64" step="1" value="2" />
303
- </label>
304
- </div>
305
- <p class="modal-hint" id="frame-editor-split-info"></p>
306
- <p class="modal-hint" id="frame-editor-split-status" hidden></p>
307
- <div class="modal-actions">
308
- <button type="button" class="ghost-btn" id="frame-editor-split-cancel">取消</button>
309
- <button type="button" class="tool-btn" id="frame-editor-split-confirm">创建编辑器</button>
143
+ <div class="ctx-submenu" data-submenu="scroll-image" hidden>
144
+ <button type="button" class="ctx-submenu-trigger" aria-haspopup="menu" aria-expanded="false">
145
+ <span data-i18n="features.editing.scrollPreview.menuGroup"></span><span class="ctx-submenu-arrow" aria-hidden="true">›</span>
146
+ </button>
147
+ <div class="ctx-submenu-panel" role="menu">
310
148
  </div>
311
149
  </div>
150
+ <button type="button" data-action="delete" class="ctx-danger" data-i18n="html.text069"></button>
312
151
  </div>
313
152
 
314
153
  <input
@@ -318,20 +157,6 @@
318
157
  multiple
319
158
  hidden
320
159
  />
321
- <input
322
- type="file"
323
- id="file-input"
324
- accept="image/png,image/jpeg,image/jpg,image/webp,image/gif,image/bmp,image/avif,image/svg+xml,.png,.jpg,.jpeg,.webp,.gif,.bmp,.avif,.svg"
325
- multiple
326
- hidden
327
- />
328
- <input
329
- type="file"
330
- id="media-file-input"
331
- accept="image/*,video/*,audio/*,.png,.jpg,.jpeg,.webp,.gif,.bmp,.avif,.svg,.mp4,.webm,.mov,.m4v,.mp3,.wav,.m4a"
332
- multiple
333
- hidden
334
- />
335
160
  </div>
336
161
  <script src="/vendor/painterro.min.js"></script>
337
162
  <script type="module" src="/app.js"></script>
@@ -0,0 +1,49 @@
1
+ import { state } from '../core/state.js'
2
+ import {
3
+ createField,
4
+ createNumberInput,
5
+ el,
6
+ } from '../ui/controls.js'
7
+
8
+ export {
9
+ createCheckbox,
10
+ createTextInput,
11
+ createTextarea,
12
+ el,
13
+ fillSelect,
14
+ } from '../ui/controls.js'
15
+
16
+ export function appendKv(parent, rows) {
17
+ const dl = el('dl', 'insp-kv')
18
+ for (const [key, entry] of rows) {
19
+ const value = el('dd')
20
+ if (entry instanceof Node) value.appendChild(entry)
21
+ else value.textContent = String(entry)
22
+ dl.append(el('dt', null, key), value)
23
+ }
24
+ parent.appendChild(dl)
25
+ }
26
+
27
+ export function createInspectorBlock(title, options = {}) {
28
+ const collapseKey = options.collapseKey || title
29
+ const block = el('details', `insp-block${options.className ? ` ${options.className}` : ''}`)
30
+ block.open = !state.inspectorCollapsedSections.has(collapseKey)
31
+ block.appendChild(el('summary', 'insp-block-title', title))
32
+ block.addEventListener('toggle', () => {
33
+ if (block.open) state.inspectorCollapsedSections.delete(collapseKey)
34
+ else state.inspectorCollapsedSections.add(collapseKey)
35
+ })
36
+ return block
37
+ }
38
+
39
+ export function createInspectorNumberInput(value, options = {}) {
40
+ return createNumberInput(value, options)
41
+ }
42
+
43
+ export function inspSelectField(labelText, selectElement) {
44
+ return createField(labelText, selectElement)
45
+ }
46
+
47
+ export function inspInputField(labelText, inputElement) {
48
+ return createField(labelText, inputElement)
49
+ }
@@ -0,0 +1,11 @@
1
+ import definition, { applyFramePreview } from '../features/frame-editor/preview.js'
2
+ import { createMediaPreviewParameterModule } from './media-preview.js'
3
+
4
+ export function createFramePreviewInspector(services) {
5
+ const createFramePreviewParameterModule = createMediaPreviewParameterModule(services, {
6
+ definition,
7
+ apply: applyFramePreview,
8
+ collapseKey: 'frame-preview',
9
+ })
10
+ return { createFramePreviewParameterModule }
11
+ }