human2ai 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.en.md +51 -28
  2. package/README.md +51 -28
  3. package/dist/cli/main.js +33 -21
  4. package/dist/cli/main.js.map +1 -1
  5. package/dist/database/composition-session-repository.d.ts +2 -0
  6. package/dist/database/composition-session-repository.js +1 -0
  7. package/dist/database/composition-session-repository.js.map +1 -1
  8. package/dist/database/draft-version-store.d.ts +8 -1
  9. package/dist/database/draft-version-store.js +21 -4
  10. package/dist/database/draft-version-store.js.map +1 -1
  11. package/dist/database/project-session-repository.d.ts +24 -1
  12. package/dist/database/project-session-repository.js +80 -0
  13. package/dist/database/project-session-repository.js.map +1 -1
  14. package/dist/database/session-preview-validation.d.ts +3 -0
  15. package/dist/database/session-preview-validation.js +44 -0
  16. package/dist/database/session-preview-validation.js.map +1 -0
  17. package/dist/database/spatial-session-repository.d.ts +2 -0
  18. package/dist/database/spatial-session-repository.js +1 -0
  19. package/dist/database/spatial-session-repository.js.map +1 -1
  20. package/dist/database/svg-input.js +9 -1
  21. package/dist/database/svg-input.js.map +1 -1
  22. package/dist/database/ui-sketch-session-repository.d.ts +3 -0
  23. package/dist/database/ui-sketch-session-repository.js +6 -0
  24. package/dist/database/ui-sketch-session-repository.js.map +1 -1
  25. package/dist/domain/canvas-frame.d.ts +15 -0
  26. package/dist/domain/canvas-frame.js +24 -0
  27. package/dist/domain/canvas-frame.js.map +1 -0
  28. package/dist/domain/canvas-node-tone.d.ts +1 -0
  29. package/dist/domain/canvas-node-tone.js +9 -0
  30. package/dist/domain/canvas-node-tone.js.map +1 -0
  31. package/dist/domain/canvas-shape-overlap.d.ts +12 -0
  32. package/dist/domain/canvas-shape-overlap.js +79 -0
  33. package/dist/domain/canvas-shape-overlap.js.map +1 -0
  34. package/dist/domain/composition/analysis.d.ts +1 -0
  35. package/dist/domain/composition/analysis.js +6 -3
  36. package/dist/domain/composition/analysis.js.map +1 -1
  37. package/dist/domain/composition/clipboard.d.ts +3 -0
  38. package/dist/domain/composition/clipboard.js +30 -0
  39. package/dist/domain/composition/clipboard.js.map +1 -0
  40. package/dist/domain/composition/draft.d.ts +6 -1
  41. package/dist/domain/composition/draft.js +42 -27
  42. package/dist/domain/composition/draft.js.map +1 -1
  43. package/dist/domain/composition/frame.d.ts +5 -8
  44. package/dist/domain/composition/frame.js +21 -68
  45. package/dist/domain/composition/frame.js.map +1 -1
  46. package/dist/domain/composition/index.d.ts +4 -3
  47. package/dist/domain/composition/index.js +4 -3
  48. package/dist/domain/composition/index.js.map +1 -1
  49. package/dist/domain/composition/raster.d.ts +2 -0
  50. package/dist/domain/composition/raster.js +19 -0
  51. package/dist/domain/composition/raster.js.map +1 -0
  52. package/dist/domain/composition/refinement/engine.js +1 -0
  53. package/dist/domain/composition/refinement/engine.js.map +1 -1
  54. package/dist/domain/composition/refinement/types.d.ts +1 -0
  55. package/dist/domain/composition/render.d.ts +6 -0
  56. package/dist/domain/composition/render.js +84 -20
  57. package/dist/domain/composition/render.js.map +1 -1
  58. package/dist/domain/composition/states.js +14 -8
  59. package/dist/domain/composition/states.js.map +1 -1
  60. package/dist/domain/composition/text-warp.d.ts +8 -0
  61. package/dist/domain/composition/text-warp.js +60 -0
  62. package/dist/domain/composition/text-warp.js.map +1 -0
  63. package/dist/domain/composition/types.d.ts +9 -4
  64. package/dist/domain/session/canvas-edit-history.d.ts +2 -0
  65. package/dist/domain/session/canvas-edit-history.js +2 -0
  66. package/dist/domain/session/canvas-edit-history.js.map +1 -1
  67. package/dist/domain/session/preview.d.ts +16 -0
  68. package/dist/domain/session/preview.js +48 -0
  69. package/dist/domain/session/preview.js.map +1 -0
  70. package/dist/domain/session/types.d.ts +8 -0
  71. package/dist/domain/ui-sketch/appearance.d.ts +12 -0
  72. package/dist/domain/ui-sketch/appearance.js +24 -0
  73. package/dist/domain/ui-sketch/appearance.js.map +1 -0
  74. package/dist/domain/ui-sketch/clipboard.d.ts +2 -0
  75. package/dist/domain/ui-sketch/clipboard.js +21 -1
  76. package/dist/domain/ui-sketch/clipboard.js.map +1 -1
  77. package/dist/domain/ui-sketch/draft.js +3 -1
  78. package/dist/domain/ui-sketch/draft.js.map +1 -1
  79. package/dist/domain/ui-sketch/index.d.ts +1 -1
  80. package/dist/domain/ui-sketch/index.js +1 -1
  81. package/dist/domain/ui-sketch/index.js.map +1 -1
  82. package/dist/domain/ui-sketch/render.js +21 -17
  83. package/dist/domain/ui-sketch/render.js.map +1 -1
  84. package/dist/domain/ui-sketch/session-preview.d.ts +27 -0
  85. package/dist/domain/ui-sketch/session-preview.js +43 -0
  86. package/dist/domain/ui-sketch/session-preview.js.map +1 -0
  87. package/dist/domain/ui-sketch/types.d.ts +2 -0
  88. package/dist/server/app.d.ts +1 -1
  89. package/dist/server/app.js +8 -0
  90. package/dist/server/app.js.map +1 -1
  91. package/dist/server/routes/project-sessions.js +47 -3
  92. package/dist/server/routes/project-sessions.js.map +1 -1
  93. package/dist/server/routes/session-previews.d.ts +3 -0
  94. package/dist/server/routes/session-previews.js +104 -0
  95. package/dist/server/routes/session-previews.js.map +1 -0
  96. package/dist/server/session-preview-service.d.ts +55 -0
  97. package/dist/server/session-preview-service.js +255 -0
  98. package/dist/server/session-preview-service.js.map +1 -0
  99. package/locales/en/common.json +63 -8
  100. package/migrations/0011_session_groups.sql +21 -0
  101. package/package.json +1 -1
  102. package/schemas/composition-draft.schema.json +11 -2
  103. package/schemas/ui-sketch-draft.schema.json +85 -0
  104. package/skills/human2ai/SKILL.md +1 -1
  105. package/skills/human2ai/references/composition-projection.md +5 -3
  106. package/skills/human2ai/references/composition.md +51 -10
  107. package/skills/human2ai/references/ui-layout.md +7 -1
  108. package/web/out/404/index.html +1 -1
  109. package/web/out/404.html +1 -1
  110. package/web/out/__next.__PAGE__.txt +14 -13
  111. package/web/out/__next._full.txt +23 -22
  112. package/web/out/__next._tree.txt +5 -5
  113. package/web/out/_next/static/chunks/348-845058912fd7c5e5.js +1 -0
  114. package/web/out/_next/static/chunks/{380-6a6a9517cf13350e.js → 60-f12915d6c3a2c6a3.js} +67 -67
  115. package/web/out/_next/static/chunks/app/_not-found/page-508d7dc25aaa3aa9.js +1 -0
  116. package/web/out/_next/static/chunks/app/composition/page-30c8fcabe591ab65.js +1 -0
  117. package/web/out/_next/static/chunks/app/layout-68da0027d158df26.js +1 -0
  118. package/web/out/_next/static/chunks/app/{page-b027a8ffdb9dda66.js → page-96f541a0e6fa160b.js} +1 -1
  119. package/web/out/_next/static/chunks/app/spatial/page-ac4e6cda25dea88f.js +1 -0
  120. package/web/out/_next/static/chunks/app/styles/page-4f0f5e04e35adaa3.js +1 -0
  121. package/web/out/_next/static/chunks/app/ui-sketch/page-08ddf9773e8f15ed.js +1 -0
  122. package/web/out/_next/static/chunks/main-app-3e9223f29047fc41.js +1 -0
  123. package/web/out/_next/static/chunks/next/dist/client/components/builtin/global-error-2d183cd08094b261.js +1 -0
  124. package/web/out/_next/static/chunks/webpack-9a8652ec72df780b.js +1 -0
  125. package/web/out/_next/static/css/04c7fcbfa9004e04.css +1 -0
  126. package/web/out/_next/static/css/0777c3d5c25abf92.css +1 -0
  127. package/web/out/_next/static/css/3d47424e508934f6.css +5 -0
  128. package/web/out/_next/static/css/{d42ebb6745c15e30.css → 5062b0bcc3118ed8.css} +1 -1
  129. package/web/out/_next/static/css/5d259915312c51c1.css +1 -0
  130. package/web/out/_next/static/css/9c61ee5fe683073a.css +1 -0
  131. package/web/out/_not-found/__next._full.txt +21 -18
  132. package/web/out/_not-found/__next._not-found.__PAGE__.txt +11 -8
  133. package/web/out/_not-found/__next._tree.txt +5 -3
  134. package/web/out/_not-found/index.html +1 -1
  135. package/web/out/_not-found/index.txt +21 -18
  136. package/web/out/composition/__next._full.txt +26 -26
  137. package/web/out/composition/__next._tree.txt +6 -7
  138. package/web/out/composition/__next.composition.__PAGE__.txt +13 -13
  139. package/web/out/composition/index.html +1 -1
  140. package/web/out/composition/index.txt +26 -26
  141. package/web/out/index.html +1 -1
  142. package/web/out/index.txt +23 -22
  143. package/web/out/spatial/__next._full.txt +25 -24
  144. package/web/out/spatial/__next._tree.txt +5 -5
  145. package/web/out/spatial/__next.spatial.__PAGE__.txt +12 -11
  146. package/web/out/spatial/index.html +1 -1
  147. package/web/out/spatial/index.txt +25 -24
  148. package/web/out/styles/__next._full.txt +25 -24
  149. package/web/out/styles/__next._tree.txt +5 -5
  150. package/web/out/styles/__next.styles.__PAGE__.txt +12 -11
  151. package/web/out/styles/index.html +1 -1
  152. package/web/out/styles/index.txt +25 -24
  153. package/web/out/ui-sketch/__next._full.txt +26 -26
  154. package/web/out/ui-sketch/__next._tree.txt +6 -7
  155. package/web/out/ui-sketch/__next.ui-sketch.__PAGE__.txt +13 -13
  156. package/web/out/ui-sketch/index.html +1 -1
  157. package/web/out/ui-sketch/index.txt +26 -26
  158. package/web/out/_next/static/chunks/130-930cfe062cda6fb5.js +0 -1
  159. package/web/out/_next/static/chunks/166-64abdc6456626378.js +0 -1
  160. package/web/out/_next/static/chunks/20-0801fc297cda2a7a.js +0 -1
  161. package/web/out/_next/static/chunks/678-6a688c1f8589183c.js +0 -1
  162. package/web/out/_next/static/chunks/app/_not-found/page-527a4b0506fa60cb.js +0 -1
  163. package/web/out/_next/static/chunks/app/composition/page-945cb9644c513407.js +0 -1
  164. package/web/out/_next/static/chunks/app/layout-33fe456f6115412e.js +0 -1
  165. package/web/out/_next/static/chunks/app/spatial/page-c52d564a39d3b592.js +0 -1
  166. package/web/out/_next/static/chunks/app/styles/page-87d77b1f3e8fdd21.js +0 -1
  167. package/web/out/_next/static/chunks/app/ui-sketch/page-69219e06cc93c28f.js +0 -1
  168. package/web/out/_next/static/chunks/main-app-4a71cca48ead7720.js +0 -1
  169. package/web/out/_next/static/chunks/next/dist/client/components/builtin/global-error-6a956dd8904b8723.js +0 -1
  170. package/web/out/_next/static/chunks/webpack-c0280e9af5fc8cd3.js +0 -1
  171. package/web/out/_next/static/css/0ab45995828642ec.css +0 -1
  172. package/web/out/_next/static/css/0c7915cdb1509f9d.css +0 -1
  173. package/web/out/_next/static/css/4fb1bde9070d5094.css +0 -5
  174. package/web/out/_next/static/css/c739d0131cdcc891.css +0 -1
  175. package/web/out/_next/static/css/d787350911847f22.css +0 -1
  176. package/web/out/_next/static/css/db78da93b4de5040.css +0 -1
  177. /package/web/out/_next/static/{Rem7hlT5iXtA-5codwSoe → MsEzgYkCNtygwkUNRRXe7}/_buildManifest.js +0 -0
  178. /package/web/out/_next/static/{Rem7hlT5iXtA-5codwSoe → MsEzgYkCNtygwkUNRRXe7}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-preview-service.js","sourceRoot":"","sources":["../../src/server/session-preview-service.ts"],"names":[],"mappings":"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"}
@@ -42,9 +42,11 @@
42
42
  "navigation": "Human2AI application navigation",
43
43
  "collapseSidebar": "Collapse application sidebar",
44
44
  "expandSidebar": "Expand application sidebar",
45
+ "resizeSidebar": "Resize application sidebar",
45
46
  "rightPanel": "Action panel",
46
47
  "collapseRightPanel": "Collapse action panel",
47
- "expandRightPanel": "Expand action panel"
48
+ "expandRightPanel": "Expand action panel",
49
+ "resizeRightPanel": "Resize action panel"
48
50
  },
49
51
  "language": {
50
52
  "selectorLabel": "Interface language"
@@ -123,6 +125,7 @@
123
125
  "updated": "Last updated",
124
126
  "nodes": "Nodes",
125
127
  "agent": "Agent",
128
+ "copyId": "Copy ID",
126
129
  "copyCommand": "Copy command",
127
130
  "copying": "Copying",
128
131
  "copyFailed": "Copy failed",
@@ -157,7 +160,18 @@
157
160
  "deleteSessionTitle": "Delete session",
158
161
  "deleteSessionDescription": "Deleting this session also removes its drafts and refinement records.",
159
162
  "loading": "Loading projects",
160
- "loadFailed": "Could not load projects"
163
+ "loadFailed": "Could not load projects",
164
+ "newSessionGroup": "New group",
165
+ "sessionGroupName": "Group name",
166
+ "sessionGroupActions": "Group actions",
167
+ "renameSessionGroup": "Rename group",
168
+ "deleteSessionGroup": "Delete group",
169
+ "deleteSessionGroupDescription": "Sessions in this group will appear directly under the project. They will not be deleted.",
170
+ "sessionGroupNameConflict": "A group with this name already exists in this project.",
171
+ "groupSession": "Move to group",
172
+ "ungroupedSessions": "Ungrouped",
173
+ "newCompositionInGroup": "New composition in group “{{group}}”",
174
+ "newUiSketchInGroup": "New interface in group “{{group}}”"
161
175
  },
162
176
  "actions": {
163
177
  "start": "Start",
@@ -214,6 +228,15 @@
214
228
  "originUser": "user",
215
229
  "originAgent": "agent",
216
230
  "originImport": "import"
231
+ },
232
+ "display": {
233
+ "showHiddenNodes": "Show hidden",
234
+ "onionSkin": "Onion skin"
235
+ },
236
+ "nodeVisibility": {
237
+ "visibility": "Visibility",
238
+ "visible": "Visible",
239
+ "hidden": "Hidden"
217
240
  }
218
241
  },
219
242
  "canvasNodeEditor": {
@@ -279,6 +302,9 @@
279
302
  "zoomIn": "Zoom in",
280
303
  "fitAll": "Fit all",
281
304
  "frameRatio": "Frame ratio",
305
+ "frameLabel": "Frame",
306
+ "frameReset": "Reset frame",
307
+ "frameAction": "Move or resize frame",
282
308
  "aspectRatioTitle": "Ratio",
283
309
  "lockFrame": "Lock frame",
284
310
  "unlockFrame": "Unlock frame",
@@ -419,6 +445,14 @@
419
445
  "radialUniform": "Uniform",
420
446
  "radialFree": "Free",
421
447
  "rayHandle": "Ray {{index}} direction"
448
+ },
449
+ "previewMode": {
450
+ "label": "Preview mode",
451
+ "precise": "Precise",
452
+ "soft": "Soft",
453
+ "prompt": "Preview mode: {{mode}}",
454
+ "preciseGuidance": "- Precise reference: make the generated image closely follow the canvas intent. Preserve basic shapes, placement, proportions, rotation, layering, spacing, negative space and cropping. Interpret shapes as concrete content using the notes without freely restructuring, splitting or merging their arrangement. Compare these relationships with the reference; focal and flow markers are guides, not final artwork. User instructions and node notes take precedence.",
455
+ "preciseLightGuidance": "- Precise lighting: closely preserve the authored light placement, shape, extent and relative proportions when lighting the subject and space. Pale yellow identifies light sources without specifying color temperature; do not reproduce diagnostic outlines in the final image. User instructions and node notes take precedence."
422
456
  }
423
457
  },
424
458
  "uiSketch": {
@@ -454,9 +488,6 @@
454
488
  "editRegionNote": "Edit region details",
455
489
  "editText": "Edit text",
456
490
  "emptyText": "---No text entered---",
457
- "visibility": "Visibility",
458
- "visible": "Visible",
459
- "hidden": "Hidden",
460
491
  "fontSize": "Font size",
461
492
  "decreaseFontSize": "Decrease font size",
462
493
  "increaseFontSize": "Increase font size",
@@ -514,7 +545,6 @@
514
545
  "new": "New state",
515
546
  "delete": "Delete state",
516
547
  "deleteTitle": "Delete state “{{name}}”?",
517
- "reorderHint": "Hold a tab to drag it, or press Ctrl + Shift + Left/Right to reorder.",
518
548
  "notFound": "Unknown UI state: {{state}}."
519
549
  },
520
550
  "preview": {
@@ -528,8 +558,12 @@
528
558
  "promptFailed": "Could not copy the prompt.",
529
559
  "promptUnsupported": "This browser cannot copy the prompt.",
530
560
  "copyPreview": "Copy preview",
561
+ "previewImage": "Preview image",
531
562
  "previewFailed": "Could not copy the preview.",
532
- "previewDownloaded": "This browser cannot copy images, so the preview was downloaded"
563
+ "previewDownloaded": "This browser cannot copy images, so the preview was downloaded",
564
+ "promptPreview": "Prompt preview",
565
+ "promptPreviewLoading": "Loading prompt",
566
+ "promptPreviewFailed": "Could not preview prompt"
533
567
  },
534
568
  "visualWeight": {
535
569
  "auto": "Auto",
@@ -541,6 +575,7 @@
541
575
  "prompt": "- Visual weight: {{weight}}"
542
576
  },
543
577
  "dimensions": {
578
+ "frameSize": "Size",
544
579
  "width": "Width",
545
580
  "height": "Height"
546
581
  },
@@ -768,7 +803,8 @@
768
803
  "appearance": "Model style",
769
804
  "appearanceQuaternius": "Human model",
770
805
  "appearanceGeometric": "Geometric mannequin",
771
- "editObject": "Edit object"
806
+ "editObject": "Edit object",
807
+ "newInGroup": "New 3D space in group “{{group}}”"
772
808
  },
773
809
  "canvasHistory": {
774
810
  "undo": "Undo",
@@ -777,5 +813,24 @@
777
813
  },
778
814
  "canvasStates": {
779
815
  "switch": "Layout states"
816
+ },
817
+ "sessionPreview": {
818
+ "label": "Session preview",
819
+ "add": "Add session preview",
820
+ "session": "Source session",
821
+ "output": "State or camera",
822
+ "projectRequired": "Move this session into a project first.",
823
+ "empty": "No session previews available",
824
+ "unavailable": "Source unavailable. The last preview is retained.",
825
+ "failed": "Unable to load session preview",
826
+ "openSource": "Open source session",
827
+ "group": "Group",
828
+ "search": "Search groups, sessions or states",
829
+ "clearSearch": "Clear search",
830
+ "chooseParent": "Select an item in the previous column",
831
+ "noChildren": "No options in this branch",
832
+ "loading": "Loading preview sources",
833
+ "descendantMatches": "{{count}} matching descendants",
834
+ "searchResults": "{{count}} matches"
780
835
  }
781
836
  }
@@ -0,0 +1,21 @@
1
+ CREATE TABLE session_groups (
2
+ id TEXT PRIMARY KEY,
3
+ project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
4
+ name TEXT NOT NULL CHECK (length(trim(name)) BETWEEN 1 AND 200),
5
+ revision INTEGER NOT NULL DEFAULT 1 CHECK (revision > 0),
6
+ UNIQUE (project_id, name)
7
+ ) STRICT;
8
+
9
+ CREATE TABLE session_group_members (
10
+ session_id TEXT PRIMARY KEY REFERENCES sessions(id) ON DELETE CASCADE,
11
+ group_id TEXT NOT NULL REFERENCES session_groups(id) ON DELETE CASCADE
12
+ ) STRICT;
13
+
14
+ CREATE INDEX session_group_members_group_idx ON session_group_members(group_id);
15
+
16
+ CREATE TRIGGER clear_session_group_on_project_move
17
+ AFTER UPDATE OF project_id ON sessions
18
+ WHEN OLD.project_id IS NOT NEW.project_id
19
+ BEGIN
20
+ DELETE FROM session_group_members WHERE session_id = NEW.id;
21
+ END;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "human2ai",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Local visual collaboration workspace for people and AI agents, with a browser UI and CLI.",
5
5
  "license": "MIT",
6
6
  "author": "贾思斋",
@@ -17,13 +17,14 @@
17
17
  "version": { "const": 1 },
18
18
  "kind": { "const": "composition-draft" },
19
19
  "processingSemantic": { "enum": [null, "scene-composition", "editorial-layout"] },
20
+ "previewMode": { "enum": ["precise", "soft"] },
20
21
  "frame": {
21
22
  "type": "object",
22
23
  "additionalProperties": false,
23
24
  "required": ["width", "height"],
24
25
  "properties": {
25
- "width": { "type": "integer", "minimum": 256, "maximum": 4096 },
26
- "height": { "type": "integer", "minimum": 256, "maximum": 4096 },
26
+ "width": { "type": "number", "exclusiveMinimum": 0 },
27
+ "height": { "type": "number", "exclusiveMinimum": 0 },
27
28
  "bounds": {
28
29
  "type": "object",
29
30
  "additionalProperties": false,
@@ -55,6 +56,7 @@
55
56
  "x": { "type": "number" },
56
57
  "y": { "type": "number" },
57
58
  "rotation": { "type": "number" },
59
+ "visible": { "type": "boolean" },
58
60
  "origin": { "enum": ["user", "agent", "import"] },
59
61
  "note": { "type": "string" },
60
62
  "annotation": { "type": "string" },
@@ -84,6 +86,7 @@
84
86
  "rotation": { "type": "number" },
85
87
  "width": { "type": "number", "exclusiveMinimum": 0 },
86
88
  "height": { "type": "number", "exclusiveMinimum": 0 },
89
+ "visible": { "type": "boolean" },
87
90
  "origin": { "enum": ["user", "agent", "import"] },
88
91
  "note": { "type": "string" },
89
92
  "annotation": { "type": "string" },
@@ -143,6 +146,7 @@
143
146
  { "$ref": "#/$defs/imageCrop" }
144
147
  ]
145
148
  },
149
+ "visible": { "type": "boolean" },
146
150
  "origin": { "enum": ["user", "agent", "import"] },
147
151
  "note": { "type": "string" },
148
152
  "annotation": { "type": "string" },
@@ -633,6 +637,7 @@
633
637
  "layoutPoint": {
634
638
  "type": "object", "additionalProperties": false, "required": ["id", "x", "y"],
635
639
  "properties": {
640
+ "visible": { "type": "boolean" },
636
641
  "id": { "type": "string", "pattern": "^focus-[0-9]+$" },
637
642
  "x": { "type": "number" }, "y": { "type": "number" }
638
643
  }
@@ -640,6 +645,7 @@
640
645
  "layoutDirection": {
641
646
  "type": "object", "additionalProperties": false, "required": ["id", "x", "y", "rotation"],
642
647
  "properties": {
648
+ "visible": { "type": "boolean" },
643
649
  "id": { "const": "direction-1" }, "x": { "type": "number" }, "y": { "type": "number" },
644
650
  "rotation": { "type": "number" }
645
651
  }
@@ -657,6 +663,7 @@
657
663
  "layoutArea": {
658
664
  "type": "object", "additionalProperties": false, "required": ["id", "x", "y", "area", "aspect"],
659
665
  "properties": {
666
+ "visible": { "type": "boolean" },
660
667
  "id": { "type": "string", "pattern": "^area-[0-9]+$" },
661
668
  "x": { "type": "number" }, "y": { "type": "number" },
662
669
  "area": { "type": "number", "exclusiveMinimum": 0 },
@@ -671,6 +678,7 @@
671
678
  "layoutImage": {
672
679
  "type": "object", "additionalProperties": false, "required": ["id", "x", "y", "width", "height", "rotation"],
673
680
  "properties": {
681
+ "visible": { "type": "boolean" },
674
682
  "id": { "type": "string", "pattern": "^image-[0-9]+$" },
675
683
  "x": { "type": "number" }, "y": { "type": "number" },
676
684
  "width": { "type": "number", "exclusiveMinimum": 0 },
@@ -696,6 +704,7 @@
696
704
  "id": { "type": "string", "pattern": "^focus-[0-9]+$" },
697
705
  "x": { "type": "number" },
698
706
  "y": { "type": "number" },
707
+ "visible": { "type": "boolean" },
699
708
  "origin": { "enum": ["user", "agent", "import"] },
700
709
  "note": { "type": "string" },
701
710
  "annotation": { "type": "string" },
@@ -100,6 +100,91 @@
100
100
  "y": { "type": "number" },
101
101
  "width": { "type": "number", "exclusiveMinimum": 0 },
102
102
  "height": { "type": "number", "exclusiveMinimum": 0 },
103
+ "previewReference": {
104
+ "oneOf": [
105
+ {
106
+ "type": "object",
107
+ "additionalProperties": false,
108
+ "required": [
109
+ "sessionId",
110
+ "sessionType",
111
+ "cameraId",
112
+ "renderedRevision"
113
+ ],
114
+ "properties": {
115
+ "sessionId": {
116
+ "type": "string",
117
+ "minLength": 1
118
+ },
119
+ "sessionType": {
120
+ "const": "spatial"
121
+ },
122
+ "cameraId": {
123
+ "type": "string",
124
+ "minLength": 1
125
+ },
126
+ "renderedRevision": {
127
+ "type": "integer",
128
+ "minimum": 1
129
+ }
130
+ }
131
+ },
132
+ {
133
+ "type": "object",
134
+ "additionalProperties": false,
135
+ "required": [
136
+ "sessionId",
137
+ "sessionType",
138
+ "stateId",
139
+ "renderedRevision"
140
+ ],
141
+ "properties": {
142
+ "sessionId": {
143
+ "type": "string",
144
+ "minLength": 1
145
+ },
146
+ "sessionType": {
147
+ "const": "ui-layout"
148
+ },
149
+ "stateId": {
150
+ "type": "string",
151
+ "minLength": 1
152
+ },
153
+ "renderedRevision": {
154
+ "type": "integer",
155
+ "minimum": 1
156
+ }
157
+ }
158
+ },
159
+ {
160
+ "type": "object",
161
+ "additionalProperties": false,
162
+ "required": [
163
+ "sessionId",
164
+ "sessionType",
165
+ "stateId",
166
+ "renderedRevision"
167
+ ],
168
+ "properties": {
169
+ "sessionId": {
170
+ "type": "string",
171
+ "minLength": 1
172
+ },
173
+ "sessionType": {
174
+ "const": "image-composition"
175
+ },
176
+ "stateId": {
177
+ "type": "string",
178
+ "minLength": 1
179
+ },
180
+ "renderedRevision": {
181
+ "type": "integer",
182
+ "minimum": 1
183
+ }
184
+ }
185
+ }
186
+ ]
187
+ },
103
188
  "assetId": {
104
189
  "type": ["string", "null"],
105
190
  "minLength": 1
@@ -2,7 +2,7 @@
2
2
  name: human2ai
3
3
  description: Collaborate through local Human2AI design sessions, its style library, and its CLI. Use in a consumer project containing .human2ai/integration.json to inspect, edit, refine, review, or undo design work; to draw a reference picture as editable scene or editorial composition (“把这张图的构图画到画布上”); to project existing UI into a layout canvas (“把 UI 放到画布上让我修改”); to model in the consumer project using a style and 3D spatial guidance; or to reuse a visual style. The consumer project's Agent owns downstream implementation.
4
4
  metadata:
5
- version: "0.1.5"
5
+ version: "0.1.7"
6
6
  ---
7
7
 
8
8
  # Human2AI
@@ -52,7 +52,7 @@ Retain a curved arrangement's lightness, turning movement or enclosing effect wi
52
52
 
53
53
  ### Keep descriptions, user notes, and lettering separate
54
54
 
55
- Preserve readable source lettering in text-region `displayText`, including punctuation and line breaks that matter. Never invent a transcription for unreadable text: leave it unspecified and explain the uncertainty in the node description. An empty `displayText` remains a text region and means the wording is unspecified for later generation. The browser canvas displays abstract typography marks, not the exact font or lettering; the CLI `inspect --preview` SVG shows plain region shapes. The CLI preview currently leaves ellipses axis-aligned even when they have rotation; read the saved rotation and report this preview limitation when it affects visual verification. Read `displayText` from the saved draft to check its wording. Colors, materials, depth and weight metadata are not a complete rendered theme.
55
+ Preserve readable source lettering in text-region `displayText`, including punctuation and line breaks that matter. Never invent a transcription for unreadable text: leave it unspecified and explain the uncertainty in the node description. An empty `displayText` remains a text region and means the wording is unspecified for later generation. Filled text appears directly in the editable browser canvas, inspection previews and precise generation references. Soft generation references always show typography placeholders, even when displayText is filled; read the stored wording and retain its requirements in the generation instruction. Each explicit line stretches to the region width; the complete text block scales with its height and rotates with the region. Custom four-corner outlines warp the complete lettering in perspective; dragging a corner changes the letter shapes as well as the outline. Empty text retains abstract typography marks. The preview font communicates the wording and its footprint, not a prescribed final typeface. Read `displayText` from the saved draft to check its wording. Colors, materials, depth and weight metadata are not a complete rendered theme.
56
56
 
57
57
  Assign stable ids and `origin: "import"` to every node recovered from the reference, including focus and direction marks. Reserve `origin: "agent"` for new design additions the user requests and `user` for browser-created nodes. Editing a node preserves its origin.
58
58
 
@@ -71,7 +71,7 @@ Every newly imported node must have `note: ""`, including focus and direction no
71
71
 
72
72
  ## Author a complete draft
73
73
 
74
- Use this format directly; no project-source import, extra API, or new capture kind is needed. Coordinates are signed world units referenced to **1200 × 800**, not output pixels. `frame.width` and `frame.height` are integer output dimensions from 256 to 4096, with width/height from 0.5 to 2. `frame.bounds` locates the crop in world units. Always include it to avoid legacy-coordinate migration. For an unsupported picture ratio, resolve the desired crop or framing with the user rather than distorting it.
74
+ Use this format directly; no project-source import, extra API, or new capture kind is needed. Coordinates are signed world units referenced to **1200 × 800**, not output pixels. `frame.width` and `frame.height` are positive output dimensions without a maximum or aspect-ratio restriction, matching the UI interface frame. Frame editing uses integer pixels with a minimum edge of 10; the default is 960 × 560. `frame.bounds` locates the crop in world units. New frame edits use matching world-pixel and output sizes: divide x/width by 1200 and y/height by 800 when writing bounds. Always include bounds to avoid legacy-coordinate migration. Existing saved crops and their output dimensions remain readable without being silently rescaled.
75
75
 
76
76
  Choose the abstract masses in the selected frame first. The following converts their chosen positions to canvas coordinates; it does not require tracing source pixels. For a visual point `(u, v)` expressed as fractions of the output frame and frame bounds `b`:
77
77
 
@@ -87,6 +87,8 @@ When the user explicitly requests a particular crop, padding or precise registra
87
87
 
88
88
  `shapeFactor` is 1 for a quadrilateral, π/4 for a free ellipse (`primitive: "circle"`), and 1/2 for a triangle. `x/y` locate the center of a rectangle or ellipse; triangles use their centroid, two-thirds of the height below their apex. Positive rotation turns clockwise in the screen's downward y-axis. Keep `area` consistent with the unrotated dimensions. `frame.bounds.width * 1200 / (frame.bounds.height * 800)` must equal the output aspect ratio.
89
89
 
90
+ Preserve the session-wide optional `previewMode` (`precise` or `soft`) when continuing an existing draft. New drafts start in `soft`; absence in a legacy draft still means `precise`. It is independent of Scene/Editorial mode and governs downstream reference fidelity as described in [Preview fidelity](composition.md#preview-fidelity).
91
+
90
92
  Required top-level fields are `version: 1`, `kind: "composition-draft"`, `processingSemantic`, `frame`, `overallNote`, `focusPoints`, `directionLine`, `areas`, and `images`. Use empty arrays, `null` for an absent direction line, and an empty overall note for a new reference composition.
91
93
 
92
94
  All nodes carry `origin`, `note`, `annotation`, `semanticType` and `shotScale` (`auto`, `foreground`, `midground`, `background`). Use a concise descriptive semantic type; only `text-region` has special text behavior.
@@ -146,7 +148,7 @@ The photograph fills the background. Its key subjects need geometry because they
146
148
 
147
149
  Before saving, check every region against the whole-picture reading: what effect does it contribute, through which relationship, and is that contribution expressed in the drawing? Remove geometry justified only by resemblance. Restore a missing weight, gap or direction when its absence changes the intended experience. Descriptions must explain the contribution rather than supply one after the fact. Verify that all new notes and the new overall note are empty.
148
150
 
149
- Save the complete JSON with `capture.commands.save` from the connection, using its latest revision (0 before the first save). Keep the returned revision as the projection baseline. Use `composition inspect --session <session-id> --revision <saved-revision> --preview <preview.svg>` and actually view the local result, rasterizing it locally when the image viewer needs a bitmap. Follow the parent Skill's operation-channel rule; static preview inspection does not require Chrome MCP. Compare it with the reference at a size where both whole frames are visible, without relying on node descriptions:
151
+ Save the complete JSON with `capture.commands.save` from the connection, using its latest revision (0 before the first save). Keep the returned revision as the projection baseline. Create `.human2ai-data/output/` if needed, use `composition inspect --session <session-id> --revision <saved-revision> --preview .human2ai-data/output/preview.png`, and actually view the local result. Use a `.svg` filename when a vector preview is needed. Follow the parent Skill's operation-channel rule; static preview inspection does not require Chrome MCP. Compare it with the reference at a size where both whole frames are visible, without relying on node descriptions:
150
152
 
151
153
  - Is attention concentrated in comparable places, with the same dominant and subordinate roles?
152
154
  - Does the balance of mass and open space preserve the identified stability, tension, depth or breathing room? Does the rhythm remain dense, loose, steady or turning where it matters?
@@ -2,13 +2,52 @@
2
2
 
3
3
  The Agent decides which compositional relationships support the user’s intent. Human2AI provides neutral measurements, deterministic relation operations, final relation checks and independent results. Style processing is a separate workflow used only when the request calls for it.
4
4
 
5
+ ## Export a preview
6
+
7
+ Export any saved composition revision directly as PNG; no refinement run is required. Create `.human2ai-data/output/` before exporting:
8
+
9
+ ```text
10
+ <runner> composition inspect --session <session-id> --revision <n> --preview .human2ai-data/output/preview.png
11
+ ```
12
+
13
+ Use `.svg` for a vector preview. The same format choice applies to local `composition inspect --draft`, `composition apply`, and saved `composition refinement` previews. A `.png` extension (case-insensitive) rasterizes the existing preview; other filenames retain the legacy SVG output. PNG results return `artifacts.previewPng` and set `artifacts.previewSvg` to `null`; SVG results retain `artifacts.previewSvg`. Omitting `--preview` writes no image.
14
+
15
+ Both formats preserve the same visible nodes, planning guides, layer order and outside-frame content. Session previews embed saved image assets. These inspection previews differ from the guide-free generation-reference PNG exported by `composition reference`.
16
+
17
+ ## Preview fidelity
18
+
19
+ Read and preserve the draft's session-wide `previewMode`, independent of
20
+ `processingSemantic` and shared by every layout state. New drafts start in
21
+ `soft`; an absent value in a legacy draft still means `precise`. Inspection
22
+ and `composition reference` report the effective mode.
23
+ The browser preview, copied image and composition references embedded in UI
24
+ sessions all use this setting. Changing it saves a normal draft revision.
25
+
26
+ - `precise` (精准): the reference retains the current canvas geometry. Ask the
27
+ image model to stay as close as possible to the authored composition: basic
28
+ shape, placement, proportions, rotation, layering, spacing, negative space and
29
+ cropping. Interpret nodes as real content using their notes, without freely
30
+ splitting, merging or replacing the arrangement. Check the generated image
31
+ against those visible relationships. Preserve lighting placement, shape and
32
+ extent too; diagnostic markers and their outlines are not final artwork.
33
+ - `soft` (模糊): each ordinary shape receives radial shading and softened edges
34
+ while keeping its basic silhouette recognizable. Use it as a loose spatial map.
35
+ The image model may reinterpret, split or combine content without matching a
36
+ fixed shape, provided the broad placement, visual weight and flow correspond.
37
+
38
+ User instructions and node notes take precedence in both modes. Soft references
39
+ always show text-region placeholders, even when display text is filled; preserve
40
+ that stored wording in the generation instruction. Precise references show the
41
+ supplied text, and imported images retain their original appearance. Do not
42
+ change the user's fidelity merely to make generation or refinement easier.
43
+
5
44
  ## Draw a reference picture on the canvas
6
45
 
7
- Geometric areas may explicitly set `isLightSource: true` (missing or false means ordinary content). Interpret light markers at the same approximate level as ordinary composition shapes: preserve the intended lighting contribution and broad spatial relationships, not a measured light-patch template. Rectangles suggest band-shaped or extended illumination; circles suggest localized illumination. The drawn width, length, contour and gradient are descriptions, not default output constraints. User instructions and node notes take precedence; otherwise the Agent freely adapts width, length, curvature, continuity, softness and strength to the scene.
46
+ Geometric areas may explicitly set `isLightSource: true` (missing or false means ordinary content). In `soft` preview mode, interpret light markers at the same approximate level as ordinary composition shapes: preserve the intended lighting contribution and broad spatial relationships, not a measured light-patch template. Rectangles suggest band-shaped or extended illumination; circles suggest localized illumination. The drawn width, length, contour and gradient are descriptions, not default output constraints. User instructions and node notes take precedence; otherwise the Agent freely adapts width, length, curvature, continuity, softness and strength to the scene.
8
47
 
9
- An authored band should contribute a band-like or extended lighting tendency, but may be narrower or wider, taper, bend with surfaces, break into patches through occlusion, or blend with other illumination. It need not form a separate complete stripe, remain uniformly wide, pass through an exact point or span the frame. Do not add medium-strong contrast, conspicuous thumbnail visibility, exact coverage or a fixed width merely to prove that the band exists. Keep the broad lighting role without ignoring it altogether. Distinguish a source from the area it illuminates; yellow is only an identification convention. Consider multiple sources individually, while their visible effects may split, overlap or blend naturally.
48
+ In Soft mode, an authored band should contribute a band-like or extended lighting tendency, but may be narrower or wider, taper, bend with surfaces, break into patches through occlusion, or blend with other illumination. It need not form a separate complete stripe, remain uniformly wide, pass through an exact point or span the frame. Do not add medium-strong contrast, conspicuous thumbnail visibility, exact coverage or a fixed width merely to prove that the band exists. Keep the broad lighting role without ignoring it altogether. Distinguish a source from the area it illuminates; yellow is only an identification convention. Consider multiple sources individually, while their visible effects may split, overlap or blend naturally.
10
49
 
11
- Generation prompts should describe the lighting intent concisely and leave implementation room, as ordinary regions allow reconstruction, splitting, merging and overlap. Review whether the overall lighting approximately echoes the composition's placement, extension and emphasis, rather than checking every stripe, edge, segment or width. Approximate overall correspondence is sufficient. Tighten only the specific properties explicitly requested by the user. For example, a broad diagonal marker can become a narrower broken wash of light across a face, fabric and background; do not insist on a ruler-like bright rectangle across all three.
50
+ In Soft mode, generation prompts should describe the lighting intent concisely and leave implementation room, as ordinary regions allow reconstruction, splitting, merging and overlap. Review whether the overall lighting approximately echoes the composition's placement, extension and emphasis, rather than checking every stripe, edge, segment or width. Approximate overall correspondence is sufficient. Tighten only the specific properties explicitly requested by the user. For example, a broad diagonal marker can become a narrower broken wash of light across a face, fabric and background; do not insist on a ruler-like bright rectangle across all three.
12
51
  Editor and refined canvases retain marker geometry; generation references use borderless falloff with softened edges. Text regions cannot be light sources. Ordinary editing can toggle the property through draft saving; geometric refinement must preserve it. Never infer or overwrite the flag from a note alone.
13
52
 
14
53
  Requests such as “把这张图的构图画到画布上”, “按参考图画场景构图”, or “把这张海报转成版面构图” ask for an ordinary editable `composition-draft`. Read [composition-projection.md](composition-projection.md) for interpreting the whole-picture effect, selecting geometry by contribution, writing role explanations, and authoring the draft. First understand how attention, visual weight, rhythm and space work together; then abstract those relationships. A layout photo may contribute several important masses, but identifying its objects or tracing their silhouettes is not the goal. Each description explains what the shape contributes and through which relationship. New node notes and the new draft's overall note stay empty. The Agent inspects the image and authors the draft; Human2AI does not call a vision model. Save through `capture.commands.save`, inspect whether the canvas retains the intended structure and experience without excessive detail, and hand it to the user for editing.
@@ -103,15 +142,15 @@ the specific limitation instead of claiming the planned composition is fulfilled
103
142
 
104
143
  Use the style workflow in `SKILL.md` and save a complete draft through `style.commands.save`. This supports proportion changes and new accents. The `composition apply` workflow below remains a separate Agent-directed derivative workflow; explicit ratio and geometry-symmetry rules may resize existing areas, while node identity and content remain intact.
105
144
 
106
- Read the current capture and inspect it with `composition inspect --session <session-id> --revision <n> --preview <preview.svg>`. Preserve the user's explicit `processingSemantic`; when it is `null`, ask the user to choose Scene or Editorial before processing. Keep the frame and existing visible text, ids, user notes and approximate placement. In Scene mode interpret areas as subjects and spatial relationships; in Editorial mode interpret them as typography, imagery and negative space. Apply the style through supported sizes, proportions, placement, rotations, weights and optional agent-origin accents. Do not turn the sketch into a literal inventory of bordered boxes.
145
+ Read the current capture and inspect it with `composition inspect --session <session-id> --revision <n> --preview .human2ai-data/output/preview.png`. Preserve the user's explicit `processingSemantic`; when it is `null`, ask the user to choose Scene or Editorial before processing. Keep the frame and existing visible text, ids, user notes and approximate placement. In Scene mode interpret areas as subjects and spatial relationships; in Editorial mode interpret them as typography, imagery and negative space. Apply the style through supported sizes, proportions, placement, rotations, weights and optional agent-origin accents. Do not turn the sketch into a literal inventory of bordered boxes.
107
146
 
108
- Coordinates use the signed world coordinate system below, not pixel values copied from the preview. Validate the saved revision and inspect its preview. The browser can copy the current canvas as a PNG and a prompt with one style sentence. For downstream work, use the full bound specification; a guide-bearing preview SVG is not a generation reference.
147
+ Coordinates use the signed world coordinate system below, not pixel values copied from the preview. Validate the saved revision and inspect its preview. The browser can copy the current canvas as a PNG and a prompt with one style sentence. For downstream work, use the full bound specification; a guide-bearing preview is not a generation reference, regardless of file format.
109
148
 
110
149
  ## Refine a composition
111
150
 
112
151
  Refinement clarifies the user's composition through deliberate, optional relationships. Mathematical rules are tools, not mandatory templates or evidence of aesthetic quality. Do not select a convenient operation first and invent a reason afterward. Do not bind a style or rewrite the editable capture in response to a refinement request.
113
152
 
114
- 1. Discover current methods and the plan schema with `composition methods`. Read the exact saved revision with `capture get`, then run `composition inspect --session <session-id> --revision <n> --preview <source.svg>` and actually inspect the rendered composition. Reuse the user's explicit `processingSemantic`; when it is null, ask for Scene or Editorial. Re-inspect after their choice. Preserve the exact source fingerprint.
153
+ 1. Discover current methods and the plan schema with `composition methods`. Read the exact saved revision with `capture get`, then run `composition inspect --session <session-id> --revision <n> --preview .human2ai-data/output/source.png` and actually inspect the rendered composition. Reuse the user's explicit `processingSemantic`; when it is null, ask for Scene or Editorial. Re-inspect after their choice. Preserve the exact source fingerprint.
115
154
 
116
155
  2. Read the composition before deciding to change it. Describe the intended viewing experience, relevant masses, scale contrasts, open space, focal relationships and existing motion. Use visible evidence and user notes; do not assume every shape is a subject, every focus has a rank, or every empty space needs filling. Record uncertainty instead of inventing missing intent. `inspect.guidance` provides neutral angle and perpendicular/forward distances from existing shape axes and the direction line to focuses; these measurements do not prove how viewers will look. Distances use output pixels and angles use physical world geometry, including on portrait or moved frames.
117
156
 
@@ -126,7 +165,7 @@ Refinement clarifies the user's composition through deliberate, optional relatio
126
165
  5. Explain the concrete plan and obtain user consent in the conversation unless their existing request already authorizes it. The Agent owns that conversation; Human2AI has no separate approval state or confirmation API. Apply using:
127
166
 
128
167
  ```text
129
- <runner> composition apply --session <session-id> --revision <n> --plan <plan.json> --output <run.json> --preview <refined.svg>
168
+ <runner> composition apply --session <session-id> --revision <n> --plan <plan.json> --output .human2ai-data/output/run.json --preview .human2ai-data/output/refined.png
130
169
  ```
131
170
 
132
171
  Execute dependent operations in a deliberate order: establish proportions and subject placement, propagate subject/focus associations, then arrange guidance as applicable. The engine remeasures **every chosen relationship on the final draft**. A later operation cannot silently invalidate an earlier one. `audit.relations` reports before/after/target/error and technical satisfaction; incompatible relations or changed `fixedIds` produce `REFINEMENT_CONSTRAINT` with the affected operation indices. Revise the plan, order, or explicitly conflicting intention; do not repeat a failing plan or overwrite the source to make it fit. This is exact relation validation, not a general constraint optimizer.
@@ -154,7 +193,7 @@ Rules need not all be used, and none is compulsory. Mathematics can describe foc
154
193
 
155
194
  Version 1 plans and stored results remain readable and executable for compatibility. New Agent work uses version 2 so it records intent and validates final relationships. The legacy `strength: "subtle"` is optional and imposes no amplitude limit. Source fingerprint, mode, valid geometry and protected content are still checked. Displacement, rotation, clipping, overlap and visual-center changes are observations, not aesthetic rejection thresholds.
156
195
 
157
- When downstream image generation is authorized, export the saved run through `composition reference --session <session-id> --run <run-id> --output <reference.png>`. Attach the returned image path as a soft spatial map, not line art, and carry the mode-specific interpretation and required typography into the generation instruction. The CLI preview SVG includes guides and outside content and must not replace that PNG.
196
+ When downstream image generation is authorized, export the saved run through `composition reference --session <session-id> --run <run-id> --output <reference.png>`. Read the returned `previewMode`: for `precise`, attach the image as a close composition target; for `soft`, attach it as a loose spatial map. Carry the selected fidelity, Scene/Editorial interpretation and required typography into the generation instruction. CLI inspection previews in either PNG or SVG include guides and outside content and must not replace that generation reference.
158
197
 
159
198
  ## Shared composition planning
160
199
 
@@ -208,7 +247,7 @@ Example: `{ "id": "plan-1", "type": "golden-spiral",
208
247
  "visible": true, "x": 0.618,
209
248
  "y": 0.382, "rotation": 135, "scale": 0.65, "mirrored": false }`.
210
249
 
211
- `composition inspect` exposes active `plans`; its SVG preview renders visible
250
+ `composition inspect` exposes active `plans`; its PNG and SVG previews render visible
212
251
  plans using the same geometry as the browser. Planning guides never enter the
213
252
  generation-reference PNG. Carry all planning intent into any
214
253
  separately authorized generation work using the
@@ -267,4 +306,6 @@ into the draft. This is a one-time placement; later guide edits do not move node
267
306
 
268
307
  Preserve the optional draft-level `layerOrder` array when editing captures. It lists content node ids from back to front, independently of array numbering, geometry, visual weight or scene depth. Without it, the existing type-based draw order applies. Keep ids unique; remove deleted ids and append new ids after the saved order. Browser layer actions preserve selected nodes’ relative order. UI groups move together in this order, which is shared across motion states. Frame boundaries, guides and selection controls are outside the content order. Preview and SVG/PNG output follow this order.
269
308
 
270
- Composition captures may include `states` and `activeStateId`. Preserve both when editing. All states share the top-level node identities, content and metadata; only frame geometry, node geometry and layer order vary. Top-level geometry is the active state's editable layout and is synchronized to its snapshot when validated or saved. Edit the top-level geometry to change the active layout; preserve other state layouts. State snapshots contain no independent node content. Older captures without these fields represent one state. Browser copy actions use the active layout; states do not imply animation.
309
+ Composition captures may include `states` and `activeStateId`. Preserve both when editing. All states share the top-level node identities, content and metadata; frame geometry, node geometry, node visibility and layer order vary. Top-level geometry is the active state's editable layout and is synchronized to its snapshot when validated or saved. Edit the top-level geometry to change the active layout; preserve other state layouts. State snapshots contain no independent node content. Older captures without these fields represent one state. Browser copy actions use the active layout; states do not imply animation.
310
+
311
+ Content nodes accept an optional `visible` boolean, independently stored in each state layout; omission means visible for older captures. Change the top-level value to edit the active state. Hidden nodes remain in the draft but are omitted from previews, generated reference images, prompts and inspection facts. The editor’s Show hidden nodes control reveals them for editing without changing this value. Onion skin overlays visible nodes from the preceding state in list order; both display controls are temporary and never affect saved content or exported output. Planning guide visibility retains its separate intent rules above.
@@ -10,7 +10,7 @@ After editing, use the saved revision and inspect the resulting local preview wi
10
10
  <runner> ui-layout render --session <session-id> --revision <saved-revision> --state <state-id> --output <preview.png>
11
11
  ```
12
12
 
13
- Use a `.svg` output filename for a self-contained vector preview. Both formats embed the selected state's image assets, preserve crop and layer order, omit hidden nodes, and clip to the interface frame. They contain the abstract regions, notes, text and images rather than editor controls or a fully styled consumer UI. The command is read-only and returns `artifact.path`, MIME type, dimensions, the exact revision/fingerprint and the selected state metadata.
13
+ Use a `.svg` output filename for a self-contained vector preview. Both formats embed the selected state's image assets, preserve crop and layer order, omit hidden nodes, and clip to the interface frame. They contain abstract regions, visible text content and images. Node notes are not drawn in previews; read the structured capture and exported prompts for those instructions. Browser copy and session previews follow the same rule. The command is read-only and returns `artifact.path`, MIME type, dimensions, the exact revision/fingerprint and the selected state metadata.
14
14
 
15
15
  Read state ids, names and order from the capture's `stateTabs`; older captures use `start` followed by `stages[].id`. Pass the stable id to `--state`, not the display name. If omitted, the first state in display order is exported, including when `start` has been deleted. Export each state relevant to the task separately. Unknown or deleted state ids fail instead of falling back to another state. Open the PNG with the available local image viewer to check placement, text, visibility and clipping; opening the Human2AI page is unnecessary for this check.
16
16
 
@@ -95,6 +95,12 @@ This is required whenever implementing or updating consumer UI from a UI-layout
95
95
  4. Inspect the report against the raw user changes and explicit notes. If a plan is stale, exceeds the tolerance or contains conflicting alignments, reconcile the plan and run it again. Do not enlarge the tolerance or bypass validation. A larger intended layout change belongs in an explicit canvas edit before standardization. Save the standardized document through the normal Capture command against the latest revision when geometry changed; this makes the result visible and undoable. On a revision conflict, reread and standardize the new latest capture. If the report has no changes, retain the current revision without creating a redundant version.
96
96
  5. Implement from the standardized result together with the original user diff. Prefer existing layout rules, component sizes and spacing tokens. Determine whether a width means a fixed size, content sizing or available container width from context; do not copy raw canvas floats into CSS or remove legitimate percentages, relative units or image crop fractions. Standardization refines approximate geometry without replacing the consumer project's layout system. Once downstream implementation is authorized, the small standardization changes do not introduce a separate approval gate.
97
97
 
98
+ ## Session preview images
99
+
100
+ An image may include `previewReference` pointing to another session in the same project. Keep that reference and its destination-owned `assetId` when editing layout or notes. A source selects `sessionId`, `sessionType`, and either `cameraId` (spatial) or `stateId` (composition/UI), plus the server-recorded `renderedRevision`. Self-reference is rejected; cross-references are allowed. After source saves, the server updates affected previews in finite batches without recursively rendering nested sources. Missing sources retain their last image.
101
+
102
+ To create a reference, list `GET /api/v1/sessions/:sessionId/preview-sources`, then POST the selected source to `/api/v1/sessions/:sessionId/previews`. Use the returned `assetId`, dimensions, and `reference` as the new image's `previewReference`; save through the normal draft revision boundary. Do not copy a source session's asset id into the destination. A normal snapshot omits `previewReference` and retains the destination-owned image asset.
103
+
98
104
  ## Canvas stacking order
99
105
 
100
106
  Preserve the optional draft-level `layerOrder` array when editing captures. It lists content node ids from back to front, independently of array numbering, geometry, visual weight or scene depth. Without it, the existing type-based draw order applies. Keep ids unique; remove deleted ids and append new ids after the saved order. Browser layer actions preserve selected nodes’ relative order. UI groups move together in this order, which is shared across motion states. Frame boundaries, guides and selection controls are outside the content order. Preview and SVG/PNG output follow this order.