kie-ruby 0.1.0 → 0.2.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/commands/add-model.md +155 -0
  3. data/.claude/commands/release.md +118 -0
  4. data/.claude/commands/update-model.md +177 -0
  5. data/CLAUDE.md +1 -0
  6. data/README.md +137 -2
  7. data/docs/api/INDEX.md +12 -0
  8. data/docs/api/general/INDEX.md +59 -0
  9. data/docs/api/general/flux-2-flex-image-to-image.md +257 -0
  10. data/docs/api/general/flux-2-flex-text-to-image.md +237 -0
  11. data/docs/api/general/flux-2-pro-image-to-image.md +257 -0
  12. data/docs/api/general/grok-imagine-image-to-image.md +232 -0
  13. data/docs/api/general/grok-imagine-image-to-video.md +257 -0
  14. data/docs/api/general/grok-imagine-text-to-image.md +237 -0
  15. data/docs/api/general/grok-imagine-text-to-video.md +245 -0
  16. data/docs/api/general/grok-imagine-upscale.md +217 -0
  17. data/docs/api/general/nano-banana-pro.md +275 -0
  18. data/docs/api/general/seedream-4-5-edit.md +252 -0
  19. data/docs/api/general/seedream-4-5-text-to-image.md +245 -0
  20. data/docs/api/overview.md +92 -0
  21. data/docs/api/suno/INDEX.md +44 -0
  22. data/docs/api/suno/generate.md +154 -0
  23. data/docs/api/suno/models.md +95 -0
  24. data/docs/api/suno/task-status.md +150 -0
  25. data/docs/development/INDEX.md +1 -0
  26. data/docs/development/adding-new-model.md +195 -0
  27. data/docs/development/technical-design.md +2 -8
  28. data/lib/kie/models/flux_2_flex_image_to_image.rb +16 -0
  29. data/lib/kie/models/flux_2_flex_text_to_image.rb +15 -0
  30. data/lib/kie/models/flux_2_pro_image_to_image.rb +16 -0
  31. data/lib/kie/models/grok_imagine_image_to_image.rb +15 -0
  32. data/lib/kie/models/grok_imagine_image_to_video.rb +19 -0
  33. data/lib/kie/models/grok_imagine_text_to_image.rb +14 -0
  34. data/lib/kie/models/grok_imagine_text_to_video.rb +15 -0
  35. data/lib/kie/models/grok_imagine_upscale.rb +12 -0
  36. data/lib/kie/models/seedream_4_5_edit.rb +16 -0
  37. data/lib/kie/models/seedream_4_5_text_to_image.rb +15 -0
  38. data/lib/kie/version.rb +1 -1
  39. data/lib/kie.rb +10 -0
  40. metadata +33 -1
@@ -0,0 +1,257 @@
1
+ # Grok Imagine Image-to-Video API
2
+
3
+ Grok Imagine Image-to-Video 動画生成 API。
4
+
5
+ ## 概要
6
+
7
+ Grok Imagine Image-to-Video は静止画像から動画を生成するモデル。入力画像とオプションのモーションプロンプトを組み合わせて、画像をアニメーション化する。
8
+
9
+ ### 入力方法
10
+
11
+ このモデルは2つの入力方法をサポートしており、**相互排他的**である:
12
+
13
+ 1. **外部画像 URL**(`image_urls`): 任意の外部画像 URL を指定
14
+ 2. **Grok タスク参照**(`task_id` + `index`): 過去の Grok 生成タスクの画像を参照
15
+
16
+ ## タスク作成
17
+
18
+ ### エンドポイント
19
+
20
+ ```
21
+ POST /api/v1/jobs/createTask
22
+ ```
23
+
24
+ ### リクエストパラメータ
25
+
26
+ #### トップレベル
27
+
28
+ | パラメータ | 型 | 必須 | 説明 |
29
+ |-----------|-----|------|------|
30
+ | `model` | string | Yes | `"grok-imagine/image-to-video"` 固定 |
31
+ | `input` | object | Yes | 入力パラメータ |
32
+ | `callBackUrl` | string | No | タスク完了時の Webhook URL |
33
+
34
+ #### input オブジェクト
35
+
36
+ | パラメータ | 型 | 必須 | デフォルト | 説明 |
37
+ |-----------|-----|------|-----------|------|
38
+ | `prompt` | string | No | - | モーション指示(最大 5,000 文字) |
39
+ | `image_urls` | array | No* | - | 入力画像 URL(最大 1 枚) |
40
+ | `task_id` | string | No* | - | 参照する Grok タスク ID(最大 100 文字) |
41
+ | `index` | number | No | - | 参照タスクの画像インデックス(0-5) |
42
+ | `mode` | string | No | `"normal"` | 生成モード |
43
+
44
+ *注意: `image_urls` と `task_id` は相互排他的。どちらか一方を指定する。
45
+
46
+ #### mode の値
47
+
48
+ | 値 | 説明 |
49
+ |----|------|
50
+ | `fun` | 楽しい・カジュアルなアニメーション |
51
+ | `normal` | 標準的なアニメーション |
52
+ | `spicy` | より大胆なアニメーション(外部画像使用時は `normal` に自動切替) |
53
+
54
+ ### 入力画像の仕様
55
+
56
+ | 項目 | 制限 |
57
+ |------|------|
58
+ | 画像枚数 | 最大 1 枚 |
59
+ | 最大ファイルサイズ | 10 MB |
60
+ | 対応形式 | JPEG, PNG, WebP |
61
+
62
+ ### リクエスト例
63
+
64
+ #### 外部画像 URL を使用
65
+
66
+ ```json
67
+ {
68
+ "model": "grok-imagine/image-to-video",
69
+ "input": {
70
+ "prompt": "Make the person wave their hand gently",
71
+ "image_urls": [
72
+ "https://example.com/person.jpg"
73
+ ],
74
+ "mode": "normal"
75
+ }
76
+ }
77
+ ```
78
+
79
+ #### Grok タスク参照を使用
80
+
81
+ ```json
82
+ {
83
+ "model": "grok-imagine/image-to-video",
84
+ "input": {
85
+ "prompt": "Add a gentle breeze effect to the scene",
86
+ "task_id": "previous-grok-task-id",
87
+ "index": 0,
88
+ "mode": "fun"
89
+ },
90
+ "callBackUrl": "https://example.com/webhook"
91
+ }
92
+ ```
93
+
94
+ ### レスポンス
95
+
96
+ #### 成功時
97
+
98
+ ```json
99
+ {
100
+ "code": 200,
101
+ "msg": "success",
102
+ "data": {
103
+ "taskId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
104
+ }
105
+ }
106
+ ```
107
+
108
+ #### エラー時
109
+
110
+ ```json
111
+ {
112
+ "code": 400,
113
+ "msg": "Invalid parameters"
114
+ }
115
+ ```
116
+
117
+ ## タスクステータス取得
118
+
119
+ ### エンドポイント
120
+
121
+ ```
122
+ GET /api/v1/jobs/queryTask?taskId={taskId}
123
+ ```
124
+
125
+ ### クエリパラメータ
126
+
127
+ | パラメータ | 型 | 説明 |
128
+ |-----------|-----|------|
129
+ | `taskId` | string | タスク ID |
130
+
131
+ ### レスポンス
132
+
133
+ #### 成功時
134
+
135
+ ```json
136
+ {
137
+ "code": 200,
138
+ "msg": "success",
139
+ "data": {
140
+ "taskId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
141
+ "model": "grok-imagine/image-to-video",
142
+ "state": "success",
143
+ "param": "{\"prompt\":\"...\",\"image_urls\":[...]}",
144
+ "resultJson": "{\"resultUrls\":[\"https://...\"]}",
145
+ "costTime": 30000,
146
+ "createTime": 1704067200000,
147
+ "completeTime": 1704067230000
148
+ }
149
+ }
150
+ ```
151
+
152
+ #### 処理中
153
+
154
+ ```json
155
+ {
156
+ "code": 200,
157
+ "msg": "success",
158
+ "data": {
159
+ "taskId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
160
+ "model": "grok-imagine/image-to-video",
161
+ "state": "waiting"
162
+ }
163
+ }
164
+ ```
165
+
166
+ #### 失敗時
167
+
168
+ ```json
169
+ {
170
+ "code": 200,
171
+ "msg": "success",
172
+ "data": {
173
+ "taskId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
174
+ "model": "grok-imagine/image-to-video",
175
+ "state": "fail",
176
+ "failCode": "CONTENT_POLICY_VIOLATION",
177
+ "failMsg": "The prompt violates content policy"
178
+ }
179
+ }
180
+ ```
181
+
182
+ ### タスクステータス
183
+
184
+ | ステータス | 説明 | 終了状態 |
185
+ |-----------|------|----------|
186
+ | `waiting` | 処理待ち | No |
187
+ | `success` | 完了 | Yes (成功) |
188
+ | `fail` | 失敗 | Yes (失敗) |
189
+
190
+ ### レスポンスフィールド
191
+
192
+ | フィールド | 型 | 説明 |
193
+ |-----------|-----|------|
194
+ | `taskId` | string | タスク ID |
195
+ | `model` | string | モデル名 |
196
+ | `state` | string | タスクステータス |
197
+ | `param` | string | リクエストパラメータ(JSON 文字列) |
198
+ | `resultJson` | string | 結果(JSON 文字列、成功時のみ) |
199
+ | `failCode` | string | エラーコード(失敗時) |
200
+ | `failMsg` | string | エラーメッセージ(失敗時) |
201
+ | `costTime` | integer | 処理時間(ミリ秒) |
202
+ | `createTime` | integer | 作成日時(Unix ミリ秒) |
203
+ | `completeTime` | integer | 完了日時(Unix ミリ秒) |
204
+
205
+ ## Ruby クライアントでの使用
206
+
207
+ ```ruby
208
+ client = Kie::Client.new(api_key: "your-api-key")
209
+
210
+ # 外部画像 URL を使用した動画生成
211
+ task = client.general.generate(
212
+ model: "grok-imagine/image-to-video",
213
+ input: {
214
+ prompt: "Make the character dance gracefully",
215
+ image_urls: ["https://example.com/character.jpg"]
216
+ },
217
+ mode: "fun"
218
+ )
219
+
220
+ # Grok タスク参照を使用した動画生成
221
+ task = client.general.generate(
222
+ model: "grok-imagine/image-to-video",
223
+ input: {
224
+ prompt: "Add a cinematic camera movement",
225
+ task_id: "previous-task-id",
226
+ index: 2
227
+ },
228
+ mode: "normal"
229
+ )
230
+
231
+ # 結果を取得
232
+ task.wait
233
+
234
+ if task.success?
235
+ video_url = task.urls.first
236
+ puts "Generated: #{video_url}"
237
+ else
238
+ puts "Failed: #{task.error_message}"
239
+ end
240
+ ```
241
+
242
+ ## 注意事項
243
+
244
+ 1. **相互排他的入力**: `image_urls` と `task_id` は同時に指定できない
245
+ 2. **spicy モードの制限**: 外部画像使用時、`spicy` モードは自動的に `normal` に切り替わる
246
+ 3. **動画出力**: 結果 URL は動画ファイル(MP4 等)を指す
247
+
248
+ ## コード参照
249
+
250
+ モデル定義は以下のファイルで管理されている:
251
+
252
+ - `lib/kie/models/grok_imagine_image_to_video.rb`
253
+
254
+ ## 関連ドキュメント
255
+
256
+ - [API 共通仕様](../overview.md)
257
+ - [Flux 2 Pro Image-to-Image API](flux-2-pro-image-to-image.md)
@@ -0,0 +1,237 @@
1
+ # Grok Imagine Text-to-Image API
2
+
3
+ Grok Imagine Text-to-Image 画像生成 API。
4
+
5
+ ## 概要
6
+
7
+ Grok Imagine Text-to-Image はテキストプロンプトから画像を生成するモデル。1 リクエストにつき 6 枚の画像を生成する特徴を持つ。
8
+
9
+ ## タスク作成
10
+
11
+ ### エンドポイント
12
+
13
+ ```
14
+ POST /api/v1/jobs/createTask
15
+ ```
16
+
17
+ ### リクエストパラメータ
18
+
19
+ #### トップレベル
20
+
21
+ | パラメータ | 型 | 必須 | 説明 |
22
+ |-----------|-----|------|------|
23
+ | `model` | string | Yes | `"grok-imagine/text-to-image"` 固定 |
24
+ | `input` | object | Yes | 入力パラメータ |
25
+ | `callBackUrl` | string | No | タスク完了時の Webhook URL |
26
+
27
+ #### input オブジェクト
28
+
29
+ | パラメータ | 型 | 必須 | デフォルト | 説明 |
30
+ |-----------|-----|------|-----------|------|
31
+ | `prompt` | string | Yes | - | 画像の説明(最大 5,000 文字) |
32
+
33
+ #### パラメータ
34
+
35
+ | パラメータ | 型 | 必須 | デフォルト | 説明 |
36
+ |-----------|-----|------|-----------|------|
37
+ | `aspect_ratio` | string | No | `"3:2"` | アスペクト比 |
38
+
39
+ #### aspect_ratio の値
40
+
41
+ | 値 | 説明 |
42
+ |----|------|
43
+ | `2:3` | 縦長 |
44
+ | `3:2` | 横長(デフォルト) |
45
+ | `1:1` | 正方形 |
46
+ | `9:16` | 縦長(スマートフォン向け) |
47
+ | `16:9` | 横長(ワイドスクリーン) |
48
+
49
+ ### リクエスト例
50
+
51
+ #### 基本的な使用
52
+
53
+ ```json
54
+ {
55
+ "model": "grok-imagine/text-to-image",
56
+ "input": {
57
+ "prompt": "A futuristic city at sunset with flying cars"
58
+ }
59
+ }
60
+ ```
61
+
62
+ #### すべてのパラメータを指定
63
+
64
+ ```json
65
+ {
66
+ "model": "grok-imagine/text-to-image",
67
+ "input": {
68
+ "prompt": "A serene Japanese garden with cherry blossoms in full bloom"
69
+ },
70
+ "aspect_ratio": "16:9",
71
+ "callBackUrl": "https://example.com/webhook"
72
+ }
73
+ ```
74
+
75
+ ### レスポンス
76
+
77
+ #### 成功時
78
+
79
+ ```json
80
+ {
81
+ "code": 200,
82
+ "msg": "success",
83
+ "data": {
84
+ "taskId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
85
+ }
86
+ }
87
+ ```
88
+
89
+ #### エラー時
90
+
91
+ ```json
92
+ {
93
+ "code": 400,
94
+ "msg": "Invalid parameters"
95
+ }
96
+ ```
97
+
98
+ ## タスクステータス取得
99
+
100
+ ### エンドポイント
101
+
102
+ ```
103
+ GET /api/v1/jobs/queryTask?taskId={taskId}
104
+ ```
105
+
106
+ ### クエリパラメータ
107
+
108
+ | パラメータ | 型 | 説明 |
109
+ |-----------|-----|------|
110
+ | `taskId` | string | タスク ID |
111
+
112
+ ### レスポンス
113
+
114
+ #### 成功時
115
+
116
+ ```json
117
+ {
118
+ "code": 200,
119
+ "msg": "success",
120
+ "data": {
121
+ "taskId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
122
+ "model": "grok-imagine/text-to-image",
123
+ "state": "success",
124
+ "param": "{\"prompt\":\"...\"}",
125
+ "resultJson": "{\"resultUrls\":[\"https://...\",\"https://...\",\"https://...\",\"https://...\",\"https://...\",\"https://...\"]}",
126
+ "costTime": 15000,
127
+ "createTime": 1704067200000,
128
+ "completeTime": 1704067215000
129
+ }
130
+ }
131
+ ```
132
+
133
+ #### 処理中
134
+
135
+ ```json
136
+ {
137
+ "code": 200,
138
+ "msg": "success",
139
+ "data": {
140
+ "taskId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
141
+ "model": "grok-imagine/text-to-image",
142
+ "state": "waiting"
143
+ }
144
+ }
145
+ ```
146
+
147
+ #### 失敗時
148
+
149
+ ```json
150
+ {
151
+ "code": 200,
152
+ "msg": "success",
153
+ "data": {
154
+ "taskId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
155
+ "model": "grok-imagine/text-to-image",
156
+ "state": "fail",
157
+ "failCode": "CONTENT_POLICY_VIOLATION",
158
+ "failMsg": "The prompt violates content policy"
159
+ }
160
+ }
161
+ ```
162
+
163
+ ### タスクステータス
164
+
165
+ | ステータス | 説明 | 終了状態 |
166
+ |-----------|------|----------|
167
+ | `waiting` | 処理待ち | No |
168
+ | `success` | 完了 | Yes (成功) |
169
+ | `fail` | 失敗 | Yes (失敗) |
170
+
171
+ ### レスポンスフィールド
172
+
173
+ | フィールド | 型 | 説明 |
174
+ |-----------|-----|------|
175
+ | `taskId` | string | タスク ID |
176
+ | `model` | string | モデル名 |
177
+ | `state` | string | タスクステータス |
178
+ | `param` | string | リクエストパラメータ(JSON 文字列) |
179
+ | `resultJson` | string | 結果(JSON 文字列、成功時のみ) |
180
+ | `failCode` | string | エラーコード(失敗時) |
181
+ | `failMsg` | string | エラーメッセージ(失敗時) |
182
+ | `costTime` | integer | 処理時間(ミリ秒) |
183
+ | `createTime` | integer | 作成日時(Unix ミリ秒) |
184
+ | `completeTime` | integer | 完了日時(Unix ミリ秒) |
185
+
186
+ ## Ruby クライアントでの使用
187
+
188
+ ```ruby
189
+ client = Kie::Client.new(api_key: "your-api-key")
190
+
191
+ # 基本的な画像生成
192
+ task = client.general.generate(
193
+ model: "grok-imagine/text-to-image",
194
+ input: {
195
+ prompt: "A majestic mountain landscape at dawn"
196
+ }
197
+ )
198
+
199
+ # パラメータを指定した画像生成
200
+ task = client.general.generate(
201
+ model: "grok-imagine/text-to-image",
202
+ input: {
203
+ prompt: "A cyberpunk cityscape with neon lights and rain"
204
+ },
205
+ aspect_ratio: "16:9"
206
+ )
207
+
208
+ # 結果を取得
209
+ task.wait
210
+
211
+ if task.success?
212
+ # 6 枚の画像 URL を取得
213
+ task.urls.each_with_index do |url, index|
214
+ puts "Image #{index + 1}: #{url}"
215
+ end
216
+ else
217
+ puts "Failed: #{task.error_message}"
218
+ end
219
+ ```
220
+
221
+ ## 注意事項
222
+
223
+ 1. **6 枚同時生成**: 1 リクエストにつき 6 枚の画像を生成。resultUrls 配列には 6 つの URL が含まれる
224
+ 2. **mode パラメータなし**: text-to-video とは異なり、mode(fun/normal/spicy)パラメータは存在しない
225
+ 3. **デフォルトアスペクト比**: `3:2`(text-to-video のデフォルト `2:3` とは異なる)
226
+
227
+ ## コード参照
228
+
229
+ モデル定義は以下のファイルで管理されている:
230
+
231
+ - `lib/kie/models/grok_imagine_text_to_image.rb`
232
+
233
+ ## 関連ドキュメント
234
+
235
+ - [API 共通仕様](../overview.md)
236
+ - [Grok Imagine Text-to-Video API](grok-imagine-text-to-video.md)
237
+ - [Grok Imagine Image-to-Image API](grok-imagine-image-to-image.md)