ima2-gen 1.0.10 → 1.1.0
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 +98 -201
- package/assets/screenshot.png +0 -0
- package/assets/screenshots/classic-generate-light.png +0 -0
- package/assets/screenshots/node-graph-branching.png +0 -0
- package/assets/screenshots/settings-oauth-generation.png +0 -0
- package/assets/screenshots/settings-workspace.png +0 -0
- package/assets/screenshots/style-sheet-editor.png +0 -0
- package/bin/ima2.js +12 -4
- package/bin/lib/storage-doctor.js +38 -0
- package/config.js +5 -0
- package/docs/API.md +189 -0
- package/docs/README.ja.md +182 -0
- package/docs/README.ko.md +182 -0
- package/docs/README.zh-CN.md +182 -0
- package/docs/RECOVER_OLD_IMAGES.md +91 -0
- package/lib/historyList.js +1 -0
- package/lib/imageModels.js +32 -0
- package/lib/oauthProxy.js +8 -4
- package/lib/openDirectory.js +35 -0
- package/lib/storageMigration.js +174 -9
- package/package.json +3 -2
- package/routes/edit.js +15 -0
- package/routes/generate.js +15 -0
- package/routes/index.js +2 -1
- package/routes/nodes.js +18 -1
- package/routes/sessions.js +18 -1
- package/routes/storage.js +39 -0
- package/ui/dist/assets/index-CqpVoXpZ.css +1 -0
- package/ui/dist/assets/index-IHSd1z1a.js +22 -0
- package/ui/dist/assets/index-IHSd1z1a.js.map +1 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-CBrmEeD7.css +0 -1
- package/ui/dist/assets/index-DRST1V_0.js +0 -22
- package/ui/dist/assets/index-DRST1V_0.js.map +0 -1
package/docs/API.md
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
This document lists the local HTTP API exposed by `ima2 serve`.
|
|
4
|
+
|
|
5
|
+
Base URL:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
http://localhost:3333
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Provider Policy
|
|
12
|
+
|
|
13
|
+
Image generation is OAuth-only in the current build.
|
|
14
|
+
|
|
15
|
+
- `provider: "oauth"` is the supported generation path.
|
|
16
|
+
- `provider: "api"` returns `403` with `APIKEY_DISABLED` for image generation, edit, and node generation.
|
|
17
|
+
- API keys may still be used by auxiliary developer paths such as billing checks or style-sheet extraction.
|
|
18
|
+
|
|
19
|
+
## Health And Status
|
|
20
|
+
|
|
21
|
+
| Method | Path | Notes |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| `GET` | `/api/health` | Server health, version, paths, provider policy |
|
|
24
|
+
| `GET` | `/api/providers` | Provider availability; API-key generation is disabled |
|
|
25
|
+
| `GET` | `/api/oauth/status` | OAuth proxy status and visible models |
|
|
26
|
+
| `GET` | `/api/billing` | Billing/status probe, including API key source when configured |
|
|
27
|
+
|
|
28
|
+
## In-Flight Jobs
|
|
29
|
+
|
|
30
|
+
| Method | Path | Notes |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| `GET` | `/api/inflight` | Active jobs only by default |
|
|
33
|
+
| `GET` | `/api/inflight?includeTerminal=1` | Includes recent terminal jobs for debugging |
|
|
34
|
+
| `DELETE` | `/api/inflight/:requestId` | Cancel or forget an active job |
|
|
35
|
+
|
|
36
|
+
In-flight logs and responses use `requestId` for correlation. Logs should not include raw prompts, reference data URLs, generated base64, tokens, cookies, auth headers, or raw upstream bodies.
|
|
37
|
+
|
|
38
|
+
## Generation
|
|
39
|
+
|
|
40
|
+
### `POST /api/generate`
|
|
41
|
+
|
|
42
|
+
Text-to-image and reference-guided root generation.
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"prompt": "a shiba in space",
|
|
47
|
+
"quality": "medium",
|
|
48
|
+
"size": "1024x1024",
|
|
49
|
+
"format": "png",
|
|
50
|
+
"moderation": "low",
|
|
51
|
+
"provider": "oauth",
|
|
52
|
+
"model": "gpt-5.4",
|
|
53
|
+
"references": [],
|
|
54
|
+
"requestId": "optional-client-id"
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Supported quality values: `low`, `medium`, `high`.
|
|
59
|
+
|
|
60
|
+
Supported moderation values: `auto`, `low`.
|
|
61
|
+
|
|
62
|
+
Recommended model: `gpt-5.4`. Current app default: `gpt-5.4-mini`. `gpt-5.5` is the strongest quality option when supported, but callers should expect higher quota pressure and possible Codex CLI/backend capability requirements.
|
|
63
|
+
|
|
64
|
+
### `POST /api/edit`
|
|
65
|
+
|
|
66
|
+
Image edit / image-to-image generation.
|
|
67
|
+
|
|
68
|
+
The request includes a prompt and image payload. Like `/api/generate`, this route rejects `provider: "api"` unless API-key image generation is intentionally implemented in code.
|
|
69
|
+
|
|
70
|
+
### `POST /api/node/generate`
|
|
71
|
+
|
|
72
|
+
Node-mode generation and child edits.
|
|
73
|
+
|
|
74
|
+
Body fields:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"parentNodeId": "optional-server-node-id",
|
|
79
|
+
"prompt": "continue this image",
|
|
80
|
+
"quality": "medium",
|
|
81
|
+
"size": "1024x1024",
|
|
82
|
+
"format": "png",
|
|
83
|
+
"moderation": "low",
|
|
84
|
+
"model": "gpt-5.4",
|
|
85
|
+
"references": [],
|
|
86
|
+
"externalSrc": "optional-history-url",
|
|
87
|
+
"sessionId": "session-id",
|
|
88
|
+
"clientNodeId": "client-node-id",
|
|
89
|
+
"requestId": "request-id",
|
|
90
|
+
"provider": "oauth"
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
When `parentNodeId` is present, the server loads the stored parent node image and uses the edit path. Extra node references are currently supported only for root nodes.
|
|
95
|
+
|
|
96
|
+
The route can stream Server-Sent Events when the client sends `Accept: text/event-stream`. Possible events include `phase`, `partial`, `done`, and `error`.
|
|
97
|
+
|
|
98
|
+
### `GET /api/node/:nodeId`
|
|
99
|
+
|
|
100
|
+
Fetch stored node metadata and asset URL.
|
|
101
|
+
|
|
102
|
+
## Reference Images
|
|
103
|
+
|
|
104
|
+
Reference uploads are capped at 5 items. The frontend compresses large JPEG/PNG files before sending them. HEIC/HEIF files are rejected with a user-facing conversion hint.
|
|
105
|
+
|
|
106
|
+
Server-side validation may return these reference codes:
|
|
107
|
+
|
|
108
|
+
| Code | Meaning |
|
|
109
|
+
|---|---|
|
|
110
|
+
| `REF_NOT_ARRAY` | `references` was not an array |
|
|
111
|
+
| `REF_TOO_MANY` | More than the configured reference count |
|
|
112
|
+
| `REF_NOT_STRING` | A reference item was not a string |
|
|
113
|
+
| `REF_EMPTY` | A reference item was empty |
|
|
114
|
+
| `REF_TOO_LARGE` | A reference exceeded the configured base64 size |
|
|
115
|
+
| `REF_NOT_BASE64` | A reference was not valid base64 |
|
|
116
|
+
|
|
117
|
+
## History
|
|
118
|
+
|
|
119
|
+
| Method | Path | Notes |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| `GET` | `/api/history` | List generated assets |
|
|
122
|
+
| `GET` | `/api/history?groupBy=session` | Group assets by session title |
|
|
123
|
+
| `DELETE` | `/api/history/:filename` | Tombstone a generated asset |
|
|
124
|
+
| `POST` | `/api/history/:filename/restore` | Restore a recently deleted asset |
|
|
125
|
+
|
|
126
|
+
History rows can include node metadata such as `sessionId`, `nodeId`, `clientNodeId`, `requestId`, and `refsCount`.
|
|
127
|
+
|
|
128
|
+
## Sessions And Graphs
|
|
129
|
+
|
|
130
|
+
| Method | Path | Notes |
|
|
131
|
+
|---|---|---|
|
|
132
|
+
| `GET` | `/api/sessions` | List graph sessions |
|
|
133
|
+
| `POST` | `/api/sessions` | Create a session |
|
|
134
|
+
| `GET` | `/api/sessions/:id` | Load a session and graph |
|
|
135
|
+
| `PATCH` | `/api/sessions/:id` | Rename a session |
|
|
136
|
+
| `DELETE` | `/api/sessions/:id` | Delete a session |
|
|
137
|
+
| `PUT` | `/api/sessions/:id/graph` | Save graph snapshot |
|
|
138
|
+
|
|
139
|
+
`PUT /api/sessions/:id/graph` requires an `If-Match` header containing the current graph version.
|
|
140
|
+
|
|
141
|
+
Version mismatch returns `GRAPH_VERSION_CONFLICT` and the current version. This only means the client saved against a stale graph version; it is not proof that another browser tab changed the graph.
|
|
142
|
+
|
|
143
|
+
Graph save requests may include observability headers:
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
X-Ima2-Graph-Save-Id
|
|
147
|
+
X-Ima2-Graph-Save-Reason
|
|
148
|
+
X-Ima2-Tab-Id
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Style Sheets
|
|
152
|
+
|
|
153
|
+
| Method | Path | Notes |
|
|
154
|
+
|---|---|---|
|
|
155
|
+
| `GET` | `/api/sessions/:id/style-sheet` | Load session style sheet |
|
|
156
|
+
| `PUT` | `/api/sessions/:id/style-sheet` | Save style sheet |
|
|
157
|
+
| `PATCH` | `/api/sessions/:id/style-sheet/enabled` | Toggle style sheet usage |
|
|
158
|
+
| `POST` | `/api/sessions/:id/style-sheet/extract` | Extract style fields from prompt/reference |
|
|
159
|
+
|
|
160
|
+
Style-sheet extraction can require an API key/openai client. This does not reopen API-key image generation.
|
|
161
|
+
|
|
162
|
+
## Common Error Codes
|
|
163
|
+
|
|
164
|
+
| Code | Meaning |
|
|
165
|
+
|---|---|
|
|
166
|
+
| `APIKEY_DISABLED` | API-key image generation is disabled |
|
|
167
|
+
| `INVALID_IMAGE_MODEL` | Model name is unknown or unsupported |
|
|
168
|
+
| `IMAGE_MODEL_UNSUPPORTED` | Model exists but cannot use image generation |
|
|
169
|
+
| `INVALID_MODERATION` | Moderation value is not `auto` or `low` |
|
|
170
|
+
| `SAFETY_REFUSAL` | Upstream safety refusal |
|
|
171
|
+
| `MODERATION_REFUSED` | Content generation refused by moderation |
|
|
172
|
+
| `AUTH_CHATGPT_EXPIRED` | Codex/ChatGPT OAuth session expired |
|
|
173
|
+
| `AUTH_API_KEY_INVALID` | API key is invalid, revoked, out of quota, or wrong org |
|
|
174
|
+
| `NETWORK_FAILED` | Network, proxy, VPN, or firewall failure |
|
|
175
|
+
| `OAUTH_UNAVAILABLE` | Local OAuth proxy is not available |
|
|
176
|
+
| `GRAPH_VERSION_REQUIRED` | Missing graph `If-Match` header |
|
|
177
|
+
| `GRAPH_VERSION_CONFLICT` | Stale graph version |
|
|
178
|
+
| `GRAPH_TOO_LARGE` | Graph exceeds node/edge limits |
|
|
179
|
+
| `NODE_NOT_FOUND` | Node metadata was not found |
|
|
180
|
+
|
|
181
|
+
## CLI Discovery
|
|
182
|
+
|
|
183
|
+
The server writes an advertisement file at:
|
|
184
|
+
|
|
185
|
+
```text
|
|
186
|
+
~/.ima2/server.json
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
CLI commands such as `ima2 ping`, `ima2 gen`, and `ima2 ls` use this file unless `--server` or `IMA2_SERVER` is provided.
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# ima2-gen
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/ima2-gen)
|
|
4
|
+
[](https://nodejs.org/)
|
|
5
|
+
[](../LICENSE)
|
|
6
|
+
|
|
7
|
+
> **他の言語で読む**: [English](../README.md) · [한국어](README.ko.md) · [简体中文](README.zh-CN.md)
|
|
8
|
+
|
|
9
|
+
`ima2-gen` は、ChatGPT/Codex OAuth の画像生成ワークフローをローカルの小さなデスクトップアプリのように使える画像生成スタジオです。
|
|
10
|
+
|
|
11
|
+
`npx` で起動し、Codex OAuth でログインして、プロンプトを書きながら履歴、参照画像、スタイルシート、ノード分岐で反復できます。通常の画像生成には OpenAI API key は不要です。
|
|
12
|
+
|
|
13
|
+

|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx ima2-gen serve
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
その後、`http://localhost:3333` を開きます。
|
|
22
|
+
|
|
23
|
+
Codex にまだログインしていない場合:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx @openai/codex login
|
|
27
|
+
npx ima2-gen serve
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
グローバルインストールもできます。
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install -g ima2-gen
|
|
34
|
+
ima2 serve
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## できること
|
|
38
|
+
|
|
39
|
+
- **Classic mode**: すばやく生成し、編集し、現在の画像を次の参照として使えます。
|
|
40
|
+
- **Node mode**: 良い画像を起点に、複数の方向へ分岐して試せます。
|
|
41
|
+
- **Local gallery**: 生成物をローカルに保存し、セッションごとの履歴として確認できます。
|
|
42
|
+
- **Reference images**: 参照画像を drag/drop、paste、file picker で追加できます。大きな画像は送信前に圧縮されます。
|
|
43
|
+
- **Style sheets**: 一度決めた見た目の方向性を classic/node プロンプトに再利用できます。
|
|
44
|
+
- **Observable jobs**: 進行中の生成と最近の生成を request ID で追跡できます。
|
|
45
|
+
|
|
46
|
+
## 画像生成は OAuth 専用です
|
|
47
|
+
|
|
48
|
+
現在の画像生成は、ローカルの Codex/ChatGPT OAuth 経路で実行されます。
|
|
49
|
+
|
|
50
|
+
API key が env/config に存在していても、billing 確認や style-sheet 抽出などの補助機能に使われるだけです。生成エンドポイントで `provider: "api"` を送ると `APIKEY_DISABLED` が返ります。
|
|
51
|
+
|
|
52
|
+
Settings に **Configured but disabled** と表示される場合、API key は検出されていますが、画像生成は OAuth で動いているという意味です。
|
|
53
|
+
|
|
54
|
+

|
|
55
|
+
|
|
56
|
+
## モデルの選び方
|
|
57
|
+
|
|
58
|
+
安定したバランスを重視するなら、まず **`gpt-5.4`** をおすすめします。
|
|
59
|
+
|
|
60
|
+
- `gpt-5.4` — 推奨のバランス型モデル。
|
|
61
|
+
- `gpt-5.4-mini` — 現在のアプリ既定値で、速い下書き向きです。
|
|
62
|
+
- `gpt-5.5` — 対応環境では最も高品質な選択肢です。ただし使用量の消費が大きくなる場合があり、Codex CLI の更新やアカウント/バックエンド側の image capability が必要になることがあります。
|
|
63
|
+
|
|
64
|
+
Quality は `low`, `medium`, `high`、moderation は `auto`, `low` をサポートします。
|
|
65
|
+
|
|
66
|
+
## ワークフロー
|
|
67
|
+
|
|
68
|
+
### Classic mode
|
|
69
|
+
|
|
70
|
+
1枚をすばやく作って調整したいときに使います。
|
|
71
|
+
|
|
72
|
+
1. プロンプトを書きます。
|
|
73
|
+
2. 必要なら参照画像を追加します。
|
|
74
|
+
3. モデル、quality、size、format、moderation を選びます。
|
|
75
|
+
4. 生成後、copy、download、continue を選べます。
|
|
76
|
+
|
|
77
|
+
### Node mode
|
|
78
|
+
|
|
79
|
+
アイデアを枝分かれさせながら比較したいときに使います。
|
|
80
|
+
|
|
81
|
+

|
|
82
|
+
|
|
83
|
+
各ノードは独自のプロンプトと結果を持ちます。ルートノードにはローカル参照画像を付けられ、子ノードは親画像をソースとして使います。完了した生成は request ID で再接続されるため、リロードや graph version conflict の後でも結果を復元できます。
|
|
84
|
+
|
|
85
|
+
### Settings と Style sheets
|
|
86
|
+
|
|
87
|
+
Settings workspace は、アカウント、モデル、テーマ、言語設定を生成パネルから分離します。
|
|
88
|
+
|
|
89
|
+

|
|
90
|
+
|
|
91
|
+
Style sheet は、繰り返し使いたい視覚方向を保存するための機能です。
|
|
92
|
+
|
|
93
|
+

|
|
94
|
+
|
|
95
|
+
## CLI commands
|
|
96
|
+
|
|
97
|
+
### Server
|
|
98
|
+
|
|
99
|
+
| Command | Description |
|
|
100
|
+
|---|---|
|
|
101
|
+
| `ima2 serve` | ローカル Web サーバーを起動 |
|
|
102
|
+
| `ima2 setup` | 認証設定を再構成 |
|
|
103
|
+
| `ima2 status` | config と OAuth 状態を表示 |
|
|
104
|
+
| `ima2 doctor` | Node、package、config、auth を診断 |
|
|
105
|
+
| `ima2 open` | Web UI を開く |
|
|
106
|
+
| `ima2 reset` | 保存済み config を削除 |
|
|
107
|
+
|
|
108
|
+
### Client
|
|
109
|
+
|
|
110
|
+
以下は `ima2 serve` が起動しているときに使えます。
|
|
111
|
+
|
|
112
|
+
| Command | Description |
|
|
113
|
+
|---|---|
|
|
114
|
+
| `ima2 gen <prompt>` | CLI から画像生成 |
|
|
115
|
+
| `ima2 edit <file> --prompt <text>` | 既存画像を編集 |
|
|
116
|
+
| `ima2 ls` | ローカル履歴を表示 |
|
|
117
|
+
| `ima2 show <name>` | 生成ファイルを開く |
|
|
118
|
+
| `ima2 ps` | 進行中ジョブを表示 |
|
|
119
|
+
| `ima2 ping` | 実行中サーバーを確認 |
|
|
120
|
+
|
|
121
|
+
サーバーポートは `~/.ima2/server.json` に保存されます。`--server <url>` または `IMA2_SERVER=http://localhost:3333` で上書きできます。
|
|
122
|
+
|
|
123
|
+
## Configuration
|
|
124
|
+
|
|
125
|
+
優先順位:
|
|
126
|
+
|
|
127
|
+
```text
|
|
128
|
+
environment variables > ~/.ima2/config.json > built-in defaults
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
| Variable | Default | Description |
|
|
132
|
+
|---|---:|---|
|
|
133
|
+
| `IMA2_PORT` / `PORT` | `3333` | Web server port |
|
|
134
|
+
| `IMA2_OAUTH_PROXY_PORT` / `OAUTH_PORT` | `10531` | OAuth proxy port |
|
|
135
|
+
| `IMA2_SERVER` | — | CLI target override |
|
|
136
|
+
| `IMA2_CONFIG_DIR` | `~/.ima2` | Config and SQLite location |
|
|
137
|
+
| `IMA2_GENERATED_DIR` | `~/.ima2/generated` | Generated image directory |
|
|
138
|
+
| `IMA2_NO_OAUTH_PROXY` | — | `1` で OAuth proxy の自動起動を無効化 |
|
|
139
|
+
| `IMA2_INFLIGHT_TERMINAL_TTL_MS` | `30000` | デバッグ用の recent job retention |
|
|
140
|
+
| `OPENAI_API_KEY` | — | 補助機能用。画像生成用ではありません |
|
|
141
|
+
|
|
142
|
+
## API Reference
|
|
143
|
+
|
|
144
|
+
Endpoint 一覧は [API Reference](API.md) に分離しました。
|
|
145
|
+
|
|
146
|
+
## Troubleshooting
|
|
147
|
+
|
|
148
|
+
**`ima2 ping` が server unreachable になる**
|
|
149
|
+
まず `ima2 serve` を起動し、`~/.ima2/server.json` を確認してください。`ima2 ping --server http://localhost:3333` も使えます。
|
|
150
|
+
|
|
151
|
+
**OAuth login がうまくいかない**
|
|
152
|
+
`npx @openai/codex login` を実行し、`ima2 status` を確認してから `ima2 serve` を再起動してください。
|
|
153
|
+
|
|
154
|
+
**画像生成が `APIKEY_DISABLED` で失敗する**
|
|
155
|
+
この build では OAuth で生成してください。API-key image generation は意図的に無効化されています。
|
|
156
|
+
|
|
157
|
+
**大きな参照画像が失敗する**
|
|
158
|
+
JPEG/PNG は送信前に自動圧縮されます。それでも失敗する場合は、解像度を下げた JPEG/PNG に変換してください。HEIC/HEIF は browser path ではサポートしていません。
|
|
159
|
+
|
|
160
|
+
**更新後に以前のギャラリー画像が見えない**
|
|
161
|
+
最近のバージョンでは、生成画像の保存先がインストール済みパッケージ内から `~/.ima2/generated` に移動しました。`ima2 doctor` を実行し、[古い画像の復旧ガイド](RECOVER_OLD_IMAGES.md) を確認してください。
|
|
162
|
+
|
|
163
|
+
**`gpt-5.5` だけ失敗する**
|
|
164
|
+
まず Codex CLI を最新版に更新してから再試行してください。それでも失敗する場合は、現在のアカウントやバックエンド経路で `gpt-5.5` の image capability または使用量枠がまだ異なる可能性があります。安定した代替として `gpt-5.4` を使ってください。
|
|
165
|
+
|
|
166
|
+
**Port が突然 `3457` になる**
|
|
167
|
+
別のローカルツールから `PORT=3457` が引き継がれている可能性があります。`unset PORT` するか、`IMA2_PORT=3333 ima2 serve` で起動してください。
|
|
168
|
+
|
|
169
|
+
## Development
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
git clone https://github.com/lidge-jun/ima2-gen.git
|
|
173
|
+
cd ima2-gen
|
|
174
|
+
npm install
|
|
175
|
+
npm run dev
|
|
176
|
+
npm test
|
|
177
|
+
npm run build
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## License
|
|
181
|
+
|
|
182
|
+
MIT
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# ima2-gen
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/ima2-gen)
|
|
4
|
+
[](https://nodejs.org/)
|
|
5
|
+
[](../LICENSE)
|
|
6
|
+
|
|
7
|
+
> **다른 언어로 읽기**: [English](../README.md) · [日本語](README.ja.md) · [简体中文](README.zh-CN.md)
|
|
8
|
+
|
|
9
|
+
`ima2-gen`은 ChatGPT/Codex OAuth 이미지 생성 흐름을 로컬 웹앱처럼 쓸 수 있게 만든 이미지 생성 스튜디오입니다.
|
|
10
|
+
|
|
11
|
+
`npx`로 실행하고, Codex OAuth로 로그인한 뒤, 프롬프트를 입력하면서 히스토리, 레퍼런스, 스타일 시트, 노드 브랜치로 계속 이어갈 수 있습니다. 기본 이미지 생성 경로에서는 OpenAI API 키가 필요하지 않습니다.
|
|
12
|
+
|
|
13
|
+

|
|
14
|
+
|
|
15
|
+
## 빠른 시작
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx ima2-gen serve
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
그다음 `http://localhost:3333`을 엽니다.
|
|
22
|
+
|
|
23
|
+
Codex 로그인이 아직 없다면:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx @openai/codex login
|
|
27
|
+
npx ima2-gen serve
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
전역 설치도 가능합니다.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install -g ima2-gen
|
|
34
|
+
ima2 serve
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 무엇을 할 수 있나요?
|
|
38
|
+
|
|
39
|
+
- **Classic mode**: 빠르게 이미지를 만들고, 수정하고, 현재 결과를 다시 레퍼런스로 사용합니다.
|
|
40
|
+
- **Node mode**: 마음에 드는 이미지를 여러 방향으로 분기해 실험합니다.
|
|
41
|
+
- **Local gallery**: 생성물을 내 컴퓨터에 저장하고 세션별 히스토리로 봅니다.
|
|
42
|
+
- **Reference images**: 레퍼런스를 드래그, 붙여넣기, 파일 선택으로 추가합니다. 큰 이미지는 업로드 전에 자동 압축됩니다.
|
|
43
|
+
- **Style sheets**: 한 번 잡은 시각적 방향을 classic/node 프롬프트에 재사용합니다.
|
|
44
|
+
- **Observable jobs**: 진행 중 작업과 최근 작업을 request ID로 추적합니다.
|
|
45
|
+
|
|
46
|
+
## 이미지 생성은 OAuth 전용입니다
|
|
47
|
+
|
|
48
|
+
현재 이미지 생성은 로컬 Codex/ChatGPT OAuth 경로로 실행됩니다.
|
|
49
|
+
|
|
50
|
+
API 키가 env/config에 있어도 billing 확인이나 style-sheet 추출 같은 보조 기능에만 쓰일 수 있습니다. 생성 엔드포인트에서 `provider: "api"`를 보내면 `APIKEY_DISABLED`가 반환됩니다.
|
|
51
|
+
|
|
52
|
+
설정 화면에 **Configured but disabled**가 보이면, API 키는 감지됐지만 이미지 생성은 여전히 OAuth로 실행된다는 뜻입니다.
|
|
53
|
+
|
|
54
|
+

|
|
55
|
+
|
|
56
|
+
## 모델 안내
|
|
57
|
+
|
|
58
|
+
안정적인 균형을 원하면 **`gpt-5.4`**부터 써보는 것을 권장합니다.
|
|
59
|
+
|
|
60
|
+
- `gpt-5.4` — 추천 기본 선택지.
|
|
61
|
+
- `gpt-5.4-mini` — 현재 앱 기본값이며 빠른 초안에 적합합니다.
|
|
62
|
+
- `gpt-5.5` — 지원되는 환경에서는 가장 강한 품질 선택지입니다. 다만 더 많은 할당량을 쓸 수 있고, Codex CLI 업데이트가 필요하거나 계정/백엔드별 이미지 capability가 다를 수 있습니다.
|
|
63
|
+
|
|
64
|
+
품질은 `low`, `medium`, `high`, 모더레이션은 `auto`, `low`를 지원합니다.
|
|
65
|
+
|
|
66
|
+
## 주요 흐름
|
|
67
|
+
|
|
68
|
+
### Classic mode
|
|
69
|
+
|
|
70
|
+
한 장을 빠르게 뽑고 다듬고 싶을 때 사용합니다.
|
|
71
|
+
|
|
72
|
+
1. 프롬프트를 씁니다.
|
|
73
|
+
2. 필요하면 레퍼런스를 붙입니다.
|
|
74
|
+
3. 모델, 품질, 크기, 포맷, 모더레이션을 고릅니다.
|
|
75
|
+
4. 생성 후 복사, 다운로드, 이어서 작업을 선택합니다.
|
|
76
|
+
|
|
77
|
+
### Node mode
|
|
78
|
+
|
|
79
|
+
아이디어를 가지치기하면서 비교하고 싶을 때 사용합니다.
|
|
80
|
+
|
|
81
|
+

|
|
82
|
+
|
|
83
|
+
각 노드는 자기 프롬프트와 결과를 가집니다. 루트 노드는 로컬 레퍼런스를 붙일 수 있고, 자식 노드는 부모 이미지를 소스로 사용합니다. 완료된 작업은 request ID로 다시 매칭되므로 새로고침이나 그래프 버전 충돌 뒤에도 결과를 복구할 수 있습니다.
|
|
84
|
+
|
|
85
|
+
### Settings와 Style sheets
|
|
86
|
+
|
|
87
|
+
설정 화면은 계정, 모델, 테마, 언어 설정을 생성 패널 밖으로 분리합니다.
|
|
88
|
+
|
|
89
|
+

|
|
90
|
+
|
|
91
|
+
Style sheet는 반복해서 쓰고 싶은 시각적 방향을 저장하는 기능입니다.
|
|
92
|
+
|
|
93
|
+

|
|
94
|
+
|
|
95
|
+
## CLI 명령어
|
|
96
|
+
|
|
97
|
+
### 서버
|
|
98
|
+
|
|
99
|
+
| 명령어 | 설명 |
|
|
100
|
+
|---|---|
|
|
101
|
+
| `ima2 serve` | 로컬 웹 서버 시작 |
|
|
102
|
+
| `ima2 setup` | 인증 설정 다시 구성 |
|
|
103
|
+
| `ima2 status` | config와 OAuth 상태 확인 |
|
|
104
|
+
| `ima2 doctor` | Node, 패키지, config, auth 진단 |
|
|
105
|
+
| `ima2 open` | 웹 UI 열기 |
|
|
106
|
+
| `ima2 reset` | 저장된 config 삭제 |
|
|
107
|
+
|
|
108
|
+
### 클라이언트
|
|
109
|
+
|
|
110
|
+
아래 명령어는 `ima2 serve`가 실행 중이어야 합니다.
|
|
111
|
+
|
|
112
|
+
| 명령어 | 설명 |
|
|
113
|
+
|---|---|
|
|
114
|
+
| `ima2 gen <prompt>` | CLI에서 이미지 생성 |
|
|
115
|
+
| `ima2 edit <file> --prompt <text>` | 기존 이미지 수정 |
|
|
116
|
+
| `ima2 ls` | 로컬 히스토리 보기 |
|
|
117
|
+
| `ima2 show <name>` | 생성 파일 열기 |
|
|
118
|
+
| `ima2 ps` | 진행 중 작업 보기 |
|
|
119
|
+
| `ima2 ping` | 실행 중인 서버 확인 |
|
|
120
|
+
|
|
121
|
+
서버 포트는 `~/.ima2/server.json`에 기록됩니다. `--server <url>` 또는 `IMA2_SERVER=http://localhost:3333`로 직접 지정할 수도 있습니다.
|
|
122
|
+
|
|
123
|
+
## 설정
|
|
124
|
+
|
|
125
|
+
우선순위:
|
|
126
|
+
|
|
127
|
+
```text
|
|
128
|
+
environment variables > ~/.ima2/config.json > built-in defaults
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
| 변수 | 기본값 | 설명 |
|
|
132
|
+
|---|---:|---|
|
|
133
|
+
| `IMA2_PORT` / `PORT` | `3333` | 웹 서버 포트 |
|
|
134
|
+
| `IMA2_OAUTH_PROXY_PORT` / `OAUTH_PORT` | `10531` | OAuth 프록시 포트 |
|
|
135
|
+
| `IMA2_SERVER` | — | CLI 대상 서버 직접 지정 |
|
|
136
|
+
| `IMA2_CONFIG_DIR` | `~/.ima2` | config와 SQLite 저장 위치 |
|
|
137
|
+
| `IMA2_GENERATED_DIR` | `~/.ima2/generated` | 생성 이미지 저장 위치 |
|
|
138
|
+
| `IMA2_NO_OAUTH_PROXY` | — | `1`이면 OAuth 프록시 자동 시작 비활성화 |
|
|
139
|
+
| `IMA2_INFLIGHT_TERMINAL_TTL_MS` | `30000` | 디버그용 최근 작업 보존 시간 |
|
|
140
|
+
| `OPENAI_API_KEY` | — | 보조 기능용 API 키. 이미지 생성용은 아님 |
|
|
141
|
+
|
|
142
|
+
## API 문서
|
|
143
|
+
|
|
144
|
+
엔드포인트 목록은 [API Reference](API.md)로 분리했습니다.
|
|
145
|
+
|
|
146
|
+
## 문제 해결
|
|
147
|
+
|
|
148
|
+
**`ima2 ping`이 서버에 연결하지 못한다고 나와요**
|
|
149
|
+
`ima2 serve`를 먼저 실행하고 `~/.ima2/server.json`을 확인하세요. `ima2 ping --server http://localhost:3333`도 사용할 수 있습니다.
|
|
150
|
+
|
|
151
|
+
**OAuth 로그인이 안 돼요**
|
|
152
|
+
`npx @openai/codex login`을 실행하고, `ima2 status`를 확인한 뒤 `ima2 serve`를 다시 시작하세요.
|
|
153
|
+
|
|
154
|
+
**이미지 생성이 `APIKEY_DISABLED`로 실패해요**
|
|
155
|
+
현재 빌드에서는 OAuth로 생성해야 합니다. API-key 이미지 생성은 의도적으로 비활성화되어 있습니다.
|
|
156
|
+
|
|
157
|
+
**큰 레퍼런스 이미지가 실패해요**
|
|
158
|
+
JPEG/PNG는 업로드 전에 자동 압축됩니다. 그래도 실패하면 해상도를 낮춘 JPEG/PNG로 바꿔 다시 시도하세요. HEIC/HEIF는 브라우저 경로에서 지원하지 않습니다.
|
|
159
|
+
|
|
160
|
+
**업데이트 후 예전 갤러리 이미지가 안 보여요**
|
|
161
|
+
최근 버전에서 생성 이미지 위치가 설치 폴더에서 `~/.ima2/generated`로 이동했습니다. `ima2 doctor`를 실행하고 [예전 이미지 복구 안내](RECOVER_OLD_IMAGES.md)를 확인하세요.
|
|
162
|
+
|
|
163
|
+
**`gpt-5.5`만 실패해요**
|
|
164
|
+
먼저 Codex CLI를 최신으로 업데이트한 뒤 다시 시도해보세요. 그래도 실패하면 현재 계정이나 백엔드 경로에서 `gpt-5.5` 이미지 capability 또는 할당량이 아직 다르게 적용되는 상황일 수 있으니, 안정적인 대안으로 `gpt-5.4`를 사용하세요.
|
|
165
|
+
|
|
166
|
+
**포트가 갑자기 `3457`로 떠요**
|
|
167
|
+
다른 로컬 도구에서 `PORT=3457`이 상속됐을 수 있습니다. `unset PORT`를 실행하거나 `IMA2_PORT=3333 ima2 serve`로 시작하세요.
|
|
168
|
+
|
|
169
|
+
## 개발
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
git clone https://github.com/lidge-jun/ima2-gen.git
|
|
173
|
+
cd ima2-gen
|
|
174
|
+
npm install
|
|
175
|
+
npm run dev
|
|
176
|
+
npm test
|
|
177
|
+
npm run build
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## 라이선스
|
|
181
|
+
|
|
182
|
+
MIT
|