runapi-suno 0.5.1 → 0.6.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/lib/runapi/suno/resources/add_instrumental.rb +0 -7
- data/lib/runapi/suno/resources/add_samples.rb +0 -4
- data/lib/runapi/suno/resources/add_vocals.rb +0 -7
- data/lib/runapi/suno/resources/audio_action.rb +0 -1
- data/lib/runapi/suno/resources/audio_exports.rb +0 -7
- data/lib/runapi/suno/resources/blend_lyrics.rb +0 -1
- data/lib/runapi/suno/resources/boost_style.rb +0 -7
- data/lib/runapi/suno/resources/check_voice.rb +0 -7
- data/lib/runapi/suno/resources/convert_audio.rb +0 -7
- data/lib/runapi/suno/resources/cover_audio.rb +0 -7
- data/lib/runapi/suno/resources/create_mashup.rb +0 -7
- data/lib/runapi/suno/resources/extend_music.rb +0 -7
- data/lib/runapi/suno/resources/generate_artwork.rb +0 -7
- data/lib/runapi/suno/resources/generate_lyrics.rb +0 -7
- data/lib/runapi/suno/resources/generate_midi.rb +0 -7
- data/lib/runapi/suno/resources/generate_persona.rb +0 -7
- data/lib/runapi/suno/resources/generate_voice.rb +0 -7
- data/lib/runapi/suno/resources/get_timestamped_lyrics.rb +0 -7
- data/lib/runapi/suno/resources/music_from_sample.rb +0 -7
- data/lib/runapi/suno/resources/music_visualizations.rb +0 -7
- data/lib/runapi/suno/resources/personas.rb +0 -9
- data/lib/runapi/suno/resources/regenerate_validation_phrase.rb +0 -7
- data/lib/runapi/suno/resources/replace_section.rb +0 -7
- data/lib/runapi/suno/resources/separate_audio_stems.rb +0 -7
- data/lib/runapi/suno/resources/style_expansions.rb +0 -7
- data/lib/runapi/suno/resources/text_to_music.rb +0 -7
- data/lib/runapi/suno/resources/text_to_sound.rb +0 -7
- data/lib/runapi/suno/resources/timestamped_lyrics.rb +0 -7
- data/lib/runapi/suno/resources/visualize_music.rb +0 -7
- data/lib/runapi/suno/resources/voice_to_validation_phrase.rb +0 -7
- data/lib/runapi/suno/resources/voices.rb +0 -7
- data/lib/runapi/suno.rb +0 -2
- metadata +3 -5
- data/lib/runapi/suno/contract_gen.rb +0 -2797
- data/lib/runapi/suno/validators.rb +0 -232
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RunApi
|
|
4
|
-
module Suno
|
|
5
|
-
module Validators
|
|
6
|
-
module_function
|
|
7
|
-
|
|
8
|
-
def validate_text_to_music!(params, resource)
|
|
9
|
-
resource.send(:validate_contract!, CONTRACT["text-to-music"], params)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def validate_extend_music!(params, resource)
|
|
13
|
-
unless %i[task_id audio_id audio_url upload_url].any? { |key| param(resource, params, key) }
|
|
14
|
-
raise Core::ValidationError, "task_id, audio_id, audio_url, or upload_url is required"
|
|
15
|
-
end
|
|
16
|
-
require_param!(resource, params, :parameter_mode)
|
|
17
|
-
require_param!(resource, params, :model)
|
|
18
|
-
|
|
19
|
-
validate_optional!(resource, params, :parameter_mode, Types::PARAMETER_MODES)
|
|
20
|
-
if param(resource, params, :parameter_mode) == "custom"
|
|
21
|
-
require_param!(resource, params, :style)
|
|
22
|
-
require_param!(resource, params, :title)
|
|
23
|
-
require_param!(resource, params, :continue_at)
|
|
24
|
-
end
|
|
25
|
-
validate_extend_music_prompt_shape!(params, resource)
|
|
26
|
-
validate_optional!(resource, params, :model, Types::MODELS)
|
|
27
|
-
validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
|
|
28
|
-
validate_optional!(resource, params, :persona_type, Types::PERSONA_TYPES)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def validate_generate_artwork!(params, resource)
|
|
32
|
-
require_param!(resource, params, :task_id)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def validate_cover_audio!(params, resource)
|
|
36
|
-
resource.send(:validate_contract!, CONTRACT["cover-audio"], params)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def validate_add_instrumental!(params, resource)
|
|
40
|
-
require_all!(resource, params, :upload_url, :title, :negative_tags, :tags, :model)
|
|
41
|
-
validate_optional!(resource, params, :model, Types::MODELS)
|
|
42
|
-
validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def validate_add_vocals!(params, resource)
|
|
46
|
-
require_all!(resource, params, :upload_url, :lyrics, :title, :negative_tags, :style, :model)
|
|
47
|
-
validate_optional!(resource, params, :model, Types::MODELS)
|
|
48
|
-
validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def validate_separate_audio_stems!(params, resource)
|
|
52
|
-
resource.send(:validate_contract!, CONTRACT["separate-audio-stems"], params)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def validate_generate_midi!(params, resource)
|
|
56
|
-
require_param!(resource, params, :task_id)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def validate_convert_audio!(params, resource)
|
|
60
|
-
require_all!(resource, params, :task_id, :audio_id)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def validate_visualize_music!(params, resource)
|
|
64
|
-
require_all!(resource, params, :task_id, :audio_id)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def validate_generate_lyrics!(params, resource)
|
|
68
|
-
require_param!(resource, params, :prompt)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def validate_get_timestamped_lyrics!(params, resource)
|
|
72
|
-
require_all!(resource, params, :task_id, :audio_id)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def validate_replace_section!(params, resource)
|
|
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
|
|
81
|
-
raise Core::ValidationError, "infill_end_time must be greater than infill_start_time"
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
duration = end_time - start_time
|
|
85
|
-
return if duration + 1e-9 >= 10
|
|
86
|
-
|
|
87
|
-
raise Core::ValidationError, "replacement duration must be at least 10 seconds"
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def validate_create_mashup!(params, resource)
|
|
91
|
-
resource.send(:validate_contract!, CONTRACT["create-mashup"], params)
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def validate_text_to_sound!(params, resource)
|
|
95
|
-
require_all!(resource, params, :prompt, :model)
|
|
96
|
-
validate_optional!(resource, params, :model, Types::SOUND_MODELS)
|
|
97
|
-
validate_optional!(resource, params, :sound_key, Types::SOUND_KEYS)
|
|
98
|
-
tempo = param(resource, params, :sound_tempo)
|
|
99
|
-
if tempo && !(1..300).cover?(tempo.to_i)
|
|
100
|
-
raise Core::ValidationError, "sound_tempo must be between 1 and 300"
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def validate_voice_to_validation_phrase!(params, resource)
|
|
105
|
-
require_all!(resource, params, :voice_url, :vocal_start_seconds, :vocal_end_seconds)
|
|
106
|
-
validate_optional!(resource, params, :language, Types::VALIDATION_PHRASE_LANGUAGES)
|
|
107
|
-
|
|
108
|
-
start_seconds = param(resource, params, :vocal_start_seconds).to_i
|
|
109
|
-
end_seconds = param(resource, params, :vocal_end_seconds).to_i
|
|
110
|
-
return if end_seconds > start_seconds
|
|
111
|
-
|
|
112
|
-
raise Core::ValidationError, "vocal_end_seconds must be greater than vocal_start_seconds"
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def validate_regenerate_validation_phrase!(params, resource)
|
|
116
|
-
require_param!(resource, params, :task_id)
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def validate_generate_voice!(params, resource)
|
|
120
|
-
require_all!(resource, params, :task_id, :verify_url)
|
|
121
|
-
validate_optional!(resource, params, :singer_skill_level, Types::SINGER_SKILL_LEVELS)
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def validate_check_voice!(params, resource)
|
|
125
|
-
require_param!(resource, params, :task_id)
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def validate_generate_persona!(params, resource)
|
|
129
|
-
require_all!(resource, params, :task_id, :audio_id, :name, :description)
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def validate_boost_style!(params, resource)
|
|
133
|
-
require_param!(resource, params, :description)
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def validate_personas!(params, resource)
|
|
137
|
-
resource.send(:validate_contract!, CONTRACT["personas"], params)
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
def validate_voices!(params, resource)
|
|
141
|
-
resource.send(:validate_contract!, CONTRACT["voices"], params)
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
def validate_style_expansions!(params, resource)
|
|
145
|
-
resource.send(:validate_contract!, CONTRACT["style-expansions"], params)
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
def validate_timestamped_lyrics!(params, resource)
|
|
149
|
-
resource.send(:validate_contract!, CONTRACT["timestamped-lyrics"], params)
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def validate_audio_exports!(params, resource)
|
|
153
|
-
resource.send(:validate_contract!, CONTRACT["audio-exports"], params)
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
def validate_music_visualizations!(params, resource)
|
|
157
|
-
resource.send(:validate_contract!, CONTRACT["music-visualizations"], params)
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
def validate_music_from_sample!(params, resource)
|
|
161
|
-
resource.send(:validate_contract!, CONTRACT["music-from-sample"], params)
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
def validate_extend_music_prompt_shape!(params, resource)
|
|
165
|
-
return unless truthy_presence?(param(resource, params, :lyrics))
|
|
166
|
-
|
|
167
|
-
if truthy_presence?(param(resource, params, :prompt))
|
|
168
|
-
raise Core::ValidationError, "prompt cannot be combined with lyrics"
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
if truthy?(param(resource, params, :instrumental))
|
|
172
|
-
raise Core::ValidationError, "lyrics cannot be used when instrumental is true"
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
upload_mode = %i[audio_url upload_url].any? { |key| truthy_presence?(param(resource, params, key)) }
|
|
176
|
-
return if param(resource, params, :parameter_mode) == "custom" && upload_mode
|
|
177
|
-
|
|
178
|
-
raise Core::ValidationError, "lyrics can only be used when extending uploaded audio with custom parameters"
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
def validate_replace_section_source!(params, resource)
|
|
182
|
-
has_existing_source = %i[task_id audio_id].any? { |key| truthy_presence?(param(resource, params, key)) }
|
|
183
|
-
has_uploaded_source = %i[upload_url model].any? { |key| truthy_presence?(param(resource, params, key)) }
|
|
184
|
-
|
|
185
|
-
if has_existing_source && has_uploaded_source
|
|
186
|
-
raise Core::ValidationError, "task_id/audio_id cannot be combined with upload_url/model"
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
if has_existing_source
|
|
190
|
-
require_all!(resource, params, :task_id, :audio_id)
|
|
191
|
-
elsif has_uploaded_source
|
|
192
|
-
require_all!(resource, params, :upload_url, :model)
|
|
193
|
-
else
|
|
194
|
-
raise Core::ValidationError, "task_id and audio_id, or upload_url and model are required"
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
def replace_section_time!(params, resource, key)
|
|
199
|
-
value = param(resource, params, key)
|
|
200
|
-
return value.to_f if value.is_a?(Numeric) && value.finite?
|
|
201
|
-
|
|
202
|
-
raise Core::ValidationError, "#{key} must be a finite number"
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
def require_all!(resource, params, *keys)
|
|
206
|
-
keys.each { |key| require_param!(resource, params, key) }
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
def require_param!(resource, params, key)
|
|
210
|
-
raise Core::ValidationError, "#{key} is required" if param(resource, params, key).nil?
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
def param(resource, params, key)
|
|
214
|
-
resource.send(:param, params, key)
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
def validate_optional!(resource, params, key, allowed)
|
|
218
|
-
resource.send(:validate_optional!, params, key, allowed)
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
def truthy?(value)
|
|
222
|
-
[true, 1, "1", "true", "TRUE", "True"].include?(value)
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
def truthy_presence?(value)
|
|
226
|
-
return !value.empty? if value.respond_to?(:empty?)
|
|
227
|
-
|
|
228
|
-
!value.nil?
|
|
229
|
-
end
|
|
230
|
-
end
|
|
231
|
-
end
|
|
232
|
-
end
|