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.
- checksums.yaml +4 -4
- data/.claude/commands/add-model.md +155 -0
- data/.claude/commands/release.md +118 -0
- data/.claude/commands/update-model.md +177 -0
- data/CLAUDE.md +1 -0
- data/README.md +137 -2
- data/docs/api/INDEX.md +12 -0
- data/docs/api/general/INDEX.md +59 -0
- data/docs/api/general/flux-2-flex-image-to-image.md +257 -0
- data/docs/api/general/flux-2-flex-text-to-image.md +237 -0
- data/docs/api/general/flux-2-pro-image-to-image.md +257 -0
- data/docs/api/general/grok-imagine-image-to-image.md +232 -0
- data/docs/api/general/grok-imagine-image-to-video.md +257 -0
- data/docs/api/general/grok-imagine-text-to-image.md +237 -0
- data/docs/api/general/grok-imagine-text-to-video.md +245 -0
- data/docs/api/general/grok-imagine-upscale.md +217 -0
- data/docs/api/general/nano-banana-pro.md +275 -0
- data/docs/api/general/seedream-4-5-edit.md +252 -0
- data/docs/api/general/seedream-4-5-text-to-image.md +245 -0
- data/docs/api/overview.md +92 -0
- data/docs/api/suno/INDEX.md +44 -0
- data/docs/api/suno/generate.md +154 -0
- data/docs/api/suno/models.md +95 -0
- data/docs/api/suno/task-status.md +150 -0
- data/docs/development/INDEX.md +1 -0
- data/docs/development/adding-new-model.md +195 -0
- data/docs/development/technical-design.md +2 -8
- data/lib/kie/models/flux_2_flex_image_to_image.rb +16 -0
- data/lib/kie/models/flux_2_flex_text_to_image.rb +15 -0
- data/lib/kie/models/flux_2_pro_image_to_image.rb +16 -0
- data/lib/kie/models/grok_imagine_image_to_image.rb +15 -0
- data/lib/kie/models/grok_imagine_image_to_video.rb +19 -0
- data/lib/kie/models/grok_imagine_text_to_image.rb +14 -0
- data/lib/kie/models/grok_imagine_text_to_video.rb +15 -0
- data/lib/kie/models/grok_imagine_upscale.rb +12 -0
- data/lib/kie/models/seedream_4_5_edit.rb +16 -0
- data/lib/kie/models/seedream_4_5_text_to_image.rb +15 -0
- data/lib/kie/version.rb +1 -1
- data/lib/kie.rb +10 -0
- metadata +33 -1
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Suno タスクステータス API
|
|
2
|
+
|
|
3
|
+
音楽生成タスクのステータスと結果を取得する API。
|
|
4
|
+
|
|
5
|
+
## エンドポイント
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
GET /api/v1/generate/{taskId}
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## パスパラメータ
|
|
12
|
+
|
|
13
|
+
| パラメータ | 型 | 説明 |
|
|
14
|
+
|-----------|-----|------|
|
|
15
|
+
| `taskId` | string | 音楽生成タスクの一意識別子 |
|
|
16
|
+
|
|
17
|
+
## レスポンス
|
|
18
|
+
|
|
19
|
+
### 成功時
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"code": 200,
|
|
24
|
+
"msg": "success",
|
|
25
|
+
"data": {
|
|
26
|
+
"taskId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
|
|
27
|
+
"parentMusicId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
|
|
28
|
+
"param": "{\"model\":\"V4_5\",\"prompt\":\"...\"}",
|
|
29
|
+
"status": "SUCCESS",
|
|
30
|
+
"type": "chirp-v4",
|
|
31
|
+
"operationType": "generate",
|
|
32
|
+
"response": {
|
|
33
|
+
"sunoData": [
|
|
34
|
+
{
|
|
35
|
+
"audioUrl": "https://...",
|
|
36
|
+
"streamAudioUrl": "https://...",
|
|
37
|
+
"imageUrl": "https://...",
|
|
38
|
+
"prompt": "A happy pop song",
|
|
39
|
+
"modelName": "V4_5",
|
|
40
|
+
"title": "Summer Days",
|
|
41
|
+
"tags": "pop, happy",
|
|
42
|
+
"createTime": 1704067200000,
|
|
43
|
+
"duration": 180.5
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### エラー時
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"code": 200,
|
|
56
|
+
"msg": "success",
|
|
57
|
+
"data": {
|
|
58
|
+
"taskId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
|
|
59
|
+
"status": "GENERATE_AUDIO_FAILED",
|
|
60
|
+
"errorCode": 408,
|
|
61
|
+
"errorMessage": "Generation timeout"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## タスクステータス
|
|
67
|
+
|
|
68
|
+
| ステータス | 説明 | 終了状態 |
|
|
69
|
+
|-----------|------|----------|
|
|
70
|
+
| `PENDING` | 処理待ち | No |
|
|
71
|
+
| `TEXT_SUCCESS` | テキスト処理完了 | No |
|
|
72
|
+
| `FIRST_SUCCESS` | 最初の生成完了 | No |
|
|
73
|
+
| `SUCCESS` | 生成完了 | Yes (成功) |
|
|
74
|
+
| `CREATE_TASK_FAILED` | タスク作成失敗 | Yes (失敗) |
|
|
75
|
+
| `GENERATE_AUDIO_FAILED` | 音声生成失敗 | Yes (失敗) |
|
|
76
|
+
| `CALLBACK_EXCEPTION` | コールバック例外 | Yes (失敗) |
|
|
77
|
+
| `SENSITIVE_WORD_ERROR` | 禁止ワード検出 | Yes (失敗) |
|
|
78
|
+
|
|
79
|
+
## レスポンスフィールド
|
|
80
|
+
|
|
81
|
+
### メインフィールド
|
|
82
|
+
|
|
83
|
+
| フィールド | 型 | 説明 |
|
|
84
|
+
|-----------|-----|------|
|
|
85
|
+
| `taskId` | string | タスク ID |
|
|
86
|
+
| `parentMusicId` | string | 拡張元の音楽 ID(extend 操作時) |
|
|
87
|
+
| `param` | string | 生成に使用したパラメータ(JSON 文字列) |
|
|
88
|
+
| `status` | string | タスクステータス |
|
|
89
|
+
| `type` | string | タスクタイプ(`chirp-v3-5`, `chirp-v4`) |
|
|
90
|
+
| `operationType` | string | 操作タイプ |
|
|
91
|
+
| `errorCode` | integer | エラーコード(失敗時) |
|
|
92
|
+
| `errorMessage` | string | エラーメッセージ(失敗時) |
|
|
93
|
+
|
|
94
|
+
### operationType
|
|
95
|
+
|
|
96
|
+
| 値 | 説明 |
|
|
97
|
+
|----|------|
|
|
98
|
+
| `generate` | 新規生成 |
|
|
99
|
+
| `extend` | 楽曲の延長 |
|
|
100
|
+
| `upload_cover` | カバー画像アップロード |
|
|
101
|
+
| `upload_extend` | 拡張用アップロード |
|
|
102
|
+
|
|
103
|
+
### sunoData フィールド
|
|
104
|
+
|
|
105
|
+
| フィールド | 型 | 説明 |
|
|
106
|
+
|-----------|-----|------|
|
|
107
|
+
| `audioUrl` | string | 音声ファイル URL |
|
|
108
|
+
| `streamAudioUrl` | string | ストリーミング用 URL |
|
|
109
|
+
| `imageUrl` | string | カバー画像 URL |
|
|
110
|
+
| `prompt` | string | 使用したプロンプト |
|
|
111
|
+
| `modelName` | string | モデル名 |
|
|
112
|
+
| `title` | string | 楽曲タイトル |
|
|
113
|
+
| `tags` | string | 音楽のタグ |
|
|
114
|
+
| `createTime` | integer | 作成日時(Unix ミリ秒) |
|
|
115
|
+
| `duration` | number | 楽曲の長さ(秒) |
|
|
116
|
+
|
|
117
|
+
## Ruby クライアントでの使用
|
|
118
|
+
|
|
119
|
+
```ruby
|
|
120
|
+
client = Kie::Client.new(api_key: "your-api-key")
|
|
121
|
+
|
|
122
|
+
# 生成タスクを作成
|
|
123
|
+
task = client.generate(
|
|
124
|
+
model: "V4_5",
|
|
125
|
+
input: {
|
|
126
|
+
prompt: "A happy pop song",
|
|
127
|
+
custom_mode: false,
|
|
128
|
+
instrumental: false
|
|
129
|
+
}
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
# ステータスを確認
|
|
133
|
+
status = task.status # => "PENDING"
|
|
134
|
+
|
|
135
|
+
# 完了まで待機(ポーリング)
|
|
136
|
+
result = task.wait
|
|
137
|
+
|
|
138
|
+
# 結果を取得
|
|
139
|
+
if result["status"] == "SUCCESS"
|
|
140
|
+
audio_url = result.dig("response", "sunoData", 0, "audioUrl")
|
|
141
|
+
puts "Generated: #{audio_url}"
|
|
142
|
+
else
|
|
143
|
+
puts "Failed: #{result['errorMessage']}"
|
|
144
|
+
end
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## 関連ドキュメント
|
|
148
|
+
|
|
149
|
+
- [音楽生成 API](./generate.md)
|
|
150
|
+
- [API 共通仕様](../overview.md)
|
data/docs/development/INDEX.md
CHANGED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# 新モデル追加ガイド
|
|
2
|
+
|
|
3
|
+
このドキュメントでは、Kie.ai Ruby Client に新しいモデルを追加する際に変更が必要なファイルと手順を説明します。
|
|
4
|
+
|
|
5
|
+
## 変更対象ファイル一覧
|
|
6
|
+
|
|
7
|
+
### 1. コード変更(必須)
|
|
8
|
+
|
|
9
|
+
| ファイル | 変更内容 |
|
|
10
|
+
|:---------|:---------|
|
|
11
|
+
| `lib/kie/models/<model_name>.rb` | モデル定義ファイルの新規作成 |
|
|
12
|
+
| `lib/kie.rb` | require 文の追加 |
|
|
13
|
+
|
|
14
|
+
### 2. テスト変更(必須)
|
|
15
|
+
|
|
16
|
+
| ファイル | 変更内容 |
|
|
17
|
+
|:---------|:---------|
|
|
18
|
+
| `spec/kie/models/<model_name>_spec.rb` | モデルスペックの新規作成 |
|
|
19
|
+
| `spec/integration/model_routing_spec.rb` | ルーティングテストへの追加 |
|
|
20
|
+
|
|
21
|
+
### 3. ドキュメント変更(必須)
|
|
22
|
+
|
|
23
|
+
| ファイル | 変更内容 |
|
|
24
|
+
|:---------|:---------|
|
|
25
|
+
| `README.md` | Supported Models テーブルへの追加 |
|
|
26
|
+
| `docs/api/<category>/<model>.md` | API 仕様ドキュメントの新規作成 |
|
|
27
|
+
| `docs/api/<category>/INDEX.md` | INDEX への参照追加 |
|
|
28
|
+
|
|
29
|
+
## 詳細手順
|
|
30
|
+
|
|
31
|
+
### Step 1: モデル定義ファイルの作成
|
|
32
|
+
|
|
33
|
+
`lib/kie/models/<model_name>.rb` を作成します。
|
|
34
|
+
|
|
35
|
+
**Suno モデルの場合:**
|
|
36
|
+
|
|
37
|
+
```ruby
|
|
38
|
+
# frozen_string_literal: true
|
|
39
|
+
|
|
40
|
+
Kie::ModelRegistry.register(
|
|
41
|
+
Kie::ModelDefinition.new(
|
|
42
|
+
name: "<MODEL_NAME>",
|
|
43
|
+
category: :suno,
|
|
44
|
+
input_constraints: {
|
|
45
|
+
prompt: { type: :string, max_length: 3000, max_length_non_custom: 500 },
|
|
46
|
+
style: { type: :string, max_length: 200 },
|
|
47
|
+
title: { type: :string, max_length: 80 }
|
|
48
|
+
},
|
|
49
|
+
parameters: {}
|
|
50
|
+
)
|
|
51
|
+
)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**General モデルの場合:**
|
|
55
|
+
|
|
56
|
+
```ruby
|
|
57
|
+
# frozen_string_literal: true
|
|
58
|
+
|
|
59
|
+
Kie::ModelRegistry.register(
|
|
60
|
+
Kie::ModelDefinition.new(
|
|
61
|
+
name: "<model-name>",
|
|
62
|
+
category: :general,
|
|
63
|
+
input_constraints: {
|
|
64
|
+
prompt: { type: :string, max_length: 20_000, required: true },
|
|
65
|
+
images: { type: :array, max_items: 8, max_file_size: 30_000_000, formats: %w[jpeg png webp], required: false }
|
|
66
|
+
},
|
|
67
|
+
parameters: {
|
|
68
|
+
aspect_ratio: { type: :enum, values: %w[1:1 16:9], default: "1:1" },
|
|
69
|
+
resolution: { type: :enum, values: %w[1K 2K 4K], default: "1K" },
|
|
70
|
+
output_format: { type: :enum, values: %w[png jpg], default: "png" }
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Step 2: lib/kie.rb への require 追加
|
|
77
|
+
|
|
78
|
+
`lib/kie.rb` の末尾にある「Model definitions」セクションに追加します。
|
|
79
|
+
|
|
80
|
+
```ruby
|
|
81
|
+
# Model definitions
|
|
82
|
+
require_relative "kie/models/nano_banana_pro"
|
|
83
|
+
require_relative "kie/models/suno_v4"
|
|
84
|
+
# ... 既存のモデル ...
|
|
85
|
+
require_relative "kie/models/<model_name>" # ← 追加
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Step 3: モデルスペックの作成
|
|
89
|
+
|
|
90
|
+
`spec/kie/models/<model_name>_spec.rb` を作成します。
|
|
91
|
+
|
|
92
|
+
```ruby
|
|
93
|
+
# frozen_string_literal: true
|
|
94
|
+
|
|
95
|
+
RSpec.describe "<MODEL_NAME> model definition" do
|
|
96
|
+
subject(:definition) { Kie::ModelRegistry.find("<MODEL_NAME>") }
|
|
97
|
+
|
|
98
|
+
it "is registered in ModelRegistry" do
|
|
99
|
+
expect(Kie::ModelRegistry.registered?("<MODEL_NAME>")).to be true
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
describe "basic attributes" do
|
|
103
|
+
it "has correct name" do
|
|
104
|
+
expect(definition.name).to eq("<MODEL_NAME>")
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "has correct category" do
|
|
108
|
+
expect(definition.category).to eq(:<category>) # :suno or :general
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
describe "input constraints" do
|
|
113
|
+
# モデル固有の制約をテスト
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Step 4: ルーティングテストへの追加
|
|
119
|
+
|
|
120
|
+
`spec/integration/model_routing_spec.rb` の `expected_models` ハッシュに追加します。
|
|
121
|
+
|
|
122
|
+
```ruby
|
|
123
|
+
let(:expected_models) do
|
|
124
|
+
{
|
|
125
|
+
"nano-banana-pro" => :general,
|
|
126
|
+
"V4" => :suno,
|
|
127
|
+
# ... 既存のモデル ...
|
|
128
|
+
"<MODEL_NAME>" => :<category> # ← 追加
|
|
129
|
+
}
|
|
130
|
+
end
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Suno モデルの場合は `shared_examples` のコンテキストも追加します。
|
|
134
|
+
|
|
135
|
+
```ruby
|
|
136
|
+
context "with <MODEL_NAME> model" do
|
|
137
|
+
include_examples "suno model routing", "<MODEL_NAME>"
|
|
138
|
+
end
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Step 5: README の更新
|
|
142
|
+
|
|
143
|
+
`README.md` の Supported Models セクションに追加します。
|
|
144
|
+
|
|
145
|
+
**Suno モデルの場合:**
|
|
146
|
+
|
|
147
|
+
```markdown
|
|
148
|
+
### Suno Models (Music Generation)
|
|
149
|
+
|
|
150
|
+
| Model | Description |
|
|
151
|
+
|:------|:------------|
|
|
152
|
+
| `V4` | Suno V4 |
|
|
153
|
+
| ... |
|
|
154
|
+
| `<MODEL_NAME>` | <Description> | <!-- 追加 -->
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**General モデルの場合:**
|
|
158
|
+
|
|
159
|
+
```markdown
|
|
160
|
+
### General Models (Image Generation)
|
|
161
|
+
|
|
162
|
+
| Model | Description |
|
|
163
|
+
|:------|:------------|
|
|
164
|
+
| `nano-banana-pro` | High-quality image generation |
|
|
165
|
+
| `<model-name>` | <Description> | <!-- 追加 -->
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Step 6: API ドキュメントの作成
|
|
169
|
+
|
|
170
|
+
`docs/api/<category>/<model>.md` を作成し、`docs/api/<category>/INDEX.md` に参照を追加します。
|
|
171
|
+
|
|
172
|
+
## チェックリスト
|
|
173
|
+
|
|
174
|
+
新モデル追加時は以下を確認してください:
|
|
175
|
+
|
|
176
|
+
### コード
|
|
177
|
+
|
|
178
|
+
- [ ] `lib/kie/models/<model_name>.rb` - モデル定義作成
|
|
179
|
+
- [ ] `lib/kie.rb` - require 追加
|
|
180
|
+
|
|
181
|
+
### テスト
|
|
182
|
+
|
|
183
|
+
- [ ] `spec/kie/models/<model_name>_spec.rb` - スペック作成
|
|
184
|
+
- [ ] `spec/integration/model_routing_spec.rb` - ルーティングテスト追加
|
|
185
|
+
|
|
186
|
+
### ドキュメント
|
|
187
|
+
|
|
188
|
+
- [ ] `README.md` - Supported Models 更新
|
|
189
|
+
- [ ] `docs/api/<category>/<model>.md` - API 仕様作成
|
|
190
|
+
- [ ] `docs/api/<category>/INDEX.md` - INDEX 更新
|
|
191
|
+
|
|
192
|
+
### 検証
|
|
193
|
+
|
|
194
|
+
- [ ] 全テスト通過確認: `bundle exec rspec`
|
|
195
|
+
- [ ] Lint 通過確認: `bundle exec rubocop`
|
|
@@ -67,11 +67,5 @@ GitHub Actions による自動化:
|
|
|
67
67
|
- SimpleCov によるカバレッジ測定
|
|
68
68
|
|
|
69
69
|
### 拡張方法
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
model_name: "new-model"
|
|
73
|
-
format_type: "Standard"
|
|
74
|
-
validations:
|
|
75
|
-
input_length: 1000
|
|
76
|
-
aspect_ratios: ["16:9", "1:1"]
|
|
77
|
-
```
|
|
70
|
+
|
|
71
|
+
新モデルを追加する際の詳細な手順は [adding-new-model.md](./adding-new-model.md) を参照してください。
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Kie::ModelRegistry.register(
|
|
4
|
+
Kie::ModelDefinition.new(
|
|
5
|
+
name: "flux-2/flex-image-to-image",
|
|
6
|
+
category: :general,
|
|
7
|
+
input_constraints: {
|
|
8
|
+
prompt: { type: :string, max_length: 5_000, required: true },
|
|
9
|
+
input_urls: { type: :array, max_items: 8, max_file_size: 10_000_000, formats: %w[jpeg png webp], required: true }
|
|
10
|
+
},
|
|
11
|
+
parameters: {
|
|
12
|
+
aspect_ratio: { type: :enum, values: %w[1:1 4:3 3:4 16:9 9:16 3:2 2:3 auto], default: "1:1" },
|
|
13
|
+
resolution: { type: :enum, values: %w[1K 2K], default: "1K" }
|
|
14
|
+
}
|
|
15
|
+
)
|
|
16
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Kie::ModelRegistry.register(
|
|
4
|
+
Kie::ModelDefinition.new(
|
|
5
|
+
name: "flux-2/flex-text-to-image",
|
|
6
|
+
category: :general,
|
|
7
|
+
input_constraints: {
|
|
8
|
+
prompt: { type: :string, max_length: 5_000, required: true }
|
|
9
|
+
},
|
|
10
|
+
parameters: {
|
|
11
|
+
aspect_ratio: { type: :enum, values: %w[1:1 4:3 3:4 16:9 9:16 3:2 2:3 auto], default: "1:1" },
|
|
12
|
+
resolution: { type: :enum, values: %w[1K 2K], default: "1K" }
|
|
13
|
+
}
|
|
14
|
+
)
|
|
15
|
+
)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Kie::ModelRegistry.register(
|
|
4
|
+
Kie::ModelDefinition.new(
|
|
5
|
+
name: "flux-2/pro-image-to-image",
|
|
6
|
+
category: :general,
|
|
7
|
+
input_constraints: {
|
|
8
|
+
prompt: { type: :string, max_length: 5_000, required: true },
|
|
9
|
+
input_urls: { type: :array, max_items: 8, max_file_size: 10_000_000, formats: %w[jpeg png webp], required: true }
|
|
10
|
+
},
|
|
11
|
+
parameters: {
|
|
12
|
+
aspect_ratio: { type: :enum, values: %w[1:1 4:3 3:4 16:9 9:16 3:2 2:3 auto], default: "4:3" },
|
|
13
|
+
resolution: { type: :enum, values: %w[1K 2K], default: "1K" }
|
|
14
|
+
}
|
|
15
|
+
)
|
|
16
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Kie::ModelRegistry.register(
|
|
4
|
+
Kie::ModelDefinition.new(
|
|
5
|
+
name: "grok-imagine/image-to-image",
|
|
6
|
+
category: :general,
|
|
7
|
+
input_constraints: {
|
|
8
|
+
prompt: { type: :string, max_length: 390_000, required: false },
|
|
9
|
+
image_urls: {
|
|
10
|
+
type: :array, max_items: 1, max_file_size: 10_000_000, formats: %w[jpeg png webp], required: true
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
parameters: {}
|
|
14
|
+
)
|
|
15
|
+
)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Kie::ModelRegistry.register(
|
|
4
|
+
Kie::ModelDefinition.new(
|
|
5
|
+
name: "grok-imagine/image-to-video",
|
|
6
|
+
category: :general,
|
|
7
|
+
input_constraints: {
|
|
8
|
+
prompt: { type: :string, max_length: 5_000, required: false },
|
|
9
|
+
image_urls: {
|
|
10
|
+
type: :array, max_items: 1, max_file_size: 10_000_000, formats: %w[jpeg png webp], required: false
|
|
11
|
+
},
|
|
12
|
+
task_id: { type: :string, max_length: 100, required: false },
|
|
13
|
+
index: { type: :number, min: 0, max: 5, required: false }
|
|
14
|
+
},
|
|
15
|
+
parameters: {
|
|
16
|
+
mode: { type: :enum, values: %w[fun normal spicy], default: "normal" }
|
|
17
|
+
}
|
|
18
|
+
)
|
|
19
|
+
)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Kie::ModelRegistry.register(
|
|
4
|
+
Kie::ModelDefinition.new(
|
|
5
|
+
name: "grok-imagine/text-to-image",
|
|
6
|
+
category: :general,
|
|
7
|
+
input_constraints: {
|
|
8
|
+
prompt: { type: :string, max_length: 5_000, required: true }
|
|
9
|
+
},
|
|
10
|
+
parameters: {
|
|
11
|
+
aspect_ratio: { type: :enum, values: %w[2:3 3:2 1:1 9:16 16:9], default: "3:2" }
|
|
12
|
+
}
|
|
13
|
+
)
|
|
14
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Kie::ModelRegistry.register(
|
|
4
|
+
Kie::ModelDefinition.new(
|
|
5
|
+
name: "grok-imagine/text-to-video",
|
|
6
|
+
category: :general,
|
|
7
|
+
input_constraints: {
|
|
8
|
+
prompt: { type: :string, max_length: 5_000, required: true }
|
|
9
|
+
},
|
|
10
|
+
parameters: {
|
|
11
|
+
aspect_ratio: { type: :enum, values: %w[2:3 3:2 1:1 9:16 16:9], default: "2:3" },
|
|
12
|
+
mode: { type: :enum, values: %w[fun normal spicy], default: "normal" }
|
|
13
|
+
}
|
|
14
|
+
)
|
|
15
|
+
)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Kie::ModelRegistry.register(
|
|
4
|
+
Kie::ModelDefinition.new(
|
|
5
|
+
name: "grok-imagine/upscale",
|
|
6
|
+
category: :general,
|
|
7
|
+
input_constraints: {
|
|
8
|
+
task_id: { type: :string, max_length: 100, required: true }
|
|
9
|
+
},
|
|
10
|
+
parameters: {}
|
|
11
|
+
)
|
|
12
|
+
)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Kie::ModelRegistry.register(
|
|
4
|
+
Kie::ModelDefinition.new(
|
|
5
|
+
name: "seedream/4.5-edit",
|
|
6
|
+
category: :general,
|
|
7
|
+
input_constraints: {
|
|
8
|
+
prompt: { type: :string, max_length: 3_000, required: true },
|
|
9
|
+
image_urls: { type: :array, max_file_size: 10_000_000, formats: %w[jpeg png webp], required: true }
|
|
10
|
+
},
|
|
11
|
+
parameters: {
|
|
12
|
+
aspect_ratio: { type: :enum, values: %w[1:1 4:3 3:4 16:9 9:16 2:3 3:2 21:9], default: "1:1" },
|
|
13
|
+
quality: { type: :enum, values: %w[basic high], default: "basic" }
|
|
14
|
+
}
|
|
15
|
+
)
|
|
16
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Kie::ModelRegistry.register(
|
|
4
|
+
Kie::ModelDefinition.new(
|
|
5
|
+
name: "seedream/4.5-text-to-image",
|
|
6
|
+
category: :general,
|
|
7
|
+
input_constraints: {
|
|
8
|
+
prompt: { type: :string, max_length: 3_000, required: true }
|
|
9
|
+
},
|
|
10
|
+
parameters: {
|
|
11
|
+
aspect_ratio: { type: :enum, values: %w[1:1 4:3 3:4 16:9 9:16 2:3 3:2 21:9], default: "1:1" },
|
|
12
|
+
quality: { type: :enum, values: %w[basic high], default: "basic" }
|
|
13
|
+
}
|
|
14
|
+
)
|
|
15
|
+
)
|
data/lib/kie/version.rb
CHANGED
data/lib/kie.rb
CHANGED
|
@@ -24,3 +24,13 @@ require_relative "kie/models/suno_v4_5"
|
|
|
24
24
|
require_relative "kie/models/suno_v4_5_plus"
|
|
25
25
|
require_relative "kie/models/suno_v4_5_all"
|
|
26
26
|
require_relative "kie/models/suno_v5"
|
|
27
|
+
require_relative "kie/models/seedream_4_5_edit"
|
|
28
|
+
require_relative "kie/models/seedream_4_5_text_to_image"
|
|
29
|
+
require_relative "kie/models/flux_2_pro_image_to_image"
|
|
30
|
+
require_relative "kie/models/flux_2_flex_image_to_image"
|
|
31
|
+
require_relative "kie/models/flux_2_flex_text_to_image"
|
|
32
|
+
require_relative "kie/models/grok_imagine_image_to_video"
|
|
33
|
+
require_relative "kie/models/grok_imagine_text_to_video"
|
|
34
|
+
require_relative "kie/models/grok_imagine_image_to_image"
|
|
35
|
+
require_relative "kie/models/grok_imagine_text_to_image"
|
|
36
|
+
require_relative "kie/models/grok_imagine_upscale"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kie-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sho DOUHASHI
|
|
@@ -32,10 +32,13 @@ extensions: []
|
|
|
32
32
|
extra_rdoc_files: []
|
|
33
33
|
files:
|
|
34
34
|
- ".claude/agents/project-environment-setup.md"
|
|
35
|
+
- ".claude/commands/add-model.md"
|
|
36
|
+
- ".claude/commands/release.md"
|
|
35
37
|
- ".claude/commands/soba/implement.md"
|
|
36
38
|
- ".claude/commands/soba/plan.md"
|
|
37
39
|
- ".claude/commands/soba/review.md"
|
|
38
40
|
- ".claude/commands/soba/revise.md"
|
|
41
|
+
- ".claude/commands/update-model.md"
|
|
39
42
|
- ".devcontainer/LICENSE"
|
|
40
43
|
- ".devcontainer/README.md"
|
|
41
44
|
- ".devcontainer/bin/devcontainer-common.sh"
|
|
@@ -55,9 +58,28 @@ files:
|
|
|
55
58
|
- LICENSE
|
|
56
59
|
- README.md
|
|
57
60
|
- Rakefile
|
|
61
|
+
- docs/api/INDEX.md
|
|
62
|
+
- docs/api/general/INDEX.md
|
|
63
|
+
- docs/api/general/flux-2-flex-image-to-image.md
|
|
64
|
+
- docs/api/general/flux-2-flex-text-to-image.md
|
|
65
|
+
- docs/api/general/flux-2-pro-image-to-image.md
|
|
66
|
+
- docs/api/general/grok-imagine-image-to-image.md
|
|
67
|
+
- docs/api/general/grok-imagine-image-to-video.md
|
|
68
|
+
- docs/api/general/grok-imagine-text-to-image.md
|
|
69
|
+
- docs/api/general/grok-imagine-text-to-video.md
|
|
70
|
+
- docs/api/general/grok-imagine-upscale.md
|
|
71
|
+
- docs/api/general/nano-banana-pro.md
|
|
72
|
+
- docs/api/general/seedream-4-5-edit.md
|
|
73
|
+
- docs/api/general/seedream-4-5-text-to-image.md
|
|
74
|
+
- docs/api/overview.md
|
|
75
|
+
- docs/api/suno/INDEX.md
|
|
76
|
+
- docs/api/suno/generate.md
|
|
77
|
+
- docs/api/suno/models.md
|
|
78
|
+
- docs/api/suno/task-status.md
|
|
58
79
|
- docs/business/INDEX.md
|
|
59
80
|
- docs/business/overview.md
|
|
60
81
|
- docs/development/INDEX.md
|
|
82
|
+
- docs/development/adding-new-model.md
|
|
61
83
|
- docs/development/technical-design.md
|
|
62
84
|
- docs/document_system.md
|
|
63
85
|
- lefthook.yml
|
|
@@ -69,7 +91,17 @@ files:
|
|
|
69
91
|
- lib/kie/middleware/raise_error.rb
|
|
70
92
|
- lib/kie/model_definition.rb
|
|
71
93
|
- lib/kie/model_registry.rb
|
|
94
|
+
- lib/kie/models/flux_2_flex_image_to_image.rb
|
|
95
|
+
- lib/kie/models/flux_2_flex_text_to_image.rb
|
|
96
|
+
- lib/kie/models/flux_2_pro_image_to_image.rb
|
|
97
|
+
- lib/kie/models/grok_imagine_image_to_image.rb
|
|
98
|
+
- lib/kie/models/grok_imagine_image_to_video.rb
|
|
99
|
+
- lib/kie/models/grok_imagine_text_to_image.rb
|
|
100
|
+
- lib/kie/models/grok_imagine_text_to_video.rb
|
|
101
|
+
- lib/kie/models/grok_imagine_upscale.rb
|
|
72
102
|
- lib/kie/models/nano_banana_pro.rb
|
|
103
|
+
- lib/kie/models/seedream_4_5_edit.rb
|
|
104
|
+
- lib/kie/models/seedream_4_5_text_to_image.rb
|
|
73
105
|
- lib/kie/models/suno_v4.rb
|
|
74
106
|
- lib/kie/models/suno_v4_5.rb
|
|
75
107
|
- lib/kie/models/suno_v4_5_all.rb
|