elevenlabs_client 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6c150778cecf2c843fc1b5492d1cfbaed14306f010b240557945c631b083fa1
4
- data.tar.gz: 62ba8f400b1be939bfc5839b47a5e636a5e888d812b8eabc04c1ca26196c9c63
3
+ metadata.gz: 2b65be08b17b9ae232158f2c004511a7840688e76853c014f9be37984a9639d1
4
+ data.tar.gz: 2de88d74e59af044cfe943e32f0d2f2d8b45f71200469a69b3f95fc7605436d2
5
5
  SHA512:
6
- metadata.gz: 9df813daf9c443428e92cd323b94f05fa0791ab046b34f5c0ddd12bc19654235888c98bc47299355e2b9c6bf5d5a417d0b639f59b6d0af16b86f5e3f700202ad
7
- data.tar.gz: 50b4a3229dbd3f2e25c5614d5178d4b688c812d9a01181748879a8490a66df457e4fb24b3b6110d0e72e1def3e877072045e84fecb18b175128b1b18fb96e2ad
6
+ metadata.gz: f919ebdf7090d2f4cdd812589eccd1425e8be5e86615c04f3bf2882c7e8e8e07058db4f37cdf420e6b1948c668c3acbb177fe796b48c7f23563fa41a7204f4ce
7
+ data.tar.gz: 23b7dc77bb3ca90e2019d4098887b8555d103d66c1fdf259f883f7952b4c26f57671f9bd2e250e27491acc42c2518e85b37bcb48cdb678fd163f9b3be9b1d7e4
data/CHANGELOG.md CHANGED
@@ -5,6 +5,25 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.4.0] - 2025-09-12
9
+
10
+ ### Added
11
+
12
+ - **🎵 Dubbing Generation API**
13
+ - `delete(dubbing_id)` - Delete dubbing projects
14
+ - `get_resource(dubbing_id)` - Get detailed resource information
15
+ - `create_segment(options)` - Create new segments
16
+ - `delete_segment(options)` - Delete segments
17
+ - `update_segment(options)` - Update segment text/timing
18
+ - `transcribe_segment(options)` - Regenerate transcriptions
19
+ - `translate_segment(options)` - Regenerate translations
20
+ - `dub_segment(options)` - Regenerate dubs
21
+ - `render_project(options)` - Render output media
22
+ - `update_speaker(options)` - Update speaker voices
23
+ - `get_similar_voices(options)` - Get voice recommendations
24
+ - **🔧 HTTP Client Improvements** - Added HTTP method
25
+ - Added `patch` method for PATCH requests
26
+
8
27
  ## [0.3.0] - 2025-09-12
9
28
 
10
29
  ### Added
@@ -252,4 +271,4 @@ client.dubs.create(file_io: file, filename: "video.mp4", target_languages: ["es"
252
271
  - **File Support**: Multiple video and audio formats (MP4, MOV, MP3, WAV, etc.)
253
272
  - **Language Support**: Multiple target languages for dubbing
254
273
  - **Configuration**: Flexible API key and endpoint configuration
255
- - **Testing**: Comprehensive test suite with integration tests
274
+ - **Testing**: Comprehensive test suite with integration tests
@@ -61,6 +61,20 @@ module ElevenlabsClient
61
61
  handle_response(response)
62
62
  end
63
63
 
64
+ # Makes an authenticated PATCH request
65
+ # @param path [String] API endpoint path
66
+ # @param body [Hash, nil] Request body
67
+ # @return [Hash] Response body
68
+ def patch(path, body = nil)
69
+ response = @conn.patch(path) do |req|
70
+ req.headers["xi-api-key"] = api_key
71
+ req.headers["Content-Type"] = "application/json"
72
+ req.body = body.to_json if body
73
+ end
74
+
75
+ handle_response(response)
76
+ end
77
+
64
78
  # Makes an authenticated multipart POST request
65
79
  # @param path [String] API endpoint path
66
80
  # @param payload [Hash] Multipart payload
@@ -53,6 +53,162 @@ module ElevenlabsClient
53
53
  @client.get("/v1/dubbing/#{dubbing_id}/resources")
54
54
  end
55
55
 
56
+ # DELETE /v1/dubbing/{id}
57
+ # Deletes a dubbing project
58
+ #
59
+ # @param dubbing_id [String] The dubbing job ID
60
+ # @return [Hash] Response with status
61
+ def delete(dubbing_id)
62
+ @client.delete("/v1/dubbing/#{dubbing_id}")
63
+ end
64
+
65
+ # GET /v1/dubbing/resource/{dubbing_id}
66
+ # Gets dubbing resource with detailed information including segments, speakers, etc.
67
+ #
68
+ # @param dubbing_id [String] The dubbing job ID
69
+ # @return [Hash] Detailed dubbing resource information
70
+ def get_resource(dubbing_id)
71
+ @client.get("/v1/dubbing/resource/#{dubbing_id}")
72
+ end
73
+
74
+ # POST /v1/dubbing/resource/{dubbing_id}/speaker/{speaker_id}/segment
75
+ # Creates a new segment in dubbing resource
76
+ #
77
+ # @param dubbing_id [String] The dubbing job ID
78
+ # @param speaker_id [String] The speaker ID
79
+ # @param start_time [Float] Start time of the segment
80
+ # @param end_time [Float] End time of the segment
81
+ # @param text [String, nil] Optional text for the segment
82
+ # @param translations [Hash, nil] Optional translations map
83
+ # @return [Hash] Response with version and new segment ID
84
+ def create_segment(dubbing_id:, speaker_id:, start_time:, end_time:, text: nil, translations: nil)
85
+ payload = {
86
+ start_time: start_time,
87
+ end_time: end_time,
88
+ text: text,
89
+ translations: translations
90
+ }.compact
91
+
92
+ @client.post("/v1/dubbing/resource/#{dubbing_id}/speaker/#{speaker_id}/segment", payload)
93
+ end
94
+
95
+ # DELETE /v1/dubbing/resource/{dubbing_id}/segment/{segment_id}
96
+ # Deletes a single segment from the dubbing
97
+ #
98
+ # @param dubbing_id [String] The dubbing job ID
99
+ # @param segment_id [String] The segment ID
100
+ # @return [Hash] Response with version
101
+ def delete_segment(dubbing_id, segment_id)
102
+ @client.delete("/v1/dubbing/resource/#{dubbing_id}/segment/#{segment_id}")
103
+ end
104
+
105
+ # PATCH /v1/dubbing/resource/{dubbing_id}/segment/{segment_id}/{language}
106
+ # Updates a single segment with new text and/or start/end times
107
+ #
108
+ # @param dubbing_id [String] The dubbing job ID
109
+ # @param segment_id [String] The segment ID
110
+ # @param language [String] The language ID
111
+ # @param start_time [Float, nil] Optional new start time
112
+ # @param end_time [Float, nil] Optional new end time
113
+ # @param text [String, nil] Optional new text
114
+ # @return [Hash] Response with version
115
+ def update_segment(dubbing_id:, segment_id:, language:, start_time: nil, end_time: nil, text: nil)
116
+ payload = {
117
+ start_time: start_time,
118
+ end_time: end_time,
119
+ text: text
120
+ }.compact
121
+
122
+ @client.patch("/v1/dubbing/resource/#{dubbing_id}/segment/#{segment_id}/#{language}", payload)
123
+ end
124
+
125
+ # POST /v1/dubbing/resource/{dubbing_id}/transcribe
126
+ # Regenerates transcriptions for specified segments
127
+ #
128
+ # @param dubbing_id [String] The dubbing job ID
129
+ # @param segments [Array<String>] List of segment IDs to transcribe
130
+ # @return [Hash] Response with version
131
+ def transcribe_segment(dubbing_id, segments)
132
+ payload = { segments: segments }
133
+ @client.post("/v1/dubbing/resource/#{dubbing_id}/transcribe", payload)
134
+ end
135
+
136
+ # POST /v1/dubbing/resource/{dubbing_id}/translate
137
+ # Regenerates translations for specified segments/languages
138
+ #
139
+ # @param dubbing_id [String] The dubbing job ID
140
+ # @param segments [Array<String>] List of segment IDs to translate
141
+ # @param languages [Array<String>, nil] Optional list of languages to translate
142
+ # @return [Hash] Response with version
143
+ def translate_segment(dubbing_id, segments, languages = nil)
144
+ payload = {
145
+ segments: segments,
146
+ languages: languages
147
+ }.compact
148
+
149
+ @client.post("/v1/dubbing/resource/#{dubbing_id}/translate", payload)
150
+ end
151
+
152
+ # POST /v1/dubbing/resource/{dubbing_id}/dub
153
+ # Regenerates dubs for specified segments/languages
154
+ #
155
+ # @param dubbing_id [String] The dubbing job ID
156
+ # @param segments [Array<String>] List of segment IDs to dub
157
+ # @param languages [Array<String>, nil] Optional list of languages to dub
158
+ # @return [Hash] Response with version
159
+ def dub_segment(dubbing_id, segments, languages = nil)
160
+ payload = {
161
+ segments: segments,
162
+ languages: languages
163
+ }.compact
164
+
165
+ @client.post("/v1/dubbing/resource/#{dubbing_id}/dub", payload)
166
+ end
167
+
168
+ # POST /v1/dubbing/resource/{dubbing_id}/render/{language}
169
+ # Renders the output media for a language
170
+ #
171
+ # @param dubbing_id [String] The dubbing job ID
172
+ # @param language [String] The language to render
173
+ # @param render_type [String] The type of render (mp4, aac, mp3, wav, aaf, tracks_zip, clips_zip)
174
+ # @param normalize_volume [Boolean, nil] Whether to normalize volume (defaults to false)
175
+ # @return [Hash] Response with version and render_id
176
+ def render_project(dubbing_id:, language:, render_type:, normalize_volume: nil)
177
+ payload = {
178
+ render_type: render_type,
179
+ normalize_volume: normalize_volume
180
+ }.compact
181
+
182
+ @client.post("/v1/dubbing/resource/#{dubbing_id}/render/#{language}", payload)
183
+ end
184
+
185
+ # PATCH /v1/dubbing/resource/{dubbing_id}/speaker/{speaker_id}
186
+ # Updates speaker metadata such as voice
187
+ #
188
+ # @param dubbing_id [String] The dubbing job ID
189
+ # @param speaker_id [String] The speaker ID
190
+ # @param voice_id [String, nil] Voice ID from library or 'track-clone'/'clip-clone'
191
+ # @param languages [Array<String>, nil] Languages to apply changes to
192
+ # @return [Hash] Response with version
193
+ def update_speaker(dubbing_id:, speaker_id:, voice_id: nil, languages: nil)
194
+ payload = {
195
+ voice_id: voice_id,
196
+ languages: languages
197
+ }.compact
198
+
199
+ @client.patch("/v1/dubbing/resource/#{dubbing_id}/speaker/#{speaker_id}", payload)
200
+ end
201
+
202
+ # GET /v1/dubbing/resource/{dubbing_id}/speaker/{speaker_id}/similar-voices
203
+ # Gets similar voices for a speaker
204
+ #
205
+ # @param dubbing_id [String] The dubbing job ID
206
+ # @param speaker_id [String] The speaker ID
207
+ # @return [Hash] Response with list of similar voices
208
+ def get_similar_voices(dubbing_id, speaker_id)
209
+ @client.get("/v1/dubbing/resource/#{dubbing_id}/speaker/#{speaker_id}/similar-voices")
210
+ end
211
+
56
212
  private
57
213
 
58
214
  attr_reader :client
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ElevenlabsClient
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elevenlabs_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vitor Oliveira