runapi-suno 0.2.7 → 0.2.9
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/README.md +7 -7
- data/lib/runapi/suno/contract_gen.rb +756 -0
- data/lib/runapi/suno/resources/add_instrumental.rb +7 -7
- data/lib/runapi/suno/resources/add_vocals.rb +7 -7
- data/lib/runapi/suno/resources/boost_style.rb +2 -2
- data/lib/runapi/suno/resources/check_voice.rb +2 -2
- data/lib/runapi/suno/resources/convert_audio.rb +7 -7
- data/lib/runapi/suno/resources/cover_audio.rb +7 -7
- data/lib/runapi/suno/resources/create_mashup.rb +7 -7
- data/lib/runapi/suno/resources/extend_music.rb +7 -7
- data/lib/runapi/suno/resources/generate_artwork.rb +7 -7
- data/lib/runapi/suno/resources/generate_lyrics.rb +7 -7
- data/lib/runapi/suno/resources/generate_midi.rb +7 -7
- data/lib/runapi/suno/resources/generate_persona.rb +2 -2
- data/lib/runapi/suno/resources/generate_voice.rb +7 -7
- data/lib/runapi/suno/resources/get_timestamped_lyrics.rb +2 -2
- data/lib/runapi/suno/resources/regenerate_validation_phrase.rb +7 -7
- data/lib/runapi/suno/resources/replace_section.rb +7 -7
- data/lib/runapi/suno/resources/separate_audio_stems.rb +7 -7
- data/lib/runapi/suno/resources/text_to_music.rb +7 -7
- data/lib/runapi/suno/resources/text_to_sound.rb +7 -7
- data/lib/runapi/suno/resources/visualize_music.rb +7 -7
- data/lib/runapi/suno/resources/voice_to_validation_phrase.rb +7 -7
- data/lib/runapi/suno/types.rb +15 -1
- data/lib/runapi/suno/validators.rb +38 -47
- data/lib/runapi/suno.rb +1 -0
- metadata +11 -8
|
@@ -5,15 +5,8 @@ module RunApi
|
|
|
5
5
|
module Validators
|
|
6
6
|
module_function
|
|
7
7
|
|
|
8
|
-
MUSIC_PROMPT_SHAPE_ERROR = "choose a valid vocal_mode: auto_lyrics, exact_lyrics, or instrumental"
|
|
9
|
-
|
|
10
8
|
def validate_text_to_music!(params, resource)
|
|
11
|
-
|
|
12
|
-
require_param!(resource, params, :model)
|
|
13
|
-
validate_optional!(resource, params, :vocal_mode, Types::VOCAL_MODES)
|
|
14
|
-
validate_optional!(resource, params, :model, Types::MODELS)
|
|
15
|
-
validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
|
|
16
|
-
validate_optional!(resource, params, :persona_type, Types::PERSONA_TYPES)
|
|
9
|
+
resource.send(:validate_contract!, CONTRACT["text-to-music"], params)
|
|
17
10
|
end
|
|
18
11
|
|
|
19
12
|
def validate_extend_music!(params, resource)
|
|
@@ -40,13 +33,7 @@ module RunApi
|
|
|
40
33
|
end
|
|
41
34
|
|
|
42
35
|
def validate_cover_audio!(params, resource)
|
|
43
|
-
|
|
44
|
-
require_param!(resource, params, :model)
|
|
45
|
-
validate_music_prompt_shape!(params, resource)
|
|
46
|
-
validate_optional!(resource, params, :vocal_mode, Types::VOCAL_MODES)
|
|
47
|
-
validate_optional!(resource, params, :model, Types::MODELS)
|
|
48
|
-
validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
|
|
49
|
-
validate_optional!(resource, params, :persona_type, Types::PERSONA_TYPES)
|
|
36
|
+
resource.send(:validate_contract!, CONTRACT["cover-audio"], params)
|
|
50
37
|
end
|
|
51
38
|
|
|
52
39
|
def validate_add_instrumental!(params, resource)
|
|
@@ -62,8 +49,7 @@ module RunApi
|
|
|
62
49
|
end
|
|
63
50
|
|
|
64
51
|
def validate_separate_audio_stems!(params, resource)
|
|
65
|
-
|
|
66
|
-
validate_optional!(resource, params, :type, Types::SEPARATE_AUDIO_STEMS_TYPES)
|
|
52
|
+
resource.send(:validate_contract!, CONTRACT["separate-audio-stems"], params)
|
|
67
53
|
end
|
|
68
54
|
|
|
69
55
|
def validate_generate_midi!(params, resource)
|
|
@@ -87,10 +73,18 @@ module RunApi
|
|
|
87
73
|
end
|
|
88
74
|
|
|
89
75
|
def validate_replace_section!(params, resource)
|
|
90
|
-
|
|
91
|
-
|
|
76
|
+
resource.send(:validate_contract!, CONTRACT["replace-section"], params)
|
|
77
|
+
validate_replace_section_source!(params, resource)
|
|
78
|
+
start_time = replace_section_time!(params, resource, :infill_start_time)
|
|
79
|
+
end_time = replace_section_time!(params, resource, :infill_end_time)
|
|
80
|
+
if end_time <= start_time
|
|
92
81
|
raise Core::ValidationError, "infill_end_time must be greater than infill_start_time"
|
|
93
82
|
end
|
|
83
|
+
|
|
84
|
+
duration = end_time - start_time
|
|
85
|
+
return if duration.between?(6, 60)
|
|
86
|
+
|
|
87
|
+
raise Core::ValidationError, "replacement duration must be between 6 and 60 seconds"
|
|
94
88
|
end
|
|
95
89
|
|
|
96
90
|
def validate_create_mashup!(params, resource)
|
|
@@ -98,12 +92,7 @@ module RunApi
|
|
|
98
92
|
unless upload_url_list.is_a?(Array) && upload_url_list.size == 2
|
|
99
93
|
raise Core::ValidationError, "upload_url_list must contain exactly 2 URLs"
|
|
100
94
|
end
|
|
101
|
-
|
|
102
|
-
validate_music_prompt_shape!(params, resource)
|
|
103
|
-
validate_optional!(resource, params, :vocal_mode, Types::VOCAL_MODES)
|
|
104
|
-
validate_optional!(resource, params, :model, Types::MODELS)
|
|
105
|
-
validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
|
|
106
|
-
validate_optional!(resource, params, :persona_type, Types::PERSONA_TYPES)
|
|
95
|
+
resource.send(:validate_contract!, CONTRACT["create-mashup"], params)
|
|
107
96
|
end
|
|
108
97
|
|
|
109
98
|
def validate_text_to_sound!(params, resource)
|
|
@@ -148,28 +137,6 @@ module RunApi
|
|
|
148
137
|
require_param!(resource, params, :description)
|
|
149
138
|
end
|
|
150
139
|
|
|
151
|
-
def validate_music_prompt_shape!(params, resource)
|
|
152
|
-
mode = param(resource, params, :vocal_mode).to_s
|
|
153
|
-
has_prompt = truthy_presence?(param(resource, params, :prompt))
|
|
154
|
-
has_lyrics = truthy_presence?(param(resource, params, :lyrics))
|
|
155
|
-
has_style = truthy_presence?(param(resource, params, :style))
|
|
156
|
-
has_title = truthy_presence?(param(resource, params, :title))
|
|
157
|
-
|
|
158
|
-
valid_shape = case mode
|
|
159
|
-
when "auto_lyrics"
|
|
160
|
-
has_prompt && !has_lyrics && !has_style && !has_title
|
|
161
|
-
when "exact_lyrics"
|
|
162
|
-
!has_prompt && has_lyrics && has_style && has_title
|
|
163
|
-
when "instrumental"
|
|
164
|
-
!has_prompt && !has_lyrics && has_style && has_title
|
|
165
|
-
else
|
|
166
|
-
false
|
|
167
|
-
end
|
|
168
|
-
return if valid_shape
|
|
169
|
-
|
|
170
|
-
raise Core::ValidationError, MUSIC_PROMPT_SHAPE_ERROR
|
|
171
|
-
end
|
|
172
|
-
|
|
173
140
|
def validate_extend_music_prompt_shape!(params, resource)
|
|
174
141
|
return unless truthy_presence?(param(resource, params, :lyrics))
|
|
175
142
|
|
|
@@ -187,6 +154,30 @@ module RunApi
|
|
|
187
154
|
raise Core::ValidationError, "lyrics can only be used when extending uploaded audio with custom parameters"
|
|
188
155
|
end
|
|
189
156
|
|
|
157
|
+
def validate_replace_section_source!(params, resource)
|
|
158
|
+
has_existing_source = %i[task_id audio_id].any? { |key| truthy_presence?(param(resource, params, key)) }
|
|
159
|
+
has_uploaded_source = %i[upload_url model].any? { |key| truthy_presence?(param(resource, params, key)) }
|
|
160
|
+
|
|
161
|
+
if has_existing_source && has_uploaded_source
|
|
162
|
+
raise Core::ValidationError, "task_id/audio_id cannot be combined with upload_url/model"
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
if has_existing_source
|
|
166
|
+
require_all!(resource, params, :task_id, :audio_id)
|
|
167
|
+
elsif has_uploaded_source
|
|
168
|
+
require_all!(resource, params, :upload_url, :model)
|
|
169
|
+
else
|
|
170
|
+
raise Core::ValidationError, "task_id and audio_id, or upload_url and model are required"
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def replace_section_time!(params, resource, key)
|
|
175
|
+
value = param(resource, params, key)
|
|
176
|
+
return value.to_f if value.is_a?(Numeric)
|
|
177
|
+
|
|
178
|
+
raise Core::ValidationError, "#{key} must be a number"
|
|
179
|
+
end
|
|
180
|
+
|
|
190
181
|
def require_all!(resource, params, *keys)
|
|
191
182
|
keys.each { |key| require_param!(resource, params, key) }
|
|
192
183
|
end
|
data/lib/runapi/suno.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: runapi-suno
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- RunAPI
|
|
@@ -15,18 +15,18 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.2.
|
|
18
|
+
version: 0.2.13
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.2.
|
|
26
|
-
description: The
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
version: 0.2.13
|
|
26
|
+
description: The Suno Ruby SDK is the language-specific package for Suno on RunAPI.
|
|
27
|
+
Use this package for song generation, lyrics, vocals, extension, and audio transformation
|
|
28
|
+
workflows when your application needs request bodies, task status lookup, and consistent
|
|
29
|
+
RunAPI errors in Ruby.
|
|
30
30
|
email:
|
|
31
31
|
- contact@runapi.ai
|
|
32
32
|
executables: []
|
|
@@ -39,6 +39,7 @@ files:
|
|
|
39
39
|
- lib/runapi-suno.rb
|
|
40
40
|
- lib/runapi/suno.rb
|
|
41
41
|
- lib/runapi/suno/client.rb
|
|
42
|
+
- lib/runapi/suno/contract_gen.rb
|
|
42
43
|
- lib/runapi/suno/resources/add_instrumental.rb
|
|
43
44
|
- lib/runapi/suno/resources/add_vocals.rb
|
|
44
45
|
- lib/runapi/suno/resources/boost_style.rb
|
|
@@ -66,9 +67,11 @@ homepage: https://runapi.ai/models/suno
|
|
|
66
67
|
licenses:
|
|
67
68
|
- Apache-2.0
|
|
68
69
|
metadata:
|
|
70
|
+
runapi_slug: suno
|
|
69
71
|
homepage_uri: https://runapi.ai/models/suno
|
|
70
72
|
documentation_uri: https://github.com/runapi-ai/suno-sdk/blob/main/ruby/README.md
|
|
71
73
|
source_code_uri: https://github.com/runapi-ai/suno-sdk
|
|
74
|
+
bug_tracker_uri: https://github.com/runapi-ai/suno-sdk/issues
|
|
72
75
|
changelog_uri: https://github.com/runapi-ai/suno-sdk/blob/main/CHANGELOG.md
|
|
73
76
|
rdoc_options: []
|
|
74
77
|
require_paths:
|
|
@@ -86,5 +89,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
86
89
|
requirements: []
|
|
87
90
|
rubygems_version: 4.0.10
|
|
88
91
|
specification_version: 4
|
|
89
|
-
summary: Suno
|
|
92
|
+
summary: Suno API Ruby SDK for RunAPI
|
|
90
93
|
test_files: []
|