ima2-gen 1.1.9 → 1.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -1
- package/bin/commands/annotate.js +5 -3
- package/bin/commands/annotate.ts +13 -12
- package/bin/commands/cancel.js +5 -2
- package/bin/commands/cancel.ts +6 -3
- package/bin/commands/canvas-versions.js +4 -4
- package/bin/commands/canvas-versions.ts +10 -10
- package/bin/commands/capabilities.js +90 -0
- package/bin/commands/capabilities.ts +93 -0
- package/bin/commands/cardnews.js +3 -1
- package/bin/commands/cardnews.ts +18 -17
- package/bin/commands/comfy.js +2 -2
- package/bin/commands/comfy.ts +4 -4
- package/bin/commands/config.js +11 -143
- package/bin/commands/config.ts +33 -147
- package/bin/commands/defaults.js +180 -0
- package/bin/commands/defaults.ts +192 -0
- package/bin/commands/edit.js +45 -9
- package/bin/commands/edit.ts +44 -10
- package/bin/commands/gen.js +55 -14
- package/bin/commands/gen.ts +56 -18
- package/bin/commands/history.js +2 -1
- package/bin/commands/history.ts +11 -10
- package/bin/commands/ls.js +10 -5
- package/bin/commands/ls.ts +15 -11
- package/bin/commands/metadata.js +4 -1
- package/bin/commands/metadata.ts +5 -2
- package/bin/commands/multimode.js +64 -7
- package/bin/commands/multimode.ts +59 -9
- package/bin/commands/node.js +18 -8
- package/bin/commands/node.ts +24 -15
- package/bin/commands/observability.js +7 -7
- package/bin/commands/observability.ts +21 -21
- package/bin/commands/ping.js +4 -2
- package/bin/commands/ping.ts +5 -3
- package/bin/commands/prompt.js +14 -11
- package/bin/commands/prompt.ts +40 -38
- package/bin/commands/ps.js +10 -7
- package/bin/commands/ps.ts +15 -12
- package/bin/commands/session.js +4 -3
- package/bin/commands/session.ts +23 -22
- package/bin/commands/show.js +5 -2
- package/bin/commands/show.ts +8 -5
- package/bin/commands/skill.js +62 -0
- package/bin/commands/skill.ts +70 -0
- package/bin/ima2.js +14 -5
- package/bin/ima2.ts +16 -7
- package/bin/lib/args.ts +20 -1
- package/bin/lib/client.ts +20 -7
- package/bin/lib/config-store.js +156 -0
- package/bin/lib/config-store.ts +163 -0
- package/bin/lib/error-hints.ts +3 -3
- package/bin/lib/files.ts +8 -8
- package/bin/lib/output.js +19 -17
- package/bin/lib/output.ts +38 -23
- package/bin/lib/platform.js +3 -1
- package/bin/lib/platform.ts +9 -7
- package/bin/lib/recover-output.js +104 -0
- package/bin/lib/recover-output.ts +139 -0
- package/bin/lib/star-prompt.ts +1 -1
- package/bin/lib/storage-doctor.ts +3 -2
- package/config.js +1 -1
- package/config.ts +8 -6
- package/docs/CLI.md +64 -8
- package/docs/migration/runtime-test-inventory.md +146 -0
- package/lib/assetLifecycle.ts +8 -8
- package/lib/canvasVersionStore.js +2 -0
- package/lib/canvasVersionStore.ts +54 -12
- package/lib/capabilities.js +70 -0
- package/lib/capabilities.ts +84 -0
- package/lib/cardNewsGenerator.js +13 -3
- package/lib/cardNewsGenerator.ts +123 -14
- package/lib/cardNewsJobStore.ts +47 -12
- package/lib/cardNewsManifestStore.js +13 -6
- package/lib/cardNewsManifestStore.ts +56 -14
- package/lib/cardNewsPlanner.js +11 -9
- package/lib/cardNewsPlanner.ts +86 -30
- package/lib/cardNewsPlannerClient.js +23 -10
- package/lib/cardNewsPlannerClient.ts +58 -17
- package/lib/cardNewsPlannerPrompt.js +2 -0
- package/lib/cardNewsPlannerPrompt.ts +2 -0
- package/lib/cardNewsPlannerSchema.js +43 -36
- package/lib/cardNewsPlannerSchema.ts +120 -58
- package/lib/cardNewsTemplateStore.js +20 -35
- package/lib/cardNewsTemplateStore.ts +100 -58
- package/lib/codexDetect.js +5 -3
- package/lib/codexDetect.ts +5 -3
- package/lib/comfyBridge.js +3 -1
- package/lib/comfyBridge.ts +37 -16
- package/lib/db.ts +5 -5
- package/lib/errInfo.js +32 -0
- package/lib/errInfo.ts +43 -0
- package/lib/errorClassify.ts +2 -2
- package/lib/generationCancel.js +18 -0
- package/lib/generationCancel.ts +28 -0
- package/lib/generationErrors.ts +37 -11
- package/lib/historyIndex.js +34 -0
- package/lib/historyIndex.ts +51 -0
- package/lib/historyList.js +10 -6
- package/lib/historyList.ts +17 -13
- package/lib/imageMetadata.js +1 -1
- package/lib/imageMetadata.ts +8 -8
- package/lib/imageMetadataStore.ts +6 -6
- package/lib/imageModels.ts +6 -4
- package/lib/inflight.js +32 -8
- package/lib/inflight.ts +93 -16
- package/lib/localImportStore.js +2 -0
- package/lib/localImportStore.ts +8 -5
- package/lib/logger.js +7 -5
- package/lib/logger.ts +34 -23
- package/lib/nodeStore.js +2 -0
- package/lib/nodeStore.ts +20 -10
- package/lib/oauthLauncher.js +2 -2
- package/lib/oauthLauncher.ts +7 -6
- package/lib/oauthNormalize.ts +1 -1
- package/lib/oauthProxy/errors.js +93 -0
- package/lib/oauthProxy/errors.ts +128 -0
- package/lib/oauthProxy/generators.js +426 -0
- package/lib/oauthProxy/generators.ts +494 -0
- package/lib/oauthProxy/index.js +8 -0
- package/lib/oauthProxy/index.ts +28 -0
- package/lib/oauthProxy/prompts.js +99 -0
- package/lib/oauthProxy/prompts.ts +123 -0
- package/lib/oauthProxy/references.js +32 -0
- package/lib/oauthProxy/references.ts +45 -0
- package/lib/oauthProxy/runtime.js +101 -0
- package/lib/oauthProxy/runtime.ts +115 -0
- package/lib/oauthProxy/streams.js +211 -0
- package/lib/oauthProxy/streams.ts +232 -0
- package/lib/oauthProxy/types.js +6 -0
- package/lib/oauthProxy/types.ts +9 -0
- package/lib/oauthProxy.js +3 -911
- package/lib/oauthProxy.ts +3 -995
- package/lib/openDirectory.js +5 -3
- package/lib/openDirectory.ts +9 -7
- package/lib/pngInfo.ts +2 -2
- package/lib/promptImport/curatedSources.ts +4 -2
- package/lib/promptImport/discoveryRegistry.js +17 -9
- package/lib/promptImport/discoveryRegistry.ts +121 -28
- package/lib/promptImport/errors.ts +6 -6
- package/lib/promptImport/githubDiscovery.js +13 -7
- package/lib/promptImport/githubDiscovery.ts +84 -23
- package/lib/promptImport/githubFolder.js +22 -14
- package/lib/promptImport/githubFolder.ts +130 -41
- package/lib/promptImport/githubSource.js +3 -1
- package/lib/promptImport/githubSource.ts +32 -14
- package/lib/promptImport/gptImageHints.ts +10 -8
- package/lib/promptImport/parsePromptCandidates.js +2 -0
- package/lib/promptImport/parsePromptCandidates.ts +43 -17
- package/lib/promptImport/promptIndex.js +33 -23
- package/lib/promptImport/promptIndex.ts +124 -46
- package/lib/promptImport/rankPromptCandidates.js +2 -2
- package/lib/promptImport/rankPromptCandidates.ts +22 -6
- package/lib/promptImport/types.js +1 -0
- package/lib/promptImport/types.ts +103 -0
- package/lib/promptSafetyPolicy.js +5 -0
- package/lib/promptSafetyPolicy.ts +5 -0
- package/lib/providerOptions.ts +3 -2
- package/lib/referenceImageCompress.ts +15 -6
- package/lib/refs.js +2 -0
- package/lib/refs.ts +27 -11
- package/lib/requestLogger.ts +4 -3
- package/lib/responsesImageAdapter.js +54 -17
- package/lib/responsesImageAdapter.ts +169 -36
- package/lib/runtimeContext.js +100 -0
- package/lib/runtimeContext.ts +131 -0
- package/lib/runtimePorts.js +2 -1
- package/lib/runtimePorts.ts +28 -16
- package/lib/sessionStore.js +7 -5
- package/lib/sessionStore.ts +73 -37
- package/lib/storageMigration.js +18 -11
- package/lib/storageMigration.ts +63 -37
- package/lib/styleSheet.js +7 -6
- package/lib/styleSheet.ts +34 -23
- package/lib/visibleTextLanguagePolicy.js +7 -0
- package/lib/visibleTextLanguagePolicy.ts +7 -0
- package/package.json +6 -3
- package/routes/annotations.js +9 -4
- package/routes/annotations.ts +35 -12
- package/routes/canvasVersions.js +8 -3
- package/routes/canvasVersions.ts +14 -9
- package/routes/capabilities.js +13 -0
- package/routes/capabilities.ts +18 -0
- package/routes/cardNews.js +31 -18
- package/routes/cardNews.ts +66 -38
- package/routes/comfy.js +6 -3
- package/routes/comfy.ts +10 -6
- package/routes/edit.js +38 -7
- package/routes/edit.ts +63 -12
- package/routes/generate.js +71 -23
- package/routes/generate.ts +85 -31
- package/routes/health.js +9 -6
- package/routes/health.ts +17 -13
- package/routes/history.js +85 -36
- package/routes/history.ts +112 -44
- package/routes/imageImport.js +6 -2
- package/routes/imageImport.ts +9 -5
- package/routes/index.js +5 -1
- package/routes/index.ts +6 -1
- package/routes/metadata.js +9 -4
- package/routes/metadata.ts +13 -7
- package/routes/multimode.js +161 -38
- package/routes/multimode.ts +216 -58
- package/routes/nodes.js +55 -26
- package/routes/nodes.ts +108 -40
- package/routes/promptImport.js +42 -36
- package/routes/promptImport.ts +89 -64
- package/routes/prompts.js +62 -39
- package/routes/prompts.ts +120 -71
- package/routes/sessions.js +46 -24
- package/routes/sessions.ts +60 -35
- package/routes/storage.js +4 -2
- package/routes/storage.ts +13 -5
- package/server.js +25 -21
- package/server.ts +57 -37
- package/skills/ima2/SKILL.md +206 -0
- package/ui/dist/.vite/manifest.json +11 -10
- package/ui/dist/assets/{CardNewsWorkspace-BJOCey7Z.js → CardNewsWorkspace-j4ULtNdk.js} +1 -1
- package/ui/dist/assets/NodeCanvas-Bc7BUViM.js +7 -0
- package/ui/dist/assets/{PromptImportDialog-Dqu1VpUh.js → PromptImportDialog-DBKprBEo.js} +2 -2
- package/ui/dist/assets/{PromptImportDiscoverySection-Dg8T9X0L.js → PromptImportDiscoverySection-m5v55Zsy.js} +1 -1
- package/ui/dist/assets/PromptImportFolderSection-DnPvJkfJ.js +1 -0
- package/ui/dist/assets/PromptLibraryPanel-BMSqfK9C.js +2 -0
- package/ui/dist/assets/SettingsWorkspace-Cj3LD0uu.js +1 -0
- package/ui/dist/assets/{index-Cvld7dUZ.js → index-9aOJKFI-.js} +1 -1
- package/ui/dist/assets/index-De-AWE6B.css +1 -0
- package/ui/dist/assets/index-tQhOLR-C.js +28 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/NodeCanvas-C3dzYNsk.js +0 -7
- package/ui/dist/assets/PromptImportFolderSection-DBaqsFO4.js +0 -1
- package/ui/dist/assets/PromptLibraryPanel-p5QqR97M.js +0 -2
- package/ui/dist/assets/SettingsWorkspace-B5bSAZ6u.js +0 -1
- package/ui/dist/assets/index-C9cXwiWE.js +0 -25
- package/ui/dist/assets/index-CGMIkZXn.css +0 -1
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ima2
|
|
3
|
+
description: "Use the ima2-gen CLI/server to generate, edit, inspect, and manage local AI image generation jobs."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ima2 Skill
|
|
7
|
+
|
|
8
|
+
Use this skill when an agent needs to operate `ima2-gen` from an installed package or local checkout.
|
|
9
|
+
|
|
10
|
+
Prefer this package skill for ima2 work instead of a generic OpenAI image-generation
|
|
11
|
+
skill. The generic skill can describe the OpenAI API, but this skill knows ima2's
|
|
12
|
+
local server, OAuth/API provider split, history, in-flight jobs, packaged defaults,
|
|
13
|
+
and CLI command surface.
|
|
14
|
+
|
|
15
|
+
## First Commands
|
|
16
|
+
|
|
17
|
+
Start by discovering the local package and running server state:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
ima2 skill
|
|
21
|
+
ima2 skill --json
|
|
22
|
+
ima2 capabilities --json
|
|
23
|
+
ima2 defaults --json
|
|
24
|
+
ima2 ping
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If the server is not running:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
ima2 serve
|
|
31
|
+
ima2 open
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Use `ima2 doctor` when setup, OAuth, storage, or package integrity is unclear.
|
|
35
|
+
|
|
36
|
+
## Generate Images
|
|
37
|
+
|
|
38
|
+
Basic text-to-image:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
ima2 gen "a clean product photo of a red guitar pedal"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Use high quality when output fidelity matters:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
ima2 gen "a print-ready poster" --quality high
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Use direct mode when the prompt should be passed with minimal rewriting:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
ima2 gen "exact prompt text" --mode direct
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Use request-level overrides only for that one call:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
ima2 gen "cinematic mountain" --model gpt-5.5 --reasoning-effort high
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Prompting Guidance
|
|
63
|
+
|
|
64
|
+
GPT Image 2 can follow detailed visual instructions and can render visible text
|
|
65
|
+
inside images, including labels, signs, posters, UI copy, speech bubbles, and
|
|
66
|
+
product packaging text. Do not avoid text just because older image models were
|
|
67
|
+
weak at it.
|
|
68
|
+
|
|
69
|
+
When visible text matters, write the exact words in the target language and
|
|
70
|
+
script:
|
|
71
|
+
|
|
72
|
+
- Good: `A Korean poster with the exact headline "오늘 공연" and subtext "입장 무료".`
|
|
73
|
+
- Bad: `A Korean poster with some Korean text.`
|
|
74
|
+
|
|
75
|
+
Clearly specifying the desired visible text helps reduce garbled lettering,
|
|
76
|
+
wrong-language substitutions, and invented placeholder words.
|
|
77
|
+
|
|
78
|
+
For dense or important text, specify:
|
|
79
|
+
|
|
80
|
+
- exact text;
|
|
81
|
+
- language and script;
|
|
82
|
+
- placement;
|
|
83
|
+
- approximate size;
|
|
84
|
+
- visual style;
|
|
85
|
+
- whether extra readable text is forbidden.
|
|
86
|
+
|
|
87
|
+
GPT Image 2 can generate both stylized and realistic outputs. State the style
|
|
88
|
+
directly, for example:
|
|
89
|
+
|
|
90
|
+
- `manga panel`
|
|
91
|
+
- `webtoon style`
|
|
92
|
+
- `children's book illustration`
|
|
93
|
+
- `photorealistic product photo`
|
|
94
|
+
- `realistic poster mockup`
|
|
95
|
+
- `cinematic real-world scene`
|
|
96
|
+
|
|
97
|
+
Text rendering is improved, but it is still not a typesetting engine. For tiny
|
|
98
|
+
text, dense paragraphs, tables, exact legal copy, or pixel-perfect UI, prefer
|
|
99
|
+
larger text, fewer words, multiple generation passes, or post-editing.
|
|
100
|
+
|
|
101
|
+
## Reference / I2I Workflows
|
|
102
|
+
|
|
103
|
+
Reference generation:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
ima2 gen "turn this into a clean product render" --ref input.png --quality high
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Multimode reference workflow:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
ima2 multimode "create four coherent variations" --ref input.png --max-images 4
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Node-mode reference workflow:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
ima2 node generate "continue this concept" --ref input.png
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Image edit workflow:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
ima2 edit input.png --prompt "make the object blue while preserving composition"
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Do not use positional edit prompts. `ima2 edit` requires `--prompt`.
|
|
128
|
+
|
|
129
|
+
## Parallel Generation
|
|
130
|
+
|
|
131
|
+
There is no `--parallel` flag. For CLI-controlled parallel work, start several normal jobs:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
ima2 gen "variation 1" --quality high
|
|
135
|
+
ima2 gen "variation 2" --quality high
|
|
136
|
+
ima2 gen "variation 3" --quality high
|
|
137
|
+
ima2 gen "variation 4" --quality high
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Treat `capabilities.limits.maxParallel` as advisory client-side queue guidance only.
|
|
141
|
+
It is not a guaranteed server-side semaphore.
|
|
142
|
+
|
|
143
|
+
## Defaults
|
|
144
|
+
|
|
145
|
+
Inspect the running server defaults:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
ima2 defaults --json
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Inspect local effective defaults without contacting a server:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
ima2 defaults --local --json
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Persist the default model for OAuth and API provider paths:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
ima2 defaults set model gpt-5.5
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Persist the default reasoning policy:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
ima2 defaults set reasoning high
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Restart a running server after changing persisted defaults:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
ima2 serve
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Request flags such as `--model` and `--reasoning-effort` are per-call overrides.
|
|
176
|
+
They do not change persistent defaults.
|
|
177
|
+
|
|
178
|
+
## Capability Values
|
|
179
|
+
|
|
180
|
+
Use `ima2 capabilities --json` as the source of truth for:
|
|
181
|
+
|
|
182
|
+
- supported image models;
|
|
183
|
+
- unsupported model ids that should not be used as defaults;
|
|
184
|
+
- valid reasoning efforts;
|
|
185
|
+
- valid quality values;
|
|
186
|
+
- reference count and image count limits;
|
|
187
|
+
- package/server version.
|
|
188
|
+
|
|
189
|
+
Use only models from:
|
|
190
|
+
|
|
191
|
+
```text
|
|
192
|
+
valid.imageModels.supported
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Do not pick models from:
|
|
196
|
+
|
|
197
|
+
```text
|
|
198
|
+
valid.imageModels.unsupported
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Safety Notes
|
|
202
|
+
|
|
203
|
+
- Do not print API keys, OAuth tokens, config files, or `.env` values.
|
|
204
|
+
- Use `ima2 capabilities --json` before guessing model names.
|
|
205
|
+
- Use `ima2 skill path` when an agent needs the installed Markdown skill path.
|
|
206
|
+
- Use `ima2 inflight ls --json` or `ima2 ps --json` to inspect active jobs.
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"index.html": {
|
|
3
|
-
"file": "assets/index-
|
|
3
|
+
"file": "assets/index-tQhOLR-C.js",
|
|
4
4
|
"name": "index",
|
|
5
5
|
"src": "index.html",
|
|
6
6
|
"isEntry": true,
|
|
7
7
|
"dynamicImports": [
|
|
8
8
|
"src/components/canvas-mode/index.ts",
|
|
9
9
|
"src/components/PromptLibraryPanel.tsx",
|
|
10
|
+
"src/components/PromptLibraryPanel.tsx",
|
|
10
11
|
"src/components/NodeCanvas.tsx",
|
|
11
12
|
"src/components/SettingsWorkspace.tsx",
|
|
12
13
|
"src/components/card-news/CardNewsWorkspace.tsx",
|
|
13
14
|
"src/components/PromptLibraryPanel.tsx"
|
|
14
15
|
],
|
|
15
16
|
"css": [
|
|
16
|
-
"assets/index-
|
|
17
|
+
"assets/index-De-AWE6B.css"
|
|
17
18
|
]
|
|
18
19
|
},
|
|
19
20
|
"src/components/NodeCanvas.tsx": {
|
|
20
|
-
"file": "assets/NodeCanvas-
|
|
21
|
+
"file": "assets/NodeCanvas-Bc7BUViM.js",
|
|
21
22
|
"name": "NodeCanvas",
|
|
22
23
|
"src": "src/components/NodeCanvas.tsx",
|
|
23
24
|
"isDynamicEntry": true,
|
|
@@ -29,7 +30,7 @@
|
|
|
29
30
|
]
|
|
30
31
|
},
|
|
31
32
|
"src/components/PromptImportDialog.tsx": {
|
|
32
|
-
"file": "assets/PromptImportDialog-
|
|
33
|
+
"file": "assets/PromptImportDialog-DBKprBEo.js",
|
|
33
34
|
"name": "PromptImportDialog",
|
|
34
35
|
"src": "src/components/PromptImportDialog.tsx",
|
|
35
36
|
"isDynamicEntry": true,
|
|
@@ -42,7 +43,7 @@
|
|
|
42
43
|
]
|
|
43
44
|
},
|
|
44
45
|
"src/components/PromptImportDiscoverySection.tsx": {
|
|
45
|
-
"file": "assets/PromptImportDiscoverySection-
|
|
46
|
+
"file": "assets/PromptImportDiscoverySection-m5v55Zsy.js",
|
|
46
47
|
"name": "PromptImportDiscoverySection",
|
|
47
48
|
"src": "src/components/PromptImportDiscoverySection.tsx",
|
|
48
49
|
"isDynamicEntry": true,
|
|
@@ -51,7 +52,7 @@
|
|
|
51
52
|
]
|
|
52
53
|
},
|
|
53
54
|
"src/components/PromptImportFolderSection.tsx": {
|
|
54
|
-
"file": "assets/PromptImportFolderSection-
|
|
55
|
+
"file": "assets/PromptImportFolderSection-DnPvJkfJ.js",
|
|
55
56
|
"name": "PromptImportFolderSection",
|
|
56
57
|
"src": "src/components/PromptImportFolderSection.tsx",
|
|
57
58
|
"isDynamicEntry": true,
|
|
@@ -60,7 +61,7 @@
|
|
|
60
61
|
]
|
|
61
62
|
},
|
|
62
63
|
"src/components/PromptLibraryPanel.tsx": {
|
|
63
|
-
"file": "assets/PromptLibraryPanel-
|
|
64
|
+
"file": "assets/PromptLibraryPanel-BMSqfK9C.js",
|
|
64
65
|
"name": "PromptLibraryPanel",
|
|
65
66
|
"src": "src/components/PromptLibraryPanel.tsx",
|
|
66
67
|
"isDynamicEntry": true,
|
|
@@ -72,7 +73,7 @@
|
|
|
72
73
|
]
|
|
73
74
|
},
|
|
74
75
|
"src/components/SettingsWorkspace.tsx": {
|
|
75
|
-
"file": "assets/SettingsWorkspace-
|
|
76
|
+
"file": "assets/SettingsWorkspace-Cj3LD0uu.js",
|
|
76
77
|
"name": "SettingsWorkspace",
|
|
77
78
|
"src": "src/components/SettingsWorkspace.tsx",
|
|
78
79
|
"isDynamicEntry": true,
|
|
@@ -81,7 +82,7 @@
|
|
|
81
82
|
]
|
|
82
83
|
},
|
|
83
84
|
"src/components/canvas-mode/index.ts": {
|
|
84
|
-
"file": "assets/index-
|
|
85
|
+
"file": "assets/index-9aOJKFI-.js",
|
|
85
86
|
"name": "index",
|
|
86
87
|
"src": "src/components/canvas-mode/index.ts",
|
|
87
88
|
"isDynamicEntry": true,
|
|
@@ -90,7 +91,7 @@
|
|
|
90
91
|
]
|
|
91
92
|
},
|
|
92
93
|
"src/components/card-news/CardNewsWorkspace.tsx": {
|
|
93
|
-
"file": "assets/CardNewsWorkspace-
|
|
94
|
+
"file": "assets/CardNewsWorkspace-j4ULtNdk.js",
|
|
94
95
|
"name": "CardNewsWorkspace",
|
|
95
96
|
"src": "src/components/card-news/CardNewsWorkspace.tsx",
|
|
96
97
|
"isDynamicEntry": true,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u,
|
|
1
|
+
import{u,l,j as e,m as v,a as N,e as y}from"./index-tQhOLR-C.js";function f(s){const r=s.slots.filter(c=>c.kind==="text"||c.textKind).length,d=s.slots.filter(c=>c.kind==="image").length;return`${r} text / ${d} image`}function _(){const{t:s}=u(),r=l(t=>t.templates),d=l(t=>t.imageTemplateId),c=l(t=>t.setImageTemplate);return e.jsxs("section",{className:"card-news-panel",children:[e.jsxs("div",{className:"card-news-panel__head",children:[e.jsx("span",{children:s("cardNews.imageTemplate")}),e.jsx("button",{type:"button",disabled:!0,title:s("cardNews.newTemplateLater"),children:"+"})]}),e.jsx("div",{className:"card-news-template-grid",children:r.map(t=>e.jsxs("button",{type:"button",className:`card-news-template${d===t.id?" selected":""}`,onClick:()=>c(t.id),children:[e.jsx("img",{src:t.previewUrl,alt:""}),e.jsxs("span",{className:"card-news-template__body",children:[e.jsx("span",{className:"card-news-template__name",children:t.name}),e.jsx("span",{className:"card-news-template__meta",children:f(t)}),e.jsx("span",{className:"card-news-template__sizes",children:t.recommendedOutputSizes.join(" · ")})]})]},t.id))})]})}function k(){const{t:s}=u(),r=l(t=>t.roleTemplates),d=l(t=>t.roleTemplateId),c=l(t=>t.setRoleTemplate);return e.jsxs("section",{className:"card-news-panel",children:[e.jsx("div",{className:"card-news-panel__head",children:e.jsx("span",{children:s("cardNews.roleTemplate")})}),e.jsx("div",{className:"card-news-role-row",children:r.map(t=>e.jsx("button",{type:"button",className:d===t.id?"selected":"",onClick:()=>c(t.id),children:t.name},t.id))})]})}function C({status:s,locked:r}){const{t:d}=u(),c=r?"locked":s,t=c==="queued"||c==="generating";return e.jsxs("span",{className:`card-news-status-badge card-news-status-badge--${c}`,children:[t?e.jsx("span",{className:"card-news-spinner","aria-hidden":"true"}):null,d(`cardNews.status.${c}`)]})}function T(s,r){const d=`cardNews.roles.${s}`,c=r(d);return c===d?s:c}function F(){const{t:s}=u(),r=l(t=>t.activePlan),d=l(t=>t.selectedCardId),c=l(t=>t.selectCard);return r?e.jsx("div",{className:"card-news-deck","aria-label":"Card deck",onWheel:v,children:r.cards.map(t=>e.jsxs("button",{type:"button",className:`card-news-deck-card${d===t.id?" selected":""}`,onClick:()=>c(t.id),children:[e.jsx("span",{children:String(t.order).padStart(2,"0")}),t.url?e.jsx("img",{src:t.url,alt:"",className:"card-news-deck-card__thumb"}):null,e.jsx("strong",{children:T(t.role,s)}),e.jsx("small",{children:t.headline||t.textFields.find(m=>m.renderMode==="in-image")?.text}),e.jsx(C,{status:t.status,locked:t.locked})]},t.id))}):null}const I=[];function S(){const{t:s}=u(),r=l(t=>t.activePlan?.cards??I),d=l(t=>t.generating),c={total:r.length,done:r.filter(t=>t.status==="generated").length,queued:r.filter(t=>t.status==="queued").length,errors:r.filter(t=>t.status==="error").length,skipped:r.filter(t=>t.locked||t.status==="skipped").length};return c.total?e.jsxs("div",{className:"card-news-batch-bar","aria-live":"polite",children:[e.jsx("span",{children:d?s("cardNews.progress.generating",{done:c.done,total:c.total}):s("cardNews.progress.summary",{done:c.done,total:c.total})}),e.jsx("span",{children:s("cardNews.progress.detail",{queued:c.queued,errors:c.errors,skipped:c.skipped})})]}):null}function $({meta:s}){const{t:r}=u();if(!s)return null;const d=s.mode==="structured-output"?r("cardNews.planner.structured"):s.mode==="json-mode"?r("cardNews.planner.jsonMode"):r("cardNews.planner.fallback");return e.jsxs("span",{className:"card-news-planner-badge",children:[d," · ",s.model,s.repaired?` · ${r("cardNews.planner.repaired")}`:""]})}function M(s){const r=s.textFields.filter(d=>d.renderMode==="in-image"&&d.text).map(d=>`[${d.placement}] ${d.text}`);return[s.headline,...r].filter(Boolean).join(`
|
|
2
2
|
`)}function E(s,r){const d=s.slotId?r?.slots.find(c=>c.id===s.slotId):null;return d?{left:`${d.x/20.48}%`,top:`${d.y/20.48}%`,width:`${d.w/20.48}%`,minHeight:`${d.h/20.48}%`}:P(s)}const w={"top-left":{left:"10%",top:"10%",width:"34%"},"top-center":{left:"50%",top:"10%",width:"42%",transform:"translateX(-50%)"},"top-right":{right:"10%",top:"10%",width:"34%"},"center-left":{left:"10%",top:"50%",width:"34%",transform:"translateY(-50%)"},center:{left:"50%",top:"50%",width:"44%",transform:"translate(-50%, -50%)"},"center-right":{right:"10%",top:"50%",width:"34%",transform:"translateY(-50%)"},"bottom-left":{left:"10%",bottom:"10%",width:"34%"},"bottom-center":{left:"50%",bottom:"10%",width:"42%",transform:"translateX(-50%)"},"bottom-right":{right:"10%",bottom:"10%",width:"34%"},free:{left:"50%",top:"50%",width:"44%",transform:"translate(-50%, -50%)"}};function P(s){return w[s.placement]||w.center}function L(){const{t:s}=u(),r=l(a=>a.activePlan),d=l(a=>a.selectedCardId),c=l(a=>a.selectedTextFieldId),t=l(a=>a.templates),m=l(a=>a.plannerMeta),o=l(a=>a.retryCard),p=l(a=>a.selectTextField),i=r?.cards.find(a=>a.id===d)||r?.cards[0],x=r?t.find(a=>a.id===r.imageTemplateId):void 0,n=i?.textFields.filter(a=>a.renderMode==="in-image")||[];return!r||!i?e.jsxs("section",{className:"card-news-empty",children:[e.jsxs("div",{className:"card-news-empty__deck","aria-hidden":"true",children:[e.jsx("div",{className:"card-news-empty__card card-news-empty__card--back"}),e.jsx("div",{className:"card-news-empty__card card-news-empty__card--mid"}),e.jsxs("div",{className:"card-news-empty__card",children:[e.jsx("span",{}),e.jsx("strong",{}),e.jsx("em",{})]})]}),e.jsxs("div",{className:"card-news-empty__copy",children:[e.jsx("span",{children:s("uiMode.cardNews")}),e.jsx("h2",{children:s("cardNews.emptyTitle")}),e.jsx("p",{children:s("cardNews.emptyBody")})]})]}):e.jsxs("section",{className:"card-news-stage",children:[e.jsxs("div",{className:"card-news-stage__header",children:[e.jsxs("div",{children:[e.jsx("h2",{children:r.title}),e.jsx("p",{children:r.generationStrategy}),e.jsx($,{meta:m})]}),e.jsxs("span",{children:[i.order," / ",r.cards.length]})]}),e.jsx(S,{}),e.jsxs("div",{className:"card-news-preview",children:[i.status==="queued"||i.status==="generating"?e.jsx("div",{className:"card-news-preview__loading",children:s("cardNews.progress.cardGenerating")}):i.status==="error"?e.jsxs("div",{className:"card-news-preview__error",children:[e.jsx("span",{children:i.error||s("cardNews.error")}),i.locked?null:e.jsx("button",{type:"button",onClick:()=>{o(i.id)},children:s("cardNews.retryCard")})]}):i.url?e.jsx("img",{src:i.url,alt:i.headline}):e.jsx("div",{className:"card-news-preview__slot"}),n.length?e.jsx("div",{className:"card-news-stage-overlay",children:n.map(a=>e.jsx("button",{type:"button",className:`card-news-stage-overlay__field card-news-stage-overlay__field--${a.placement}${c===a.id?" selected":""}`,style:E(a,x),onClick:()=>p(a.id),"aria-label":s("cardNews.selectTextField",{text:a.text||a.kind}),children:e.jsx("span",{children:a.text||a.kind})},a.id))}):null]}),i.url?e.jsxs("div",{className:"card-news-result-actions",children:[e.jsx("button",{type:"button",onClick:()=>navigator.clipboard?.writeText(i.visualPrompt),children:s("cardNews.actions.copyPrompt")}),e.jsx("button",{type:"button",onClick:()=>navigator.clipboard?.writeText(M(i)),children:s("cardNews.actions.copyCopy")}),e.jsx("a",{href:i.url,target:"_blank",rel:"noreferrer",children:s("cardNews.actions.openImage")}),e.jsx("a",{href:i.url,download:!0,children:s("cardNews.actions.downloadCard")})]}):null]})}function g(s,r){const d=`cardNews.placements.${s}`,c=r(d);return c===d?s:c}function R({placement:s}){const{t:r}=u();return e.jsx("span",{className:"card-news-placement-chip",children:g(s,r)})}const B=["headline","body","caption","cta","badge","number"],D=["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right","free"],q=["in-image","ui-only"],K=["primary","secondary","supporting"];function h(s,r,d){const c=`cardNews.${s}.${r}`,t=d(c);return t===c?r:t}function A({field:s,locked:r,selected:d=!1,onSelect:c,onChange:t,onRemove:m}){const{t:o}=u(),p=s.text.length,i=typeof s.maxChars=="number"&&p>s.maxChars,x=s.maxChars===null||s.maxChars>80;return e.jsxs("div",{className:`card-news-text-field-card${d?" selected":""}`,onClick:c,children:[e.jsxs("div",{className:"card-news-text-field-card__header",children:[e.jsx("span",{children:h("textKinds",s.kind,o)}),e.jsx(R,{placement:s.placement})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:o("cardNews.textFieldText")}),x?e.jsx("textarea",{value:s.text,disabled:r,onChange:n=>t({text:n.target.value,source:"user"})}):e.jsx("input",{value:s.text,disabled:r,onChange:n=>t({text:n.target.value,source:"user"})})]}),e.jsxs("div",{className:"card-news-text-field-card__grid",children:[e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:o("cardNews.textKind")}),e.jsx("select",{value:s.kind,disabled:r,onChange:n=>t({kind:n.target.value,source:"user"}),children:B.map(n=>e.jsx("option",{value:n,children:h("textKinds",n,o)},n))})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:o("cardNews.placement")}),e.jsx("select",{value:s.placement,disabled:r,onChange:n=>t({placement:n.target.value,source:"user"}),children:D.map(n=>e.jsx("option",{value:n,children:g(n,o)},n))})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:o("cardNews.renderMode")}),e.jsx("select",{value:s.renderMode,disabled:r,onChange:n=>t({renderMode:n.target.value,source:"user"}),children:q.map(n=>e.jsx("option",{value:n,children:h("renderModes",n,o)},n))})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:o("cardNews.hierarchyLabel")}),e.jsx("select",{value:s.hierarchy,disabled:r,onChange:n=>t({hierarchy:n.target.value,source:"user"}),children:K.map(n=>e.jsx("option",{value:n,children:h("hierarchy",n,o)},n))})]})]}),e.jsxs("div",{className:`card-news-text-field-card__meta${i?" over":""}`,children:[e.jsx("span",{children:s.maxChars===null?p:`${p}/${s.maxChars}`}),i?e.jsx("span",{children:o("cardNews.textTooLong")}):null,m?e.jsx("button",{type:"button",disabled:r,onClick:m,children:o("cardNews.removeTextField")}):null]})]})}function H(){return{id:`tf_${Date.now().toString(36)}`,kind:"body",text:"",renderMode:"in-image",placement:"center",slotId:null,hierarchy:"supporting",maxChars:null,language:null,source:"user"}}function Y(){const{t:s}=u(),r=l(a=>a.activePlan),d=l(a=>a.selectedCardId),c=l(a=>a.selectedTextFieldId),t=l(a=>a.updateCard),m=l(a=>a.updateTextField),o=l(a=>a.addTextField),p=l(a=>a.removeTextField),i=l(a=>a.selectTextField),x=l(a=>a.retryCard),n=r?.cards.find(a=>a.id===d)||r?.cards[0];return n?e.jsxs("aside",{className:"card-news-inspector",children:[e.jsx("div",{className:"section-title",children:s("cardNews.inspector")}),e.jsxs("div",{className:"card-news-inspector-group",children:[e.jsx("span",{className:"card-news-inspector-label",children:s("cardNews.cardTitle")}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:s("cardNews.headline")}),e.jsx("input",{value:n.headline,disabled:n.locked,onChange:a=>t(n.id,{headline:a.target.value})})]})]}),e.jsxs("div",{className:"card-news-inspector-group",children:[e.jsxs("div",{className:"card-news-inspector-row",children:[e.jsx("span",{className:"card-news-inspector-label",children:s("cardNews.textFields")}),e.jsx("button",{type:"button",className:"secondary-btn",disabled:n.locked,onClick:()=>o(n.id,H()),children:s("cardNews.addTextField")})]}),n.textFields.length?n.textFields.map(a=>e.jsx(A,{field:a,locked:n.locked,selected:c===a.id,onSelect:()=>i(a.id),onChange:b=>m(n.id,a.id,b),onRemove:()=>p(n.id,a.id)},a.id)):e.jsx("p",{className:"card-news-muted",children:s("cardNews.noTextFields")})]}),e.jsxs("details",{className:"card-news-inspector-group card-news-advanced-prompt",children:[e.jsx("summary",{children:s("cardNews.designPrompt")}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:s("cardNews.visualPrompt")}),e.jsx("textarea",{value:n.visualPrompt,disabled:n.locked,onChange:a=>t(n.id,{visualPrompt:a.target.value})})]})]}),n.imageFilename?e.jsxs("div",{className:"card-news-generated-meta",children:[e.jsx("span",{children:s("cardNews.generatedMeta")}),e.jsx("code",{children:n.imageFilename}),e.jsx("span",{children:n.status})]}):null,n.locked?e.jsx("p",{className:"card-news-locked-help",children:s("cardNews.lockedHelp")}):null,e.jsx("button",{type:"button",className:`secondary-btn${n.locked?" active":""}`,onClick:()=>t(n.id,{locked:!n.locked}),children:n.locked?s("cardNews.locked"):s("cardNews.unlocked")}),e.jsx("button",{type:"button",className:"secondary-btn",disabled:n.locked||!["draft","error"].includes(n.status),onClick:()=>{x(n.id)},children:s("cardNews.retryCard")})]}):e.jsxs("aside",{className:"card-news-inspector card-news-inspector-empty",children:[e.jsx("div",{className:"section-title",children:s("cardNews.inspector")}),e.jsxs("div",{className:"card-news-inspector-empty__mock","aria-hidden":"true",children:[e.jsx("span",{}),e.jsx("strong",{}),e.jsx("i",{}),e.jsx("i",{})]}),e.jsx("p",{children:s("cardNews.noCard")})]})}const j="ima2:cardNewsMobileNoticeShown";function z(){const{t:s}=u(),r=y(),[d,c]=N.useState(()=>{if(typeof window>"u")return!0;try{return localStorage.getItem(j)==="1"}catch{return!1}});if(!r||d)return null;const t=()=>{try{localStorage.setItem(j,"1")}catch{}c(!0)};return e.jsxs("div",{className:"card-news-mobile-notice",role:"status",children:[e.jsx("span",{children:s("mobile.cardNewsBanner")}),e.jsx("button",{type:"button",onClick:t,children:s("mobile.dismiss")})]})}function W(){const{t:s}=u(),r=l(c=>c.hydrate),d=l(c=>c.error);return N.useEffect(()=>{r()},[r]),e.jsxs("main",{className:"card-news-workspace","aria-label":s("cardNews.workspace"),children:[e.jsx(z,{}),e.jsxs("div",{className:"card-news-setup",children:[e.jsx(_,{}),e.jsx(k,{})]}),e.jsxs("div",{className:"card-news-main",children:[d?e.jsx("div",{className:"card-news-error",role:"alert",children:d}):null,e.jsx(L,{}),e.jsx(F,{})]}),e.jsx(Y,{})]})}export{W as CardNewsWorkspace};
|