From 198fcbf55bfd8946883d002bbf6b93e895c802ba Mon Sep 17 00:00:00 2001 From: nan Date: Sat, 19 Sep 2026 21:31:36 +0800 Subject: [PATCH] Initial public release --- .codex/skills/openspec-apply-change/SKILL.md | 156 + .../skills/openspec-archive-change/SKILL.md | 114 + .codex/skills/openspec-explore/SKILL.md | 288 ++ .codex/skills/openspec-propose/SKILL.md | 110 + .gitattributes | 131 + .github/workflows/release.yml | 73 + .github/workflows/test.yml | 29 + .gitignore | 395 +++ .python-version | 1 + AGENTS.md | 111 + LICENSE | 8 + README.md | 12 + docs/assets/favicon.png | 3 + docs/assets/fonts/fontutti.woff2 | 3 + docs/assets/logo.png | 3 + docs/getting-started/installation.md | 80 + docs/index.md | 60 + docs/internals/architecture.md | 34 + docs/internals/common.md | 44 + docs/internals/development.md | 48 + docs/internals/index.md | 15 + docs/internals/node-assets.md | 50 + docs/internals/operators/ai-setup.md | 42 + docs/internals/operators/clipboard-image.md | 41 + .../operators/convert-to-panorama.md | 14 + docs/internals/operators/convert-to-plane.md | 21 + docs/internals/operators/cutout-tool.md | 43 + docs/internals/operators/frame.md | 21 + docs/internals/operators/index.md | 16 + docs/internals/operators/mask.md | 23 + docs/internals/operators/rectify.md | 17 + docs/internals/operators/remove-background.md | 19 + docs/internals/operators/upscale.md | 15 + docs/internals/outputs.md | 40 + docs/internals/runtime.md | 36 + docs/javascripts/extra.js | 41 + docs/stylesheets/extra.css | 133 + mkdocs.yml | 120 + nodes/__init__.py | 1 + nodes/common/__init__.py | 1 + nodes/common/boundary_smoothing.py | 116 + nodes/common/cutout.py | 139 + nodes/common/cutout_boundary.py | 29 + nodes/common/depth_surface.py | 473 +++ nodes/common/direction.py | 33 + nodes/common/material_slots.py | 25 + nodes/common/nodes.py | 213 ++ nodes/common/normal_map.py | 82 + nodes/common/reference_plane.py | 33 + nodes/common/shader.py | 34 + nodes/common/smoothing.py | 173 ++ nodes/common/validity.py | 10 + nodes/groups/__init__.py | 1 + nodes/groups/image_cutout.py | 205 ++ nodes/groups/image_cutout_symmetry.py | 416 +++ nodes/groups/image_depth_cutout.py | 336 ++ nodes/groups/image_depth_layer.py | 90 + nodes/groups/image_depth_panorama.py | 212 ++ nodes/groups/image_depth_plane.py | 158 + nodes/groups/image_layer.py | 103 + nodes/groups/image_plane.py | 253 ++ nodes/groups/image_relief_plane.py | 234 ++ nodes/groups/shadeless.py | 79 + .../.openspec.yaml | 2 + .../2026-09-17-add-ben2-hdr-support/design.md | 72 + .../proposal.md | 27 + .../specs/hdr-background-removal/spec.md | 89 + .../2026-09-17-add-ben2-hdr-support/tasks.md | 31 + .../validation.md | 32 + .../.openspec.yaml | 2 + .../2026-09-17-add-cutout-polyline/design.md | 49 + .../proposal.md | 27 + .../specs/cutout-polyline/spec.md | 57 + .../specs/mask-mode-options/spec.md | 25 + .../2026-09-17-add-cutout-polyline/tasks.md | 21 + .../.openspec.yaml | 2 + .../design.md | 44 + .../proposal.md | 27 + .../image-layer-alpha-adjustment/spec.md | 56 + .../tasks.md | 18 + .../.openspec.yaml | 2 + .../design.md | 84 + .../proposal.md | 26 + .../specs/mask-editing/spec.md | 94 + .../tasks.md | 35 + .../2026-09-17-add-moge3-model/.openspec.yaml | 2 + .../2026-09-17-add-moge3-model/design.md | 63 + .../2026-09-17-add-moge3-model/proposal.md | 23 + .../specs/moge3-model/spec.md | 73 + .../2026-09-17-add-moge3-model/tasks.md | 20 + .../2026-09-17-add-moge3-model/validation.md | 51 + .../.openspec.yaml | 2 + .../design.md | 86 + .../proposal.md | 25 + .../specs/panorama-conversion/spec.md | 33 + .../panorama-geometry-generation/spec.md | 33 + .../specs/panorama-surface/spec.md | 41 + .../tasks.md | 24 + .../.openspec.yaml | 2 + .../design.md | 74 + .../proposal.md | 27 + .../specs/two-times-upscale/spec.md | 74 + .../tasks.md | 26 + .../validation.md | 32 + .../.openspec.yaml | 2 + .../design.md | 78 + .../proposal.md | 30 + .../specs/cutout-lasso-entry/spec.md | 23 + .../specs/projected-depth-surface/spec.md | 85 + .../tasks.md | 31 + .../.openspec.yaml | 2 + .../design.md | 77 + .../proposal.md | 29 + .../specs/image-depth-symmetry/spec.md | 74 + .../tasks.md | 29 + .../validation.md | 28 + .../.openspec.yaml | 2 + .../design.md | 55 + .../proposal.md | 24 + .../specs/texture-node-image-actions/spec.md | 85 + .../tasks.md | 20 + .../.openspec.yaml | 2 + .../design.md | 45 + .../proposal.md | 27 + .../specs/panorama-input-cropping/spec.md | 42 + .../tasks.md | 15 + .../.openspec.yaml | 2 + .../design.md | 64 + .../proposal.md | 27 + .../specs/depth-surface-strip-cleanup/spec.md | 69 + .../tasks.md | 16 + .../.openspec.yaml | 2 + .../design.md | 21 + .../proposal.md | 22 + .../specs/compact-repeat-arrangement/spec.md | 64 + .../tasks.md | 46 + .../.openspec.yaml | 2 + .../design.md | 77 + .../proposal.md | 28 + .../specs/post-cutout-symmetry/spec.md | 74 + .../specs/shell-normal-smoothing/spec.md | 19 + .../tasks.md | 27 + .../.openspec.yaml | 2 + .../design.md | 61 + .../proposal.md | 29 + .../specs/material-view-adaptation/spec.md | 108 + .../tasks.md | 32 + .../.openspec.yaml | 2 + .../design.md | 68 + .../proposal.md | 30 + .../specs/coreml-inference/spec.md | 69 + .../tasks.md | 18 + .../.openspec.yaml | 2 + .../design.md | 99 + .../proposal.md | 34 + .../specs/frame-edge-antialiasing/spec.md | 81 + .../specs/image-alpha-presentation/spec.md | 94 + .../tasks.md | 30 + .../.openspec.yaml | 2 + .../design.md | 69 + .../proposal.md | 25 + .../specs/cutout-edge-depth/spec.md | 65 + .../tasks.md | 28 + .../.openspec.yaml | 2 + .../design.md | 69 + .../proposal.md | 30 + .../specs/cutout-mesh-sampling/spec.md | 28 + .../specs/image-edit-results/spec.md | 43 + .../tasks.md | 24 + .../.openspec.yaml | 2 + .../design.md | 46 + .../proposal.md | 26 + .../specs/image-tool-ai-availability/spec.md | 53 + .../tasks.md | 21 + .../.openspec.yaml | 2 + .../design.md | 84 + .../experiment-cases.md | 32 + .../experiment.md | 40 + .../implementation.md | 64 + .../proposal.md | 30 + .../specs/cutout-adaptive-mesh/spec.md | 98 + .../tasks.md | 26 + .../.openspec.yaml | 2 + .../design.md | 52 + .../proposal.md | 26 + .../specs/relief-plane-depth-controls/spec.md | 73 + .../tasks.md | 21 + .../.openspec.yaml | 2 + .../design.md | 63 + .../proposal.md | 26 + .../specs/empty-image-edit-isolation/spec.md | 72 + .../tasks.md | 22 + .../.openspec.yaml | 2 + .../design.md | 43 + .../proposal.md | 23 + .../specs/joint-geometry-node-layout/spec.md | 45 + .../tasks.md | 15 + .../.openspec.yaml | 2 + .../design.md | 66 + .../proposal.md | 26 + .../polyline-gesture-interaction/spec.md | 61 + .../tasks.md | 18 + .../.openspec.yaml | 2 + .../design.md | 93 + .../proposal.md | 32 + .../specs/moge-depth-artifacts/spec.md | 113 + .../tasks.md | 23 + .../.openspec.yaml | 2 + .../design.md | 101 + .../proposal.md | 37 + .../specs/cutout-attribute-lifecycle/spec.md | 44 + .../cutout-geometry-node-efficiency/spec.md | 72 + .../tasks.md | 36 + .../.openspec.yaml | 2 + .../2026-09-17-organize-tool-cli/design.md | 44 + .../2026-09-17-organize-tool-cli/proposal.md | 24 + .../specs/developer-tool-cli/spec.md | 81 + .../2026-09-17-organize-tool-cli/tasks.md | 19 + .../.openspec.yaml | 2 + .../design.md | 52 + .../proposal.md | 28 + .../specs/cutout-boundary-padding/spec.md | 60 + .../tasks.md | 26 + .../.openspec.yaml | 2 + .../design.md | 102 + .../proposal.md | 34 + .../specs/crop-tool-options/spec.md | 118 + .../tasks.md | 34 + .../.openspec.yaml | 2 + .../design.md | 43 + .../proposal.md | 33 + .../specs/pinned-geometry-smoothing/spec.md | 105 + .../tasks.md | 36 + .../.openspec.yaml | 2 + .../design.md | 51 + .../proposal.md | 28 + .../specs/frame-transparent-rgb/spec.md | 91 + .../tasks.md | 16 + .../.openspec.yaml | 2 + .../design.md | 66 + .../proposal.md | 25 + .../specs/image-tool-interaction/spec.md | 60 + .../tasks.md | 18 + .../.openspec.yaml | 2 + .../design.md | 72 + .../proposal.md | 28 + .../specs/image-selection-processing/spec.md | 75 + .../tasks.md | 20 + .../.openspec.yaml | 2 + .../design.md | 36 + .../proposal.md | 21 + .../specs/panorama-surface-prototype/spec.md | 33 + .../tasks.md | 22 + .../.openspec.yaml | 2 + .../design.md | 61 + .../proposal.md | 25 + .../cutout-split-boundary-shaping/spec.md | 69 + .../tasks.md | 23 + .../.openspec.yaml | 2 + .../design.md | 72 + .../proposal.md | 28 + .../specs/cutout-symmetry-seam/spec.md | 104 + .../tasks.md | 23 + .../.openspec.yaml | 2 + .../design.md | 98 + .../proposal.md | 33 + .../specs/geometry-depth-controls/spec.md | 23 + .../specs/image-result-materials/spec.md | 16 + .../selection-content-processing/spec.md | 68 + .../tasks.md | 30 + .../.openspec.yaml | 2 + .../design.md | 79 + .../proposal.md | 27 + .../specs/model-inference-memory/spec.md | 61 + .../tasks.md | 24 + .../.openspec.yaml | 2 + .../design.md | 69 + .../proposal.md | 35 + .../maintainable-project-structure/spec.md | 37 + .../production-only-ai-workflows/spec.md | 45 + .../tasks.md | 53 + .../.openspec.yaml | 2 + .../design.md | 70 + .../proposal.md | 30 + .../specs/geometry-field-flow/spec.md | 57 + .../tasks.md | 29 + .../validation.md | 52 + .../.openspec.yaml | 2 + .../design.md | 33 + .../proposal.md | 27 + .../specs/geometry-node-smoothing/spec.md | 34 + .../tasks.md | 17 + .../.openspec.yaml | 3 + .../design.md | 97 + .../proposal.md | 28 + .../tasks.md | 17 + .../.openspec.yaml | 2 + .../design.md | 89 + .../proposal.md | 32 + .../specs/cutout-normal-policy/spec.md | 45 + .../specs/cutout-shape-presets/spec.md | 56 + .../specs/depth-cutout-volume/spec.md | 45 + .../tasks.md | 30 + .../validation.md | 24 + .../.openspec.yaml | 2 + .../design.md | 76 + .../proposal.md | 33 + .../specs/brush-stroke-processing/spec.md | 52 + .../specs/frame-projection-clipping/spec.md | 36 + .../specs/image-pixel-read-integrity/spec.md | 37 + .../tasks.md | 34 + .../.openspec.yaml | 2 + .../design.md | 128 + .../proposal.md | 32 + .../specs/frame-tool/spec.md | 172 ++ .../tasks.md | 38 + .../.openspec.yaml | 2 + .../design.md | 104 + .../proposal.md | 30 + .../specs/image-edit-tools/spec.md | 124 + .../tasks.md | 42 + .../.openspec.yaml | 2 + .../design.md | 100 + .../proposal.md | 30 + .../depth-surface-face-separation/spec.md | 131 + .../tasks.md | 67 + .../validation.md | 57 + .../.openspec.yaml | 2 + .../design.md | 36 + .../proposal.md | 23 + .../specs/cutout-depth-extension/spec.md | 49 + .../tasks.md | 13 + .../.openspec.yaml | 2 + .../design.md | 79 + .../proposal.md | 28 + .../depth-surface-stretch-culling/spec.md | 53 + .../tasks.md | 24 + .../.openspec.yaml | 2 + .../design.md | 55 + .../proposal.md | 25 + .../specs/conversion-source-images/spec.md | 93 + .../tasks.md | 16 + .../.openspec.yaml | 2 + .../design.md | 136 + .../proposal.md | 33 + .../specs/plane-conversion/spec.md | 109 + .../tasks.md | 43 + .../.openspec.yaml | 2 + .../design.md | 42 + .../proposal.md | 29 + .../specs/depth-split-selection/spec.md | 23 + .../tasks.md | 16 + .../.openspec.yaml | 2 + .../design.md | 54 + .../proposal.md | 26 + .../depth-scaled-tangent-normals/spec.md | 27 + .../tasks.md | 11 + .../.openspec.yaml | 2 + .../design.md | 57 + .../proposal.md | 25 + .../specs/depth-alpha-semantics/spec.md | 65 + .../tasks.md | 21 + .../.openspec.yaml | 2 + .../design.md | 54 + .../proposal.md | 29 + .../specs/panorama-mask-regions/spec.md | 91 + .../tasks.md | 37 + .../.openspec.yaml | 2 + .../design.md | 82 + .../proposal.md | 29 + .../selection-content-processing/spec.md | 72 + .../tasks.md | 30 + .../.openspec.yaml | 2 + .../design.md | 40 + .../proposal.md | 27 + .../specs/server-cache-display/spec.md | 16 + .../specs/server-lifecycle-controls/spec.md | 16 + .../tasks.md | 10 + .../.openspec.yaml | 2 + .../design.md | 117 + .../mirror-validation.json | 53 + .../proposal.md | 38 + .../retirement-results.json | 267 ++ .../retirement.json | 131 + .../specs/ai-model-tiers/spec.md | 42 + .../specs/background-removal-models/spec.md | 59 + .../specs/hat-upscale/spec.md | 49 + .../specs/model-asset-retirement/spec.md | 38 + .../tasks.md | 41 + .../validation.md | 94 + .../.openspec.yaml | 2 + .../design.md | 42 + .../proposal.md | 26 + .../specs/depth-node-options/spec.md | 47 + .../tasks.md | 15 + .../.openspec.yaml | 3 + .../design.md | 79 + .../proposal.md | 29 + .../tasks.md | 25 + .../validation.md | 62 + .../.openspec.yaml | 2 + .../design.md | 78 + .../proposal.md | 28 + .../specs/selection-rasterization/spec.md | 64 + .../tasks.md | 20 + .../.openspec.yaml | 2 + .../design.md | 68 + .../proposal.md | 28 + .../specs/depth-plane-alpha-culling/spec.md | 36 + .../separate-depth-relief-planes/spec.md | 50 + .../tasks.md | 39 + .../.openspec.yaml | 2 + .../design.md | 111 + .../proposal.md | 28 + .../specs/canonical-object-frame/spec.md | 63 + .../specs/depth-symmetry-orientation/spec.md | 43 + .../object-space-normal-alignment/spec.md | 35 + .../tasks.md | 31 + .../.openspec.yaml | 2 + .../design.md | 104 + .../proposal.md | 29 + .../specs/cutout-axis-convention/spec.md | 61 + .../tasks.md | 30 + .../.openspec.yaml | 3 + .../design.md | 99 + .../proposal.md | 28 + .../specs/frame-tool/spec.md | 70 + .../tasks.md | 22 + .../.openspec.yaml | 2 + .../design.md | 83 + .../proposal.md | 29 + .../specs/ai-input-validation/spec.md | 61 + .../ai-operator-failure-handling/spec.md | 33 + .../tasks.md | 30 + .../.openspec.yaml | 2 + .../design.md | 74 + .../proposal.md | 27 + .../specs/boundary-depth-smoothing/spec.md | 119 + .../tasks.md | 54 + .../.openspec.yaml | 2 + .../design.md | 75 + .../proposal.md | 26 + .../specs/depth-artifact-contract/spec.md | 38 + .../specs/unified-depth-plane/spec.md | 58 + .../tasks.md | 30 + .../.openspec.yaml | 2 + .../2026-09-17-unify-mask-cut-depth/design.md | 81 + .../proposal.md | 32 + .../specs/mask-cut-depth-sampling/spec.md | 99 + .../2026-09-17-unify-mask-cut-depth/tasks.md | 29 + .../.openspec.yaml | 2 + .../design.md | 71 + .../proposal.md | 28 + .../specs/clipboard-image-cache/spec.md | 43 + .../specs/material-color-images/spec.md | 82 + .../tasks.md | 25 + .../.openspec.yaml | 2 + .../design.md | 75 + .../proposal.md | 28 + .../specs/reference-depth-calibration/spec.md | 104 + .../2026-09-17-unify-reference-depth/tasks.md | 32 + .../.openspec.yaml | 2 + .../design.md | 91 + .../proposal.md | 28 + .../specs/image-selection/spec.md | 37 + .../tasks.md | 22 + .../.openspec.yaml | 2 + .../design.md | 38 + .../proposal.md | 24 + .../specs/pasted-brush-preview/spec.md | 41 + .../tasks.md | 13 + .../.openspec.yaml | 2 + .../design.md | 64 + .../proposal.md | 28 + .../specs/cutout-quality-meshing/spec.md | 71 + .../tasks.md | 52 + .../.openspec.yaml | 2 + .../design.md | 38 + .../proposal.md | 25 + .../specs/cutout-edge-length/spec.md | 65 + .../tasks.md | 17 + .../.openspec.yaml | 2 + .../design.md | 29 + .../proposal.md | 23 + .../specs/cutout-boundary-smoothing/spec.md | 30 + .../tasks.md | 9 + .../.openspec.yaml | 2 + .../separate-node-sources-and-tools/design.md | 112 + .../proposal.md | 35 + .../specs/developer-tool-cli/spec.md | 41 + .../specs/generated-node-assets/spec.md | 37 + .../maintainable-project-structure/spec.md | 21 + .../separate-node-sources-and-tools/tasks.md | 36 + .../.openspec.yaml | 2 + .../split-capability-environments/design.md | 77 + .../split-capability-environments/proposal.md | 28 + .../specs/capability-environments/spec.md | 45 + .../specs/developer-tool-cli/spec.md | 17 + .../split-capability-environments/tasks.md | 23 + openspec/config.yaml | 20 + openspec/specs/ai-input-validation/spec.md | 65 + openspec/specs/ai-model-tiers/spec.md | 42 + .../ai-operator-failure-handling/spec.md | 37 + .../specs/background-removal-models/spec.md | 59 + .../specs/boundary-depth-smoothing/spec.md | 123 + .../specs/brush-stroke-processing/spec.md | 52 + openspec/specs/canonical-object-frame/spec.md | 67 + openspec/specs/clipboard-image-cache/spec.md | 43 + .../specs/compact-repeat-arrangement/spec.md | 68 + .../specs/conversion-source-images/spec.md | 93 + openspec/specs/coreml-inference/spec.md | 73 + openspec/specs/crop-tool-options/spec.md | 118 + openspec/specs/cutout-adaptive-mesh/spec.md | 101 + .../specs/cutout-attribute-lifecycle/spec.md | 47 + openspec/specs/cutout-axis-convention/spec.md | 65 + .../specs/cutout-boundary-padding/spec.md | 64 + .../specs/cutout-boundary-smoothing/spec.md | 34 + openspec/specs/cutout-depth-extension/spec.md | 53 + openspec/specs/cutout-edge-depth/spec.md | 69 + openspec/specs/cutout-edge-length/spec.md | 69 + .../cutout-geometry-node-efficiency/spec.md | 75 + openspec/specs/cutout-lasso-entry/spec.md | 27 + openspec/specs/cutout-mesh-sampling/spec.md | 27 + openspec/specs/cutout-normal-policy/spec.md | 49 + openspec/specs/cutout-polyline/spec.md | 61 + openspec/specs/cutout-quality-meshing/spec.md | 75 + openspec/specs/cutout-shape-presets/spec.md | 60 + .../cutout-split-boundary-shaping/spec.md | 73 + openspec/specs/cutout-symmetry-seam/spec.md | 108 + openspec/specs/depth-alpha-semantics/spec.md | 65 + .../specs/depth-artifact-contract/spec.md | 42 + openspec/specs/depth-cutout-volume/spec.md | 49 + openspec/specs/depth-node-options/spec.md | 51 + .../specs/depth-plane-alpha-culling/spec.md | 40 + .../depth-scaled-tangent-normals/spec.md | 31 + openspec/specs/depth-split-selection/spec.md | 27 + .../depth-surface-face-separation/spec.md | 131 + .../depth-surface-stretch-culling/spec.md | 57 + .../specs/depth-surface-strip-cleanup/spec.md | 73 + .../specs/depth-symmetry-orientation/spec.md | 47 + openspec/specs/developer-tool-cli/spec.md | 81 + .../specs/empty-image-edit-isolation/spec.md | 76 + .../specs/frame-edge-antialiasing/spec.md | 85 + .../specs/frame-projection-clipping/spec.md | 36 + openspec/specs/frame-tool/spec.md | 244 ++ openspec/specs/frame-transparent-rgb/spec.md | 95 + .../specs/geometry-depth-controls/spec.md | 27 + openspec/specs/geometry-field-flow/spec.md | 61 + .../specs/geometry-node-smoothing/spec.md | 38 + openspec/specs/hat-upscale/spec.md | 49 + openspec/specs/hdr-background-removal/spec.md | 93 + .../specs/image-alpha-presentation/spec.md | 98 + openspec/specs/image-depth-symmetry/spec.md | 78 + openspec/specs/image-edit-results/spec.md | 42 + openspec/specs/image-edit-tools/spec.md | 128 + .../image-layer-alpha-adjustment/spec.md | 60 + .../specs/image-pixel-read-integrity/spec.md | 37 + openspec/specs/image-result-materials/spec.md | 20 + .../specs/image-selection-processing/spec.md | 75 + openspec/specs/image-selection/spec.md | 37 + .../specs/image-tool-ai-availability/spec.md | 57 + openspec/specs/image-tool-interaction/spec.md | 64 + .../specs/joint-geometry-node-layout/spec.md | 49 + .../maintainable-project-structure/spec.md | 41 + .../specs/mask-cut-depth-sampling/spec.md | 103 + openspec/specs/mask-editing/spec.md | 98 + openspec/specs/mask-mode-options/spec.md | 29 + openspec/specs/material-color-images/spec.md | 82 + .../specs/material-view-adaptation/spec.md | 112 + openspec/specs/model-asset-retirement/spec.md | 38 + openspec/specs/model-inference-memory/spec.md | 61 + openspec/specs/moge-depth-artifacts/spec.md | 113 + openspec/specs/moge3-model/spec.md | 73 + .../object-space-normal-alignment/spec.md | 39 + openspec/specs/panorama-conversion/spec.md | 37 + .../panorama-geometry-generation/spec.md | 37 + .../specs/panorama-input-cropping/spec.md | 46 + openspec/specs/panorama-mask-regions/spec.md | 95 + .../specs/panorama-surface-prototype/spec.md | 37 + openspec/specs/panorama-surface/spec.md | 45 + openspec/specs/pasted-brush-preview/spec.md | 45 + .../specs/pinned-geometry-smoothing/spec.md | 109 + openspec/specs/plane-conversion/spec.md | 113 + .../polyline-gesture-interaction/spec.md | 65 + openspec/specs/post-cutout-symmetry/spec.md | 78 + .../production-only-ai-workflows/spec.md | 49 + .../specs/projected-depth-surface/spec.md | 89 + .../specs/reference-depth-calibration/spec.md | 108 + .../specs/relief-plane-depth-controls/spec.md | 77 + .../selection-content-processing/spec.md | 143 + .../specs/selection-rasterization/spec.md | 68 + .../separate-depth-relief-planes/spec.md | 53 + openspec/specs/server-cache-display/spec.md | 20 + .../specs/server-lifecycle-controls/spec.md | 20 + openspec/specs/shell-normal-smoothing/spec.md | 23 + .../specs/texture-node-image-actions/spec.md | 85 + openspec/specs/two-times-upscale/spec.md | 78 + openspec/specs/unified-depth-plane/spec.md | 62 + pyproject.toml | 53 + src/anyimage/__init__.py | 69 + src/anyimage/blender_manifest.toml | 25 + src/anyimage/common/__init__.py | 1 + src/anyimage/common/ai.py | 78 + src/anyimage/common/color_image.py | 139 + src/anyimage/common/coordinate.py | 13 + src/anyimage/common/depth.py | 267 ++ src/anyimage/common/hdr_image.py | 177 ++ src/anyimage/common/image.py | 652 ++++ src/anyimage/common/image_target.py | 176 ++ src/anyimage/common/material.py | 271 ++ src/anyimage/common/node.py | 47 + src/anyimage/common/object.py | 66 + src/anyimage/common/selection.py | 260 ++ src/anyimage/common/viewport.py | 1170 +++++++ src/anyimage/licenses/scikit-image.txt | 152 + src/anyimage/licenses/tangle.txt | 21 + src/anyimage/menu.py | 99 + src/anyimage/operators/__init__.py | 33 + src/anyimage/operators/ai_setup.py | 157 + .../operators/clipboard_image/__init__.py | 16 + .../operators/clipboard_image/actions.py | 524 ++++ .../operators/clipboard_image/clipboard.py | 360 +++ .../operators/clipboard_image/operators.py | 202 ++ .../operators/convert_to_panorama/__init__.py | 6 + .../operators/convert_to_panorama/object.py | 67 + .../convert_to_panorama/operators.py | 107 + .../operators/convert_to_plane/__init__.py | 18 + .../operators/convert_to_plane/image_plane.py | 102 + .../operators/convert_to_plane/object.py | 157 + .../operators/convert_to_plane/operators.py | 207 ++ .../operators/cutout_tool/__init__.py | 10 + src/anyimage/operators/cutout_tool/balloon.py | 396 +++ .../operators/cutout_tool/boundary_padding.py | 177 ++ .../operators/cutout_tool/geometry.py | 653 ++++ .../operators/cutout_tool/interaction.py | 84 + src/anyimage/operators/cutout_tool/mesh.py | 434 +++ src/anyimage/operators/cutout_tool/object.py | 241 ++ .../operators/cutout_tool/operators.py | 487 +++ src/anyimage/operators/cutout_tool/polygon.py | 94 + src/anyimage/operators/cutout_tool/shape.py | 18 + src/anyimage/operators/cutout_tool/tangle.py | 2690 +++++++++++++++++ src/anyimage/operators/frame_tool/__init__.py | 7 + .../operators/frame_tool/compositing.py | 141 + .../operators/frame_tool/operators.py | 264 ++ .../operators/frame_tool/projection.py | 264 ++ src/anyimage/operators/mask_tool.py | 171 ++ .../operators/rectify_tool/__init__.py | 7 + .../operators/rectify_tool/geometry.py | 144 + .../operators/rectify_tool/operators.py | 412 +++ .../operators/rectify_tool/preview.py | 168 + src/anyimage/operators/remove_background.py | 112 + src/anyimage/operators/upscale.py | 132 + src/anyimage/panel.py | 107 + src/anyimage/preferences.py | 351 +++ src/anyimage/properties.py | 284 ++ src/anyimage/runtime.py | 46 + src/anyimage/server/__init__.py | 12 + src/anyimage/server/app.py | 54 + src/anyimage/server/geometry/__init__.py | 1 + src/anyimage/server/geometry/depth_texture.py | 116 + .../server/geometry/normal_texture.py | 67 + src/anyimage/server/geometry/panorama.py | 156 + .../server/geometry/prediction_artifacts.py | 97 + src/anyimage/server/jobs/__init__.py | 1 + src/anyimage/server/jobs/cutout.py | 26 + src/anyimage/server/jobs/depth_plane.py | 23 + src/anyimage/server/jobs/panorama.py | 74 + src/anyimage/server/jobs/remove_background.py | 67 + src/anyimage/server/jobs/upscale.py | 26 + src/anyimage/server/media/__init__.py | 27 + src/anyimage/server/media/input.py | 48 + src/anyimage/server/media/resolution.py | 34 + src/anyimage/server/model_catalog.py | 237 ++ src/anyimage/server/model_download.py | 447 +++ src/anyimage/server/model_manager.py | 202 ++ src/anyimage/server/models/__init__.py | 7 + src/anyimage/server/models/background.py | 93 + src/anyimage/server/models/geometry.py | 32 + src/anyimage/server/models/moge.py | 82 + src/anyimage/server/models/onnx_ben2.py | 59 + src/anyimage/server/models/onnx_birefnet.py | 41 + src/anyimage/server/models/onnx_moge2.py | 203 ++ src/anyimage/server/models/onnx_moge3.py | 159 + src/anyimage/server/models/onnx_runtime.py | 97 + src/anyimage/server/models/onnx_upscale.py | 159 + src/anyimage/server/models/upscale.py | 64 + tests/__init__.py | 0 tests/ai/__init__.py | 1 + tests/ai/test_background_alpha.py | 36 + tests/ai/test_background_models.py | 60 + tests/ai/test_geometry_artifacts.py | 255 ++ tests/ai/test_model_ben2_onnx.py | 75 + tests/ai/test_model_birefnet_onnx.py | 25 + tests/ai/test_model_geometry.py | 46 + tests/ai/test_model_inference.py | 105 + tests/ai/test_model_manager.py | 208 ++ tests/ai/test_model_moge2_onnx.py | 208 ++ tests/ai/test_model_moge3_onnx.py | 139 + tests/ai/test_model_onnx_runtime.py | 199 ++ tests/ai/test_model_upscale_onnx.py | 164 + tests/ai/test_panorama.py | 133 + tests/ai/test_prediction_artifacts.py | 104 + tests/ai/test_server_jobs.py | 259 ++ tests/anyimage/__init__.py | 0 tests/anyimage/common/__init__.py | 0 tests/anyimage/common/support.py | 73 + .../common/test_alpha_presentation.py | 226 ++ tests/anyimage/common/test_color_image.py | 172 ++ tests/anyimage/common/test_depth.py | 196 ++ .../anyimage/common/test_empty_image_edits.py | 194 ++ tests/anyimage/common/test_hdr_image.py | 189 ++ tests/anyimage/common/test_hdr_rgb_render.py | 80 + tests/anyimage/common/test_image_data.py | 108 + tests/anyimage/common/test_image_edit_tool.py | 212 ++ tests/anyimage/common/test_image_materials.py | 254 ++ tests/anyimage/common/test_image_target.py | 206 ++ .../anyimage/common/test_input_preparation.py | 30 + tests/anyimage/common/test_material_alpha.py | 34 + .../anyimage/common/test_material_settings.py | 42 + .../common/test_material_view_adaptation.py | 175 ++ tests/anyimage/common/test_modifier_inputs.py | 52 + tests/anyimage/common/test_selection.py | 192 ++ tests/anyimage/operators/__init__.py | 0 .../operators/test_ai_image_operators.py | 113 + .../operators/test_ai_input_failures.py | 74 + tests/anyimage/operators/test_ai_setup.py | 192 ++ .../operators/test_balloon_profiles.py | 78 + .../test_brush_preview_integration.py | 37 + .../anyimage/operators/test_brush_strokes.py | 129 + .../operators/test_clipboard_cache.py | 111 + .../operators/test_clipboard_image.py | 523 ++++ .../test_conversion_source_images.py | 190 ++ .../operators/test_cutout_boundary_padding.py | 143 + tests/anyimage/operators/test_cutout_depth.py | 40 + .../operators/test_cutout_edge_length.py | 147 + .../operators/test_cutout_geometry.py | 264 ++ .../operators/test_cutout_interaction.py | 283 ++ tests/anyimage/operators/test_cutout_mesh.py | 276 ++ .../anyimage/operators/test_cutout_objects.py | 512 ++++ .../operators/test_cutout_operators.py | 435 +++ .../operators/test_frame_antialiasing.py | 133 + .../operators/test_frame_compositing.py | 304 ++ .../operators/test_frame_projection.py | 322 ++ tests/anyimage/operators/test_frame_tool.py | 327 ++ .../anyimage/operators/test_hdr_background.py | 115 + .../operators/test_image_edit_integration.py | 247 ++ tests/anyimage/operators/test_mask_tool.py | 398 +++ tests/anyimage/operators/test_mask_undo.py | 67 + .../operators/test_native_ai_failures.py | 77 + .../operators/test_panorama_conversion.py | 224 ++ .../operators/test_plane_conversion.py | 70 + .../anyimage/operators/test_plane_objects.py | 320 ++ .../operators/test_plane_operators.py | 191 ++ tests/anyimage/operators/test_rectify_tool.py | 214 ++ .../operators/test_texture_node_actions.py | 226 ++ tests/anyimage/operators/test_upscale_undo.py | 46 + tests/anyimage/server/__init__.py | 0 tests/anyimage/server/runtime_support.py | 51 + tests/anyimage/server/support.py | 56 + .../anyimage/server/test_input_validation.py | 74 + tests/anyimage/server/test_job_server.py | 173 ++ tests/anyimage/server/test_model_download.py | 170 ++ .../server/test_model_download_jobs.py | 154 + tests/anyimage/test_addon_registration.py | 192 ++ tests/anyimage/test_image_menu.py | 98 + tests/anyimage/test_job_operator.py | 136 + tests/anyimage/test_preferences.py | 289 ++ tests/anyimage/test_server_panel.py | 113 + tests/conftest.py | 10 + tests/nodes/__init__.py | 1 + tests/nodes/test_boundary_depth.py | 102 + tests/nodes/test_boundary_smoothing.py | 209 ++ tests/nodes/test_cutout_boundary.py | 72 + tests/nodes/test_cutout_symmetry.py | 283 ++ tests/nodes/test_cutouts.py | 55 + tests/nodes/test_depth_cutout.py | 180 ++ tests/nodes/test_depth_relief_planes.py | 363 +++ tests/nodes/test_depth_strip_cleanup.py | 62 + tests/nodes/test_depth_surface_split.py | 244 ++ tests/nodes/test_image_depth_panorama.py | 355 +++ tests/nodes/test_image_layer.py | 38 + tests/nodes/test_image_plane.py | 141 + tests/nodes/test_normal_scale.py | 78 + tests/nodes/test_object_normal_rotation.py | 90 + tests/nodes/test_shadeless.py | 58 + tests/nodes/test_temporary_attributes.py | 35 + tests/support/__init__.py | 0 tests/support/blender.py | 198 ++ tests/support/color_image.py | 11 + tests/support/depth_surface.py | 133 + tests/support/hdr_image.py | 15 + tests/support/image_objects.py | 108 + tests/support/image_texture.py | 45 + tests/support/materials.py | 11 + tests/support/nodes.py | 11 + tests/support/paths.py | 4 + tests/support/planes.py | 79 + tests/tools/__init__.py | 0 tests/tools/models/__init__.py | 0 tests/tools/models/test_cli.py | 187 ++ tests/tools/nodes/__init__.py | 0 .../nodes/fixtures/projected_symmetry.json | 1 + tests/tools/nodes/test_arrangement.py | 175 ++ tests/tools/nodes/test_cli.py | 92 + tests/tools/nodes/test_inventory.py | 109 + tests/tools/test_docs.py | 80 + tests/tools/test_environments.py | 81 + tests/tools/test_manifest.py | 23 + tests/tools/test_pack.py | 426 +++ tools/__init__.py | 1 + tools/docs.py | 91 + tools/models/__init__.py | 1 + tools/models/birefnet_export.py | 108 + tools/models/cli.py | 262 ++ tools/models/deform_sampling.py | 47 + tools/models/exports.py | 109 + tools/models/hat_export.py | 95 + tools/models/moge3_export.py | 167 + tools/models/onnx_weights.py | 49 + tools/nodes/__init__.py | 1 + tools/nodes/arrangement/__init__.py | 1 + tools/nodes/arrangement/arrange.py | 130 + tools/nodes/arrangement/branches.py | 80 + tools/nodes/arrangement/connections.py | 20 + tools/nodes/arrangement/dimensions.json | 93 + tools/nodes/arrangement/dimensions.py | 65 + tools/nodes/arrangement/flow.py | 94 + tools/nodes/arrangement/layout.py | 407 +++ tools/nodes/arrangement/zones.py | 42 + tools/nodes/build.py | 49 + tools/nodes/check.py | 97 + tools/nodes/cli.py | 67 + tools/nodes/preview/__init__.py | 1 + tools/nodes/preview/export.py | 140 + tools/nodes/preview/template.html | 303 ++ tools/pack.py | 258 ++ uv.lock | 1350 +++++++++ 837 files changed, 67239 insertions(+) create mode 100644 .codex/skills/openspec-apply-change/SKILL.md create mode 100644 .codex/skills/openspec-archive-change/SKILL.md create mode 100644 .codex/skills/openspec-explore/SKILL.md create mode 100644 .codex/skills/openspec-propose/SKILL.md create mode 100644 .gitattributes create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/test.yml create mode 100644 .gitignore create mode 100644 .python-version create mode 100644 AGENTS.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 docs/assets/favicon.png create mode 100644 docs/assets/fonts/fontutti.woff2 create mode 100644 docs/assets/logo.png create mode 100644 docs/getting-started/installation.md create mode 100644 docs/index.md create mode 100644 docs/internals/architecture.md create mode 100644 docs/internals/common.md create mode 100644 docs/internals/development.md create mode 100644 docs/internals/index.md create mode 100644 docs/internals/node-assets.md create mode 100644 docs/internals/operators/ai-setup.md create mode 100644 docs/internals/operators/clipboard-image.md create mode 100644 docs/internals/operators/convert-to-panorama.md create mode 100644 docs/internals/operators/convert-to-plane.md create mode 100644 docs/internals/operators/cutout-tool.md create mode 100644 docs/internals/operators/frame.md create mode 100644 docs/internals/operators/index.md create mode 100644 docs/internals/operators/mask.md create mode 100644 docs/internals/operators/rectify.md create mode 100644 docs/internals/operators/remove-background.md create mode 100644 docs/internals/operators/upscale.md create mode 100644 docs/internals/outputs.md create mode 100644 docs/internals/runtime.md create mode 100644 docs/javascripts/extra.js create mode 100644 docs/stylesheets/extra.css create mode 100644 mkdocs.yml create mode 100644 nodes/__init__.py create mode 100644 nodes/common/__init__.py create mode 100644 nodes/common/boundary_smoothing.py create mode 100644 nodes/common/cutout.py create mode 100644 nodes/common/cutout_boundary.py create mode 100644 nodes/common/depth_surface.py create mode 100644 nodes/common/direction.py create mode 100644 nodes/common/material_slots.py create mode 100644 nodes/common/nodes.py create mode 100644 nodes/common/normal_map.py create mode 100644 nodes/common/reference_plane.py create mode 100644 nodes/common/shader.py create mode 100644 nodes/common/smoothing.py create mode 100644 nodes/common/validity.py create mode 100644 nodes/groups/__init__.py create mode 100644 nodes/groups/image_cutout.py create mode 100644 nodes/groups/image_cutout_symmetry.py create mode 100644 nodes/groups/image_depth_cutout.py create mode 100644 nodes/groups/image_depth_layer.py create mode 100644 nodes/groups/image_depth_panorama.py create mode 100644 nodes/groups/image_depth_plane.py create mode 100644 nodes/groups/image_layer.py create mode 100644 nodes/groups/image_plane.py create mode 100644 nodes/groups/image_relief_plane.py create mode 100644 nodes/groups/shadeless.py create mode 100644 openspec/changes/archive/2026-09-17-add-ben2-hdr-support/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-add-ben2-hdr-support/design.md create mode 100644 openspec/changes/archive/2026-09-17-add-ben2-hdr-support/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-add-ben2-hdr-support/specs/hdr-background-removal/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-ben2-hdr-support/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-add-ben2-hdr-support/validation.md create mode 100644 openspec/changes/archive/2026-09-17-add-cutout-polyline/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-add-cutout-polyline/design.md create mode 100644 openspec/changes/archive/2026-09-17-add-cutout-polyline/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-add-cutout-polyline/specs/cutout-polyline/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-cutout-polyline/specs/mask-mode-options/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-cutout-polyline/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-add-image-layer-alpha-adjustment/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-add-image-layer-alpha-adjustment/design.md create mode 100644 openspec/changes/archive/2026-09-17-add-image-layer-alpha-adjustment/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-add-image-layer-alpha-adjustment/specs/image-layer-alpha-adjustment/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-image-layer-alpha-adjustment/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-add-live-mask-preview-and-polyline/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-add-live-mask-preview-and-polyline/design.md create mode 100644 openspec/changes/archive/2026-09-17-add-live-mask-preview-and-polyline/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-add-live-mask-preview-and-polyline/specs/mask-editing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-live-mask-preview-and-polyline/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-add-moge3-model/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-add-moge3-model/design.md create mode 100644 openspec/changes/archive/2026-09-17-add-moge3-model/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-add-moge3-model/specs/moge3-model/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-moge3-model/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-add-moge3-model/validation.md create mode 100644 openspec/changes/archive/2026-09-17-add-panorama-conversion/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-add-panorama-conversion/design.md create mode 100644 openspec/changes/archive/2026-09-17-add-panorama-conversion/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-add-panorama-conversion/specs/panorama-conversion/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-panorama-conversion/specs/panorama-geometry-generation/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-panorama-conversion/specs/panorama-surface/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-panorama-conversion/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-add-pisa-sr-two-times-upscale/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-add-pisa-sr-two-times-upscale/design.md create mode 100644 openspec/changes/archive/2026-09-17-add-pisa-sr-two-times-upscale/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-add-pisa-sr-two-times-upscale/specs/two-times-upscale/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-pisa-sr-two-times-upscale/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-add-pisa-sr-two-times-upscale/validation.md create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-plane/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-plane/design.md create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-plane/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-plane/specs/cutout-lasso-entry/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-plane/specs/projected-depth-surface/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-plane/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-symmetry/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-symmetry/design.md create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-symmetry/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-symmetry/specs/image-depth-symmetry/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-symmetry/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-add-projected-depth-symmetry/validation.md create mode 100644 openspec/changes/archive/2026-09-17-add-texture-node-image-actions/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-add-texture-node-image-actions/design.md create mode 100644 openspec/changes/archive/2026-09-17-add-texture-node-image-actions/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-add-texture-node-image-actions/specs/texture-node-image-actions/spec.md create mode 100644 openspec/changes/archive/2026-09-17-add-texture-node-image-actions/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-auto-crop-panorama-input/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-auto-crop-panorama-input/design.md create mode 100644 openspec/changes/archive/2026-09-17-auto-crop-panorama-input/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-auto-crop-panorama-input/specs/panorama-input-cropping/spec.md create mode 100644 openspec/changes/archive/2026-09-17-auto-crop-panorama-input/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-clean-depth-surface-strip-faces/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-clean-depth-surface-strip-faces/design.md create mode 100644 openspec/changes/archive/2026-09-17-clean-depth-surface-strip-faces/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-clean-depth-surface-strip-faces/specs/depth-surface-strip-cleanup/spec.md create mode 100644 openspec/changes/archive/2026-09-17-clean-depth-surface-strip-faces/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-compact-repeat-node-arrangement/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-compact-repeat-node-arrangement/design.md create mode 100644 openspec/changes/archive/2026-09-17-compact-repeat-node-arrangement/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-compact-repeat-node-arrangement/specs/compact-repeat-arrangement/spec.md create mode 100644 openspec/changes/archive/2026-09-17-compact-repeat-node-arrangement/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-compose-depth-cutout-symmetry/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-compose-depth-cutout-symmetry/design.md create mode 100644 openspec/changes/archive/2026-09-17-compose-depth-cutout-symmetry/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-compose-depth-cutout-symmetry/specs/post-cutout-symmetry/spec.md create mode 100644 openspec/changes/archive/2026-09-17-compose-depth-cutout-symmetry/specs/shell-normal-smoothing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-compose-depth-cutout-symmetry/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-configure-material-view-adaptation/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-configure-material-view-adaptation/design.md create mode 100644 openspec/changes/archive/2026-09-17-configure-material-view-adaptation/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-configure-material-view-adaptation/specs/material-view-adaptation/spec.md create mode 100644 openspec/changes/archive/2026-09-17-configure-material-view-adaptation/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-correct-coreml-device-support/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-correct-coreml-device-support/design.md create mode 100644 openspec/changes/archive/2026-09-17-correct-coreml-device-support/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-correct-coreml-device-support/specs/coreml-inference/spec.md create mode 100644 openspec/changes/archive/2026-09-17-correct-coreml-device-support/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-enable-image-alpha-blending-and-premul/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-enable-image-alpha-blending-and-premul/design.md create mode 100644 openspec/changes/archive/2026-09-17-enable-image-alpha-blending-and-premul/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-enable-image-alpha-blending-and-premul/specs/frame-edge-antialiasing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-enable-image-alpha-blending-and-premul/specs/image-alpha-presentation/spec.md create mode 100644 openspec/changes/archive/2026-09-17-enable-image-alpha-blending-and-premul/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-extend-cutout-edge-depth/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-extend-cutout-edge-depth/design.md create mode 100644 openspec/changes/archive/2026-09-17-extend-cutout-edge-depth/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-extend-cutout-edge-depth/specs/cutout-edge-depth/spec.md create mode 100644 openspec/changes/archive/2026-09-17-extend-cutout-edge-depth/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-fix-cutout-density-and-image-edit-names/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-fix-cutout-density-and-image-edit-names/design.md create mode 100644 openspec/changes/archive/2026-09-17-fix-cutout-density-and-image-edit-names/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-fix-cutout-density-and-image-edit-names/specs/cutout-mesh-sampling/spec.md create mode 100644 openspec/changes/archive/2026-09-17-fix-cutout-density-and-image-edit-names/specs/image-edit-results/spec.md create mode 100644 openspec/changes/archive/2026-09-17-fix-cutout-density-and-image-edit-names/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-gate-cutout-ai-options/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-gate-cutout-ai-options/design.md create mode 100644 openspec/changes/archive/2026-09-17-gate-cutout-ai-options/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-gate-cutout-ai-options/specs/image-tool-ai-availability/spec.md create mode 100644 openspec/changes/archive/2026-09-17-gate-cutout-ai-options/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-improve-cutout-adaptive-mesh/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-improve-cutout-adaptive-mesh/design.md create mode 100644 openspec/changes/archive/2026-09-17-improve-cutout-adaptive-mesh/experiment-cases.md create mode 100644 openspec/changes/archive/2026-09-17-improve-cutout-adaptive-mesh/experiment.md create mode 100644 openspec/changes/archive/2026-09-17-improve-cutout-adaptive-mesh/implementation.md create mode 100644 openspec/changes/archive/2026-09-17-improve-cutout-adaptive-mesh/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-improve-cutout-adaptive-mesh/specs/cutout-adaptive-mesh/spec.md create mode 100644 openspec/changes/archive/2026-09-17-improve-cutout-adaptive-mesh/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-improve-relief-depth-controls/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-improve-relief-depth-controls/design.md create mode 100644 openspec/changes/archive/2026-09-17-improve-relief-depth-controls/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-improve-relief-depth-controls/specs/relief-plane-depth-controls/spec.md create mode 100644 openspec/changes/archive/2026-09-17-improve-relief-depth-controls/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-isolate-shared-empty-image-edits/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-isolate-shared-empty-image-edits/design.md create mode 100644 openspec/changes/archive/2026-09-17-isolate-shared-empty-image-edits/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-isolate-shared-empty-image-edits/specs/empty-image-edit-isolation/spec.md create mode 100644 openspec/changes/archive/2026-09-17-isolate-shared-empty-image-edits/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-joint-geometry-node-layout/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-joint-geometry-node-layout/design.md create mode 100644 openspec/changes/archive/2026-09-17-joint-geometry-node-layout/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-joint-geometry-node-layout/specs/joint-geometry-node-layout/spec.md create mode 100644 openspec/changes/archive/2026-09-17-joint-geometry-node-layout/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-match-polyline-gesture-interaction/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-match-polyline-gesture-interaction/design.md create mode 100644 openspec/changes/archive/2026-09-17-match-polyline-gesture-interaction/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-match-polyline-gesture-interaction/specs/polyline-gesture-interaction/spec.md create mode 100644 openspec/changes/archive/2026-09-17-match-polyline-gesture-interaction/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-normalize-moge-alpha-depth/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-normalize-moge-alpha-depth/design.md create mode 100644 openspec/changes/archive/2026-09-17-normalize-moge-alpha-depth/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-normalize-moge-alpha-depth/specs/moge-depth-artifacts/spec.md create mode 100644 openspec/changes/archive/2026-09-17-normalize-moge-alpha-depth/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-optimize-cutout-geometry-nodes/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-optimize-cutout-geometry-nodes/design.md create mode 100644 openspec/changes/archive/2026-09-17-optimize-cutout-geometry-nodes/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-optimize-cutout-geometry-nodes/specs/cutout-attribute-lifecycle/spec.md create mode 100644 openspec/changes/archive/2026-09-17-optimize-cutout-geometry-nodes/specs/cutout-geometry-node-efficiency/spec.md create mode 100644 openspec/changes/archive/2026-09-17-optimize-cutout-geometry-nodes/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-organize-tool-cli/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-organize-tool-cli/design.md create mode 100644 openspec/changes/archive/2026-09-17-organize-tool-cli/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-organize-tool-cli/specs/developer-tool-cli/spec.md create mode 100644 openspec/changes/archive/2026-09-17-organize-tool-cli/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-pad-cutout-material-edges/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-pad-cutout-material-edges/design.md create mode 100644 openspec/changes/archive/2026-09-17-pad-cutout-material-edges/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-pad-cutout-material-edges/specs/cutout-boundary-padding/spec.md create mode 100644 openspec/changes/archive/2026-09-17-pad-cutout-material-edges/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-persist-image-tool-options/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-persist-image-tool-options/design.md create mode 100644 openspec/changes/archive/2026-09-17-persist-image-tool-options/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-persist-image-tool-options/specs/crop-tool-options/spec.md create mode 100644 openspec/changes/archive/2026-09-17-persist-image-tool-options/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-pin-geometry-node-smoothing/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-pin-geometry-node-smoothing/design.md create mode 100644 openspec/changes/archive/2026-09-17-pin-geometry-node-smoothing/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-pin-geometry-node-smoothing/specs/pinned-geometry-smoothing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-pin-geometry-node-smoothing/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-preserve-frame-bottom-layer-rgb/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-preserve-frame-bottom-layer-rgb/design.md create mode 100644 openspec/changes/archive/2026-09-17-preserve-frame-bottom-layer-rgb/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-preserve-frame-bottom-layer-rgb/specs/frame-transparent-rgb/spec.md create mode 100644 openspec/changes/archive/2026-09-17-preserve-frame-bottom-layer-rgb/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-preserve-image-tool-source-on-empty/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-preserve-image-tool-source-on-empty/design.md create mode 100644 openspec/changes/archive/2026-09-17-preserve-image-tool-source-on-empty/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-preserve-image-tool-source-on-empty/specs/image-tool-interaction/spec.md create mode 100644 openspec/changes/archive/2026-09-17-preserve-image-tool-source-on-empty/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-process-image-selection-once/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-process-image-selection-once/design.md create mode 100644 openspec/changes/archive/2026-09-17-process-image-selection-once/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-process-image-selection-once/specs/image-selection-processing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-process-image-selection-once/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-prototype-panorama-surface/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-prototype-panorama-surface/design.md create mode 100644 openspec/changes/archive/2026-09-17-prototype-panorama-surface/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-prototype-panorama-surface/specs/panorama-surface-prototype/spec.md create mode 100644 openspec/changes/archive/2026-09-17-prototype-panorama-surface/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-refine-cutout-split-boundaries/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-refine-cutout-split-boundaries/design.md create mode 100644 openspec/changes/archive/2026-09-17-refine-cutout-split-boundaries/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-refine-cutout-split-boundaries/specs/cutout-split-boundary-shaping/spec.md create mode 100644 openspec/changes/archive/2026-09-17-refine-cutout-split-boundaries/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-refine-cutout-symmetry-seam/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-refine-cutout-symmetry-seam/design.md create mode 100644 openspec/changes/archive/2026-09-17-refine-cutout-symmetry-seam/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-refine-cutout-symmetry-seam/specs/cutout-symmetry-seam/spec.md create mode 100644 openspec/changes/archive/2026-09-17-refine-cutout-symmetry-seam/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-refine-image-output-semantics/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-refine-image-output-semantics/design.md create mode 100644 openspec/changes/archive/2026-09-17-refine-image-output-semantics/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-refine-image-output-semantics/specs/geometry-depth-controls/spec.md create mode 100644 openspec/changes/archive/2026-09-17-refine-image-output-semantics/specs/image-result-materials/spec.md create mode 100644 openspec/changes/archive/2026-09-17-refine-image-output-semantics/specs/selection-content-processing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-refine-image-output-semantics/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-release-model-inference-memory/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-release-model-inference-memory/design.md create mode 100644 openspec/changes/archive/2026-09-17-release-model-inference-memory/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-release-model-inference-memory/specs/model-inference-memory/spec.md create mode 100644 openspec/changes/archive/2026-09-17-release-model-inference-memory/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-remove-debug-workflows/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-remove-debug-workflows/design.md create mode 100644 openspec/changes/archive/2026-09-17-remove-debug-workflows/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-remove-debug-workflows/specs/maintainable-project-structure/spec.md create mode 100644 openspec/changes/archive/2026-09-17-remove-debug-workflows/specs/production-only-ai-workflows/spec.md create mode 100644 openspec/changes/archive/2026-09-17-remove-debug-workflows/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-remove-geometry-capture-attributes/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-remove-geometry-capture-attributes/design.md create mode 100644 openspec/changes/archive/2026-09-17-remove-geometry-capture-attributes/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-remove-geometry-capture-attributes/specs/geometry-field-flow/spec.md create mode 100644 openspec/changes/archive/2026-09-17-remove-geometry-capture-attributes/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-remove-geometry-capture-attributes/validation.md create mode 100644 openspec/changes/archive/2026-09-17-remove-geometry-node-smoothing/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-remove-geometry-node-smoothing/design.md create mode 100644 openspec/changes/archive/2026-09-17-remove-geometry-node-smoothing/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-remove-geometry-node-smoothing/specs/geometry-node-smoothing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-remove-geometry-node-smoothing/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-reorganize-common-modules/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-reorganize-common-modules/design.md create mode 100644 openspec/changes/archive/2026-09-17-reorganize-common-modules/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-reorganize-common-modules/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-reorganize-cutout-shapes/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-reorganize-cutout-shapes/design.md create mode 100644 openspec/changes/archive/2026-09-17-reorganize-cutout-shapes/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-reorganize-cutout-shapes/specs/cutout-normal-policy/spec.md create mode 100644 openspec/changes/archive/2026-09-17-reorganize-cutout-shapes/specs/cutout-shape-presets/spec.md create mode 100644 openspec/changes/archive/2026-09-17-reorganize-cutout-shapes/specs/depth-cutout-volume/spec.md create mode 100644 openspec/changes/archive/2026-09-17-reorganize-cutout-shapes/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-reorganize-cutout-shapes/validation.md create mode 100644 openspec/changes/archive/2026-09-17-repair-image-edit-pipelines/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-repair-image-edit-pipelines/design.md create mode 100644 openspec/changes/archive/2026-09-17-repair-image-edit-pipelines/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-repair-image-edit-pipelines/specs/brush-stroke-processing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-repair-image-edit-pipelines/specs/frame-projection-clipping/spec.md create mode 100644 openspec/changes/archive/2026-09-17-repair-image-edit-pipelines/specs/image-pixel-read-integrity/spec.md create mode 100644 openspec/changes/archive/2026-09-17-repair-image-edit-pipelines/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-replace-crop-box-with-frame/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-replace-crop-box-with-frame/design.md create mode 100644 openspec/changes/archive/2026-09-17-replace-crop-box-with-frame/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-replace-crop-box-with-frame/specs/frame-tool/spec.md create mode 100644 openspec/changes/archive/2026-09-17-replace-crop-box-with-frame/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-replace-crop-with-mask-and-rectify/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-replace-crop-with-mask-and-rectify/design.md create mode 100644 openspec/changes/archive/2026-09-17-replace-crop-with-mask-and-rectify/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-replace-crop-with-mask-and-rectify/specs/image-edit-tools/spec.md create mode 100644 openspec/changes/archive/2026-09-17-replace-crop-with-mask-and-rectify/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-replace-depth-surface-stretch-with-split/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-replace-depth-surface-stretch-with-split/design.md create mode 100644 openspec/changes/archive/2026-09-17-replace-depth-surface-stretch-with-split/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-replace-depth-surface-stretch-with-split/specs/depth-surface-face-separation/spec.md create mode 100644 openspec/changes/archive/2026-09-17-replace-depth-surface-stretch-with-split/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-replace-depth-surface-stretch-with-split/validation.md create mode 100644 openspec/changes/archive/2026-09-17-restore-cutout-depth-extension/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-restore-cutout-depth-extension/design.md create mode 100644 openspec/changes/archive/2026-09-17-restore-cutout-depth-extension/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-restore-cutout-depth-extension/specs/cutout-depth-extension/spec.md create mode 100644 openspec/changes/archive/2026-09-17-restore-cutout-depth-extension/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-restore-depth-surface-stretch-culling/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-restore-depth-surface-stretch-culling/design.md create mode 100644 openspec/changes/archive/2026-09-17-restore-depth-surface-stretch-culling/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-restore-depth-surface-stretch-culling/specs/depth-surface-stretch-culling/spec.md create mode 100644 openspec/changes/archive/2026-09-17-restore-depth-surface-stretch-culling/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-reuse-conversion-source-images/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-reuse-conversion-source-images/design.md create mode 100644 openspec/changes/archive/2026-09-17-reuse-conversion-source-images/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-reuse-conversion-source-images/specs/conversion-source-images/spec.md create mode 100644 openspec/changes/archive/2026-09-17-reuse-conversion-source-images/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-rework-plane-conversion/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-rework-plane-conversion/design.md create mode 100644 openspec/changes/archive/2026-09-17-rework-plane-conversion/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-rework-plane-conversion/specs/plane-conversion/spec.md create mode 100644 openspec/changes/archive/2026-09-17-rework-plane-conversion/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-scale-depth-split-by-depth-scale/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-scale-depth-split-by-depth-scale/design.md create mode 100644 openspec/changes/archive/2026-09-17-scale-depth-split-by-depth-scale/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-scale-depth-split-by-depth-scale/specs/depth-split-selection/spec.md create mode 100644 openspec/changes/archive/2026-09-17-scale-depth-split-by-depth-scale/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-scale-tangent-normals-with-depth/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-scale-tangent-normals-with-depth/design.md create mode 100644 openspec/changes/archive/2026-09-17-scale-tangent-normals-with-depth/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-scale-tangent-normals-with-depth/specs/depth-scaled-tangent-normals/spec.md create mode 100644 openspec/changes/archive/2026-09-17-scale-tangent-normals-with-depth/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-separate-depth-alpha-and-model-input/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-separate-depth-alpha-and-model-input/design.md create mode 100644 openspec/changes/archive/2026-09-17-separate-depth-alpha-and-model-input/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-separate-depth-alpha-and-model-input/specs/depth-alpha-semantics/spec.md create mode 100644 openspec/changes/archive/2026-09-17-separate-depth-alpha-and-model-input/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-separate-panorama-mask-regions/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-separate-panorama-mask-regions/design.md create mode 100644 openspec/changes/archive/2026-09-17-separate-panorama-mask-regions/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-separate-panorama-mask-regions/specs/panorama-mask-regions/spec.md create mode 100644 openspec/changes/archive/2026-09-17-separate-panorama-mask-regions/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-separate-selection-from-image-content/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-separate-selection-from-image-content/design.md create mode 100644 openspec/changes/archive/2026-09-17-separate-selection-from-image-content/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-separate-selection-from-image-content/specs/selection-content-processing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-separate-selection-from-image-content/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-show-server-controls-while-running/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-show-server-controls-while-running/design.md create mode 100644 openspec/changes/archive/2026-09-17-show-server-controls-while-running/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-show-server-controls-while-running/specs/server-cache-display/spec.md create mode 100644 openspec/changes/archive/2026-09-17-show-server-controls-while-running/specs/server-lifecycle-controls/spec.md create mode 100644 openspec/changes/archive/2026-09-17-show-server-controls-while-running/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/design.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/mirror-validation.json create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/retirement-results.json create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/retirement.json create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/specs/ai-model-tiers/spec.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/specs/background-removal-models/spec.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/specs/hat-upscale/spec.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/specs/model-asset-retirement/spec.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-ai-model-tiers/validation.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-depth-group-options/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-simplify-depth-group-options/design.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-depth-group-options/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-depth-group-options/specs/depth-node-options/spec.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-depth-group-options/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-node-attribute-flow/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-simplify-node-attribute-flow/design.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-node-attribute-flow/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-node-attribute-flow/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-node-attribute-flow/validation.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-selection-rasterization/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-simplify-selection-rasterization/design.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-selection-rasterization/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-selection-rasterization/specs/selection-rasterization/spec.md create mode 100644 openspec/changes/archive/2026-09-17-simplify-selection-rasterization/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-split-depth-and-relief-planes/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-split-depth-and-relief-planes/design.md create mode 100644 openspec/changes/archive/2026-09-17-split-depth-and-relief-planes/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-split-depth-and-relief-planes/specs/depth-plane-alpha-culling/spec.md create mode 100644 openspec/changes/archive/2026-09-17-split-depth-and-relief-planes/specs/separate-depth-relief-planes/spec.md create mode 100644 openspec/changes/archive/2026-09-17-split-depth-and-relief-planes/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-standardize-blender-object-coordinates/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-standardize-blender-object-coordinates/design.md create mode 100644 openspec/changes/archive/2026-09-17-standardize-blender-object-coordinates/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-standardize-blender-object-coordinates/specs/canonical-object-frame/spec.md create mode 100644 openspec/changes/archive/2026-09-17-standardize-blender-object-coordinates/specs/depth-symmetry-orientation/spec.md create mode 100644 openspec/changes/archive/2026-09-17-standardize-blender-object-coordinates/specs/object-space-normal-alignment/spec.md create mode 100644 openspec/changes/archive/2026-09-17-standardize-blender-object-coordinates/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-standardize-cutout-z-axis/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-standardize-cutout-z-axis/design.md create mode 100644 openspec/changes/archive/2026-09-17-standardize-cutout-z-axis/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-standardize-cutout-z-axis/specs/cutout-axis-convention/spec.md create mode 100644 openspec/changes/archive/2026-09-17-standardize-cutout-z-axis/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-support-frame-view-plane-intersections/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-support-frame-view-plane-intersections/design.md create mode 100644 openspec/changes/archive/2026-09-17-support-frame-view-plane-intersections/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-support-frame-view-plane-intersections/specs/frame-tool/spec.md create mode 100644 openspec/changes/archive/2026-09-17-support-frame-view-plane-intersections/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-unify-ai-input-validation/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-unify-ai-input-validation/design.md create mode 100644 openspec/changes/archive/2026-09-17-unify-ai-input-validation/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-unify-ai-input-validation/specs/ai-input-validation/spec.md create mode 100644 openspec/changes/archive/2026-09-17-unify-ai-input-validation/specs/ai-operator-failure-handling/spec.md create mode 100644 openspec/changes/archive/2026-09-17-unify-ai-input-validation/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-unify-boundary-depth-smoothing/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-unify-boundary-depth-smoothing/design.md create mode 100644 openspec/changes/archive/2026-09-17-unify-boundary-depth-smoothing/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-unify-boundary-depth-smoothing/specs/boundary-depth-smoothing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-unify-boundary-depth-smoothing/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-unify-depth-plane-and-artifact/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-unify-depth-plane-and-artifact/design.md create mode 100644 openspec/changes/archive/2026-09-17-unify-depth-plane-and-artifact/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-unify-depth-plane-and-artifact/specs/depth-artifact-contract/spec.md create mode 100644 openspec/changes/archive/2026-09-17-unify-depth-plane-and-artifact/specs/unified-depth-plane/spec.md create mode 100644 openspec/changes/archive/2026-09-17-unify-depth-plane-and-artifact/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-unify-mask-cut-depth/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-unify-mask-cut-depth/design.md create mode 100644 openspec/changes/archive/2026-09-17-unify-mask-cut-depth/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-unify-mask-cut-depth/specs/mask-cut-depth-sampling/spec.md create mode 100644 openspec/changes/archive/2026-09-17-unify-mask-cut-depth/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-unify-material-color-images/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-unify-material-color-images/design.md create mode 100644 openspec/changes/archive/2026-09-17-unify-material-color-images/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-unify-material-color-images/specs/clipboard-image-cache/spec.md create mode 100644 openspec/changes/archive/2026-09-17-unify-material-color-images/specs/material-color-images/spec.md create mode 100644 openspec/changes/archive/2026-09-17-unify-material-color-images/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-unify-reference-depth/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-unify-reference-depth/design.md create mode 100644 openspec/changes/archive/2026-09-17-unify-reference-depth/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-unify-reference-depth/specs/reference-depth-calibration/spec.md create mode 100644 openspec/changes/archive/2026-09-17-unify-reference-depth/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-unify-selection-terminology/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-unify-selection-terminology/design.md create mode 100644 openspec/changes/archive/2026-09-17-unify-selection-terminology/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-unify-selection-terminology/specs/image-selection/spec.md create mode 100644 openspec/changes/archive/2026-09-17-unify-selection-terminology/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-update-pasted-brush-preview/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-update-pasted-brush-preview/design.md create mode 100644 openspec/changes/archive/2026-09-17-update-pasted-brush-preview/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-update-pasted-brush-preview/specs/pasted-brush-preview/spec.md create mode 100644 openspec/changes/archive/2026-09-17-update-pasted-brush-preview/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-use-tangle-cutout-meshing/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-use-tangle-cutout-meshing/design.md create mode 100644 openspec/changes/archive/2026-09-17-use-tangle-cutout-meshing/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-use-tangle-cutout-meshing/specs/cutout-quality-meshing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-use-tangle-cutout-meshing/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-use-world-space-cutout-edge-length/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-use-world-space-cutout-edge-length/design.md create mode 100644 openspec/changes/archive/2026-09-17-use-world-space-cutout-edge-length/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-use-world-space-cutout-edge-length/specs/cutout-edge-length/spec.md create mode 100644 openspec/changes/archive/2026-09-17-use-world-space-cutout-edge-length/tasks.md create mode 100644 openspec/changes/archive/2026-09-17-weight-cutout-boundary-smoothing/.openspec.yaml create mode 100644 openspec/changes/archive/2026-09-17-weight-cutout-boundary-smoothing/design.md create mode 100644 openspec/changes/archive/2026-09-17-weight-cutout-boundary-smoothing/proposal.md create mode 100644 openspec/changes/archive/2026-09-17-weight-cutout-boundary-smoothing/specs/cutout-boundary-smoothing/spec.md create mode 100644 openspec/changes/archive/2026-09-17-weight-cutout-boundary-smoothing/tasks.md create mode 100644 openspec/changes/separate-node-sources-and-tools/.openspec.yaml create mode 100644 openspec/changes/separate-node-sources-and-tools/design.md create mode 100644 openspec/changes/separate-node-sources-and-tools/proposal.md create mode 100644 openspec/changes/separate-node-sources-and-tools/specs/developer-tool-cli/spec.md create mode 100644 openspec/changes/separate-node-sources-and-tools/specs/generated-node-assets/spec.md create mode 100644 openspec/changes/separate-node-sources-and-tools/specs/maintainable-project-structure/spec.md create mode 100644 openspec/changes/separate-node-sources-and-tools/tasks.md create mode 100644 openspec/changes/split-capability-environments/.openspec.yaml create mode 100644 openspec/changes/split-capability-environments/design.md create mode 100644 openspec/changes/split-capability-environments/proposal.md create mode 100644 openspec/changes/split-capability-environments/specs/capability-environments/spec.md create mode 100644 openspec/changes/split-capability-environments/specs/developer-tool-cli/spec.md create mode 100644 openspec/changes/split-capability-environments/tasks.md create mode 100644 openspec/config.yaml create mode 100644 openspec/specs/ai-input-validation/spec.md create mode 100644 openspec/specs/ai-model-tiers/spec.md create mode 100644 openspec/specs/ai-operator-failure-handling/spec.md create mode 100644 openspec/specs/background-removal-models/spec.md create mode 100644 openspec/specs/boundary-depth-smoothing/spec.md create mode 100644 openspec/specs/brush-stroke-processing/spec.md create mode 100644 openspec/specs/canonical-object-frame/spec.md create mode 100644 openspec/specs/clipboard-image-cache/spec.md create mode 100644 openspec/specs/compact-repeat-arrangement/spec.md create mode 100644 openspec/specs/conversion-source-images/spec.md create mode 100644 openspec/specs/coreml-inference/spec.md create mode 100644 openspec/specs/crop-tool-options/spec.md create mode 100644 openspec/specs/cutout-adaptive-mesh/spec.md create mode 100644 openspec/specs/cutout-attribute-lifecycle/spec.md create mode 100644 openspec/specs/cutout-axis-convention/spec.md create mode 100644 openspec/specs/cutout-boundary-padding/spec.md create mode 100644 openspec/specs/cutout-boundary-smoothing/spec.md create mode 100644 openspec/specs/cutout-depth-extension/spec.md create mode 100644 openspec/specs/cutout-edge-depth/spec.md create mode 100644 openspec/specs/cutout-edge-length/spec.md create mode 100644 openspec/specs/cutout-geometry-node-efficiency/spec.md create mode 100644 openspec/specs/cutout-lasso-entry/spec.md create mode 100644 openspec/specs/cutout-mesh-sampling/spec.md create mode 100644 openspec/specs/cutout-normal-policy/spec.md create mode 100644 openspec/specs/cutout-polyline/spec.md create mode 100644 openspec/specs/cutout-quality-meshing/spec.md create mode 100644 openspec/specs/cutout-shape-presets/spec.md create mode 100644 openspec/specs/cutout-split-boundary-shaping/spec.md create mode 100644 openspec/specs/cutout-symmetry-seam/spec.md create mode 100644 openspec/specs/depth-alpha-semantics/spec.md create mode 100644 openspec/specs/depth-artifact-contract/spec.md create mode 100644 openspec/specs/depth-cutout-volume/spec.md create mode 100644 openspec/specs/depth-node-options/spec.md create mode 100644 openspec/specs/depth-plane-alpha-culling/spec.md create mode 100644 openspec/specs/depth-scaled-tangent-normals/spec.md create mode 100644 openspec/specs/depth-split-selection/spec.md create mode 100644 openspec/specs/depth-surface-face-separation/spec.md create mode 100644 openspec/specs/depth-surface-stretch-culling/spec.md create mode 100644 openspec/specs/depth-surface-strip-cleanup/spec.md create mode 100644 openspec/specs/depth-symmetry-orientation/spec.md create mode 100644 openspec/specs/developer-tool-cli/spec.md create mode 100644 openspec/specs/empty-image-edit-isolation/spec.md create mode 100644 openspec/specs/frame-edge-antialiasing/spec.md create mode 100644 openspec/specs/frame-projection-clipping/spec.md create mode 100644 openspec/specs/frame-tool/spec.md create mode 100644 openspec/specs/frame-transparent-rgb/spec.md create mode 100644 openspec/specs/geometry-depth-controls/spec.md create mode 100644 openspec/specs/geometry-field-flow/spec.md create mode 100644 openspec/specs/geometry-node-smoothing/spec.md create mode 100644 openspec/specs/hat-upscale/spec.md create mode 100644 openspec/specs/hdr-background-removal/spec.md create mode 100644 openspec/specs/image-alpha-presentation/spec.md create mode 100644 openspec/specs/image-depth-symmetry/spec.md create mode 100644 openspec/specs/image-edit-results/spec.md create mode 100644 openspec/specs/image-edit-tools/spec.md create mode 100644 openspec/specs/image-layer-alpha-adjustment/spec.md create mode 100644 openspec/specs/image-pixel-read-integrity/spec.md create mode 100644 openspec/specs/image-result-materials/spec.md create mode 100644 openspec/specs/image-selection-processing/spec.md create mode 100644 openspec/specs/image-selection/spec.md create mode 100644 openspec/specs/image-tool-ai-availability/spec.md create mode 100644 openspec/specs/image-tool-interaction/spec.md create mode 100644 openspec/specs/joint-geometry-node-layout/spec.md create mode 100644 openspec/specs/maintainable-project-structure/spec.md create mode 100644 openspec/specs/mask-cut-depth-sampling/spec.md create mode 100644 openspec/specs/mask-editing/spec.md create mode 100644 openspec/specs/mask-mode-options/spec.md create mode 100644 openspec/specs/material-color-images/spec.md create mode 100644 openspec/specs/material-view-adaptation/spec.md create mode 100644 openspec/specs/model-asset-retirement/spec.md create mode 100644 openspec/specs/model-inference-memory/spec.md create mode 100644 openspec/specs/moge-depth-artifacts/spec.md create mode 100644 openspec/specs/moge3-model/spec.md create mode 100644 openspec/specs/object-space-normal-alignment/spec.md create mode 100644 openspec/specs/panorama-conversion/spec.md create mode 100644 openspec/specs/panorama-geometry-generation/spec.md create mode 100644 openspec/specs/panorama-input-cropping/spec.md create mode 100644 openspec/specs/panorama-mask-regions/spec.md create mode 100644 openspec/specs/panorama-surface-prototype/spec.md create mode 100644 openspec/specs/panorama-surface/spec.md create mode 100644 openspec/specs/pasted-brush-preview/spec.md create mode 100644 openspec/specs/pinned-geometry-smoothing/spec.md create mode 100644 openspec/specs/plane-conversion/spec.md create mode 100644 openspec/specs/polyline-gesture-interaction/spec.md create mode 100644 openspec/specs/post-cutout-symmetry/spec.md create mode 100644 openspec/specs/production-only-ai-workflows/spec.md create mode 100644 openspec/specs/projected-depth-surface/spec.md create mode 100644 openspec/specs/reference-depth-calibration/spec.md create mode 100644 openspec/specs/relief-plane-depth-controls/spec.md create mode 100644 openspec/specs/selection-content-processing/spec.md create mode 100644 openspec/specs/selection-rasterization/spec.md create mode 100644 openspec/specs/separate-depth-relief-planes/spec.md create mode 100644 openspec/specs/server-cache-display/spec.md create mode 100644 openspec/specs/server-lifecycle-controls/spec.md create mode 100644 openspec/specs/shell-normal-smoothing/spec.md create mode 100644 openspec/specs/texture-node-image-actions/spec.md create mode 100644 openspec/specs/two-times-upscale/spec.md create mode 100644 openspec/specs/unified-depth-plane/spec.md create mode 100644 pyproject.toml create mode 100644 src/anyimage/__init__.py create mode 100644 src/anyimage/blender_manifest.toml create mode 100644 src/anyimage/common/__init__.py create mode 100644 src/anyimage/common/ai.py create mode 100644 src/anyimage/common/color_image.py create mode 100644 src/anyimage/common/coordinate.py create mode 100644 src/anyimage/common/depth.py create mode 100644 src/anyimage/common/hdr_image.py create mode 100644 src/anyimage/common/image.py create mode 100644 src/anyimage/common/image_target.py create mode 100644 src/anyimage/common/material.py create mode 100644 src/anyimage/common/node.py create mode 100644 src/anyimage/common/object.py create mode 100644 src/anyimage/common/selection.py create mode 100644 src/anyimage/common/viewport.py create mode 100644 src/anyimage/licenses/scikit-image.txt create mode 100644 src/anyimage/licenses/tangle.txt create mode 100644 src/anyimage/menu.py create mode 100644 src/anyimage/operators/__init__.py create mode 100644 src/anyimage/operators/ai_setup.py create mode 100644 src/anyimage/operators/clipboard_image/__init__.py create mode 100644 src/anyimage/operators/clipboard_image/actions.py create mode 100644 src/anyimage/operators/clipboard_image/clipboard.py create mode 100644 src/anyimage/operators/clipboard_image/operators.py create mode 100644 src/anyimage/operators/convert_to_panorama/__init__.py create mode 100644 src/anyimage/operators/convert_to_panorama/object.py create mode 100644 src/anyimage/operators/convert_to_panorama/operators.py create mode 100644 src/anyimage/operators/convert_to_plane/__init__.py create mode 100644 src/anyimage/operators/convert_to_plane/image_plane.py create mode 100644 src/anyimage/operators/convert_to_plane/object.py create mode 100644 src/anyimage/operators/convert_to_plane/operators.py create mode 100644 src/anyimage/operators/cutout_tool/__init__.py create mode 100644 src/anyimage/operators/cutout_tool/balloon.py create mode 100644 src/anyimage/operators/cutout_tool/boundary_padding.py create mode 100644 src/anyimage/operators/cutout_tool/geometry.py create mode 100644 src/anyimage/operators/cutout_tool/interaction.py create mode 100644 src/anyimage/operators/cutout_tool/mesh.py create mode 100644 src/anyimage/operators/cutout_tool/object.py create mode 100644 src/anyimage/operators/cutout_tool/operators.py create mode 100644 src/anyimage/operators/cutout_tool/polygon.py create mode 100644 src/anyimage/operators/cutout_tool/shape.py create mode 100644 src/anyimage/operators/cutout_tool/tangle.py create mode 100644 src/anyimage/operators/frame_tool/__init__.py create mode 100644 src/anyimage/operators/frame_tool/compositing.py create mode 100644 src/anyimage/operators/frame_tool/operators.py create mode 100644 src/anyimage/operators/frame_tool/projection.py create mode 100644 src/anyimage/operators/mask_tool.py create mode 100644 src/anyimage/operators/rectify_tool/__init__.py create mode 100644 src/anyimage/operators/rectify_tool/geometry.py create mode 100644 src/anyimage/operators/rectify_tool/operators.py create mode 100644 src/anyimage/operators/rectify_tool/preview.py create mode 100644 src/anyimage/operators/remove_background.py create mode 100644 src/anyimage/operators/upscale.py create mode 100644 src/anyimage/panel.py create mode 100644 src/anyimage/preferences.py create mode 100644 src/anyimage/properties.py create mode 100644 src/anyimage/runtime.py create mode 100644 src/anyimage/server/__init__.py create mode 100644 src/anyimage/server/app.py create mode 100644 src/anyimage/server/geometry/__init__.py create mode 100644 src/anyimage/server/geometry/depth_texture.py create mode 100644 src/anyimage/server/geometry/normal_texture.py create mode 100644 src/anyimage/server/geometry/panorama.py create mode 100644 src/anyimage/server/geometry/prediction_artifacts.py create mode 100644 src/anyimage/server/jobs/__init__.py create mode 100644 src/anyimage/server/jobs/cutout.py create mode 100644 src/anyimage/server/jobs/depth_plane.py create mode 100644 src/anyimage/server/jobs/panorama.py create mode 100644 src/anyimage/server/jobs/remove_background.py create mode 100644 src/anyimage/server/jobs/upscale.py create mode 100644 src/anyimage/server/media/__init__.py create mode 100644 src/anyimage/server/media/input.py create mode 100644 src/anyimage/server/media/resolution.py create mode 100644 src/anyimage/server/model_catalog.py create mode 100644 src/anyimage/server/model_download.py create mode 100644 src/anyimage/server/model_manager.py create mode 100644 src/anyimage/server/models/__init__.py create mode 100644 src/anyimage/server/models/background.py create mode 100644 src/anyimage/server/models/geometry.py create mode 100644 src/anyimage/server/models/moge.py create mode 100644 src/anyimage/server/models/onnx_ben2.py create mode 100644 src/anyimage/server/models/onnx_birefnet.py create mode 100644 src/anyimage/server/models/onnx_moge2.py create mode 100644 src/anyimage/server/models/onnx_moge3.py create mode 100644 src/anyimage/server/models/onnx_runtime.py create mode 100644 src/anyimage/server/models/onnx_upscale.py create mode 100644 src/anyimage/server/models/upscale.py create mode 100644 tests/__init__.py create mode 100644 tests/ai/__init__.py create mode 100644 tests/ai/test_background_alpha.py create mode 100644 tests/ai/test_background_models.py create mode 100644 tests/ai/test_geometry_artifacts.py create mode 100644 tests/ai/test_model_ben2_onnx.py create mode 100644 tests/ai/test_model_birefnet_onnx.py create mode 100644 tests/ai/test_model_geometry.py create mode 100644 tests/ai/test_model_inference.py create mode 100644 tests/ai/test_model_manager.py create mode 100644 tests/ai/test_model_moge2_onnx.py create mode 100644 tests/ai/test_model_moge3_onnx.py create mode 100644 tests/ai/test_model_onnx_runtime.py create mode 100644 tests/ai/test_model_upscale_onnx.py create mode 100644 tests/ai/test_panorama.py create mode 100644 tests/ai/test_prediction_artifacts.py create mode 100644 tests/ai/test_server_jobs.py create mode 100644 tests/anyimage/__init__.py create mode 100644 tests/anyimage/common/__init__.py create mode 100644 tests/anyimage/common/support.py create mode 100644 tests/anyimage/common/test_alpha_presentation.py create mode 100644 tests/anyimage/common/test_color_image.py create mode 100644 tests/anyimage/common/test_depth.py create mode 100644 tests/anyimage/common/test_empty_image_edits.py create mode 100644 tests/anyimage/common/test_hdr_image.py create mode 100644 tests/anyimage/common/test_hdr_rgb_render.py create mode 100644 tests/anyimage/common/test_image_data.py create mode 100644 tests/anyimage/common/test_image_edit_tool.py create mode 100644 tests/anyimage/common/test_image_materials.py create mode 100644 tests/anyimage/common/test_image_target.py create mode 100644 tests/anyimage/common/test_input_preparation.py create mode 100644 tests/anyimage/common/test_material_alpha.py create mode 100644 tests/anyimage/common/test_material_settings.py create mode 100644 tests/anyimage/common/test_material_view_adaptation.py create mode 100644 tests/anyimage/common/test_modifier_inputs.py create mode 100644 tests/anyimage/common/test_selection.py create mode 100644 tests/anyimage/operators/__init__.py create mode 100644 tests/anyimage/operators/test_ai_image_operators.py create mode 100644 tests/anyimage/operators/test_ai_input_failures.py create mode 100644 tests/anyimage/operators/test_ai_setup.py create mode 100644 tests/anyimage/operators/test_balloon_profiles.py create mode 100644 tests/anyimage/operators/test_brush_preview_integration.py create mode 100644 tests/anyimage/operators/test_brush_strokes.py create mode 100644 tests/anyimage/operators/test_clipboard_cache.py create mode 100644 tests/anyimage/operators/test_clipboard_image.py create mode 100644 tests/anyimage/operators/test_conversion_source_images.py create mode 100644 tests/anyimage/operators/test_cutout_boundary_padding.py create mode 100644 tests/anyimage/operators/test_cutout_depth.py create mode 100644 tests/anyimage/operators/test_cutout_edge_length.py create mode 100644 tests/anyimage/operators/test_cutout_geometry.py create mode 100644 tests/anyimage/operators/test_cutout_interaction.py create mode 100644 tests/anyimage/operators/test_cutout_mesh.py create mode 100644 tests/anyimage/operators/test_cutout_objects.py create mode 100644 tests/anyimage/operators/test_cutout_operators.py create mode 100644 tests/anyimage/operators/test_frame_antialiasing.py create mode 100644 tests/anyimage/operators/test_frame_compositing.py create mode 100644 tests/anyimage/operators/test_frame_projection.py create mode 100644 tests/anyimage/operators/test_frame_tool.py create mode 100644 tests/anyimage/operators/test_hdr_background.py create mode 100644 tests/anyimage/operators/test_image_edit_integration.py create mode 100644 tests/anyimage/operators/test_mask_tool.py create mode 100644 tests/anyimage/operators/test_mask_undo.py create mode 100644 tests/anyimage/operators/test_native_ai_failures.py create mode 100644 tests/anyimage/operators/test_panorama_conversion.py create mode 100644 tests/anyimage/operators/test_plane_conversion.py create mode 100644 tests/anyimage/operators/test_plane_objects.py create mode 100644 tests/anyimage/operators/test_plane_operators.py create mode 100644 tests/anyimage/operators/test_rectify_tool.py create mode 100644 tests/anyimage/operators/test_texture_node_actions.py create mode 100644 tests/anyimage/operators/test_upscale_undo.py create mode 100644 tests/anyimage/server/__init__.py create mode 100644 tests/anyimage/server/runtime_support.py create mode 100644 tests/anyimage/server/support.py create mode 100644 tests/anyimage/server/test_input_validation.py create mode 100644 tests/anyimage/server/test_job_server.py create mode 100644 tests/anyimage/server/test_model_download.py create mode 100644 tests/anyimage/server/test_model_download_jobs.py create mode 100644 tests/anyimage/test_addon_registration.py create mode 100644 tests/anyimage/test_image_menu.py create mode 100644 tests/anyimage/test_job_operator.py create mode 100644 tests/anyimage/test_preferences.py create mode 100644 tests/anyimage/test_server_panel.py create mode 100644 tests/conftest.py create mode 100644 tests/nodes/__init__.py create mode 100644 tests/nodes/test_boundary_depth.py create mode 100644 tests/nodes/test_boundary_smoothing.py create mode 100644 tests/nodes/test_cutout_boundary.py create mode 100644 tests/nodes/test_cutout_symmetry.py create mode 100644 tests/nodes/test_cutouts.py create mode 100644 tests/nodes/test_depth_cutout.py create mode 100644 tests/nodes/test_depth_relief_planes.py create mode 100644 tests/nodes/test_depth_strip_cleanup.py create mode 100644 tests/nodes/test_depth_surface_split.py create mode 100644 tests/nodes/test_image_depth_panorama.py create mode 100644 tests/nodes/test_image_layer.py create mode 100644 tests/nodes/test_image_plane.py create mode 100644 tests/nodes/test_normal_scale.py create mode 100644 tests/nodes/test_object_normal_rotation.py create mode 100644 tests/nodes/test_shadeless.py create mode 100644 tests/nodes/test_temporary_attributes.py create mode 100644 tests/support/__init__.py create mode 100644 tests/support/blender.py create mode 100644 tests/support/color_image.py create mode 100644 tests/support/depth_surface.py create mode 100644 tests/support/hdr_image.py create mode 100644 tests/support/image_objects.py create mode 100644 tests/support/image_texture.py create mode 100644 tests/support/materials.py create mode 100644 tests/support/nodes.py create mode 100644 tests/support/paths.py create mode 100644 tests/support/planes.py create mode 100644 tests/tools/__init__.py create mode 100644 tests/tools/models/__init__.py create mode 100644 tests/tools/models/test_cli.py create mode 100644 tests/tools/nodes/__init__.py create mode 100644 tests/tools/nodes/fixtures/projected_symmetry.json create mode 100644 tests/tools/nodes/test_arrangement.py create mode 100644 tests/tools/nodes/test_cli.py create mode 100644 tests/tools/nodes/test_inventory.py create mode 100644 tests/tools/test_docs.py create mode 100644 tests/tools/test_environments.py create mode 100644 tests/tools/test_manifest.py create mode 100644 tests/tools/test_pack.py create mode 100644 tools/__init__.py create mode 100644 tools/docs.py create mode 100644 tools/models/__init__.py create mode 100644 tools/models/birefnet_export.py create mode 100644 tools/models/cli.py create mode 100644 tools/models/deform_sampling.py create mode 100644 tools/models/exports.py create mode 100644 tools/models/hat_export.py create mode 100644 tools/models/moge3_export.py create mode 100644 tools/models/onnx_weights.py create mode 100644 tools/nodes/__init__.py create mode 100644 tools/nodes/arrangement/__init__.py create mode 100644 tools/nodes/arrangement/arrange.py create mode 100644 tools/nodes/arrangement/branches.py create mode 100644 tools/nodes/arrangement/connections.py create mode 100644 tools/nodes/arrangement/dimensions.json create mode 100644 tools/nodes/arrangement/dimensions.py create mode 100644 tools/nodes/arrangement/flow.py create mode 100644 tools/nodes/arrangement/layout.py create mode 100644 tools/nodes/arrangement/zones.py create mode 100644 tools/nodes/build.py create mode 100644 tools/nodes/check.py create mode 100644 tools/nodes/cli.py create mode 100644 tools/nodes/preview/__init__.py create mode 100644 tools/nodes/preview/export.py create mode 100644 tools/nodes/preview/template.html create mode 100644 tools/pack.py create mode 100644 uv.lock diff --git a/.codex/skills/openspec-apply-change/SKILL.md b/.codex/skills/openspec-apply-change/SKILL.md new file mode 100644 index 0000000..70fbdb8 --- /dev/null +++ b/.codex/skills/openspec-apply-change/SKILL.md @@ -0,0 +1,156 @@ +--- +name: openspec-apply-change +description: Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks. +license: MIT +compatibility: Requires openspec CLI. +metadata: + author: openspec + version: "1.0" + generatedBy: "1.3.1" +--- + +Implement tasks from an OpenSpec change. + +**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes. + +**Steps** + +1. **Select the change** + + If a name is provided, use it. Otherwise: + - Infer from conversation context if the user mentioned a change + - Auto-select if only one active change exists + - If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select + + Always announce: "Using change: " and how to override (e.g., `/opsx:apply `). + +2. **Check status to understand the schema** + ```bash + openspec status --change "" --json + ``` + Parse the JSON to understand: + - `schemaName`: The workflow being used (e.g., "spec-driven") + - Which artifact contains the tasks (typically "tasks" for spec-driven, check status for others) + +3. **Get apply instructions** + + ```bash + openspec instructions apply --change "" --json + ``` + + This returns: + - `contextFiles`: artifact ID -> array of concrete file paths (varies by schema - could be proposal/specs/design/tasks or spec/tests/implementation/docs) + - Progress (total, complete, remaining) + - Task list with status + - Dynamic instruction based on current state + + **Handle states:** + - If `state: "blocked"` (missing artifacts): show message, suggest using openspec-continue-change + - If `state: "all_done"`: congratulate, suggest archive + - Otherwise: proceed to implementation + +4. **Read context files** + + Read every file path listed under `contextFiles` from the apply instructions output. + The files depend on the schema being used: + - **spec-driven**: proposal, specs, design, tasks + - Other schemas: follow the contextFiles from CLI output + +5. **Show current progress** + + Display: + - Schema being used + - Progress: "N/M tasks complete" + - Remaining tasks overview + - Dynamic instruction from CLI + +6. **Implement tasks (loop until done or blocked)** + + For each pending task: + - Show which task is being worked on + - Make the code changes required + - Keep changes minimal and focused + - Mark task complete in the tasks file: `- [ ]` → `- [x]` + - Continue to next task + + **Pause if:** + - Task is unclear → ask for clarification + - Implementation reveals a design issue → suggest updating artifacts + - Error or blocker encountered → report and wait for guidance + - User interrupts + +7. **On completion or pause, show status** + + Display: + - Tasks completed this session + - Overall progress: "N/M tasks complete" + - If all done: suggest archive + - If paused: explain why and wait for guidance + +**Output During Implementation** + +``` +## Implementing: (schema: ) + +Working on task 3/7: +[...implementation happening...] +✓ Task complete + +Working on task 4/7: +[...implementation happening...] +✓ Task complete +``` + +**Output On Completion** + +``` +## Implementation Complete + +**Change:** +**Schema:** +**Progress:** 7/7 tasks complete ✓ + +### Completed This Session +- [x] Task 1 +- [x] Task 2 +... + +All tasks complete! Ready to archive this change. +``` + +**Output On Pause (Issue Encountered)** + +``` +## Implementation Paused + +**Change:** +**Schema:** +**Progress:** 4/7 tasks complete + +### Issue Encountered + + +**Options:** +1.