@acedatacloud/sdk 2026.1113.0 → 2026.1113.1

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.
package/README.md CHANGED
@@ -148,6 +148,8 @@ are returned through the SDK's normal error handling.
148
148
  Use the exact model ID `claude-fable-5-2`. Native Messages preserves thinking and
149
149
  tool content blocks. Omit `temperature`, `top_p` and `top_k`; adaptive thinking is
150
150
  always enabled, and the output budget covers thinking plus the final answer.
151
+ For tools, use `tool_choice: { type: 'auto' }`, not `any` or a forced tool.
152
+ Fable 5.1 and Fable 5 remain separate model IDs; upgrade by changing `model` explicitly.
151
153
  Count Tokens and Responses are not published for this model. Consult the
152
154
  [current model page](https://platform.acedata.cloud/models/claude-fable-5-2?m=chat)
153
155
  for account availability and package-dependent prices; model discovery alone does
@@ -327,6 +329,54 @@ not trigger reference-video billing. Do not combine `videoList` with
327
329
 
328
330
  ## Suno music processing
329
331
 
332
+ ### Replace a section
333
+
334
+ Use the completed song's `data[].id`, not the task ID. Listen to the source and
335
+ use `await client.suno.timing({ audioId })` to choose a complete phrase; replace
336
+ the example ID and 30–50 second interval with your own. Supply only the local
337
+ new lyrics, preferably the same text in `lyric` and `prompt`, not the whole song.
338
+
339
+ ```typescript
340
+ const localLyrics = 'Evening winds along the quiet lane\nCarry our story home again';
341
+ const task = await client.suno.generate({
342
+ action: 'replace_section',
343
+ audioId: 'YOUR_COMPLETED_AUDIO_ID',
344
+ model: 'chirp-v5-5',
345
+ lyric: localLyrics,
346
+ prompt: localLyrics,
347
+ replaceSectionStart: 30.0,
348
+ replaceSectionEnd: 50.0,
349
+ replaceSectionResultMode: 'full_song',
350
+ });
351
+ const result = await task.wait();
352
+ const songs = (result.response as Record<string, unknown>).data;
353
+ ```
354
+
355
+ Omitting `replaceSectionResultMode` uses the server's `full_song` default:
356
+ two complete songs, with no further `concat`. Listen to both results and check
357
+ `audio_url`, `duration`, new words and transitions. Success does not guarantee
358
+ word-for-word lyrics or the original duration; the `duration` request field
359
+ cannot lock a replacement's length. Returned `lyric` is metadata, not a
360
+ transcription, and may be empty if source lyric timing is unavailable.
361
+
362
+ For another edit, use the selected complete song's `id` and recheck its timing;
363
+ do not reuse old coordinates or send its whole returned lyric as local input.
364
+ For manual selection, request `replaceSectionResultMode: 'candidates'`, then
365
+ call `await client.suno.generate({ action: 'concat', audioId: selectedCandidateId })`
366
+ and wait for the complete song. Candidates are unstitched clips, possibly with
367
+ context. If results still sing old words or grow too long, check the source,
368
+ interval and local lyrics, then the other result; more polling cannot change
369
+ completed audio. Keep the task ID, source ID, request and result audio for support.
370
+
371
+ ### Processing charges
372
+
373
+ Standard successful-request charges are **0.56 Credits** for `action: 'stems'`
374
+ (vocals and accompaniment together count once), **0.08 Credits** for
375
+ `client.suno.lyrics(...)` (multiple candidates still count once), and **0.15 Credits**
376
+ for `client.suno.voices(...)`. Failed requests are not charged; applicable discounts
377
+ follow the actual bill. `all_stems`, `extract_stem` and other actions have their own
378
+ prices, not the `stems` rate.
379
+
330
380
  `await client.suno.persona({ name, audioId })` creates a singer style with
331
381
  `POST /suno/persona`; creation still follows the endpoint's pricing rules.
332
382
  Listing with `GET /suno/persona` and deleting with `DELETE /suno/persona` are
package/dist/index.js CHANGED
@@ -2266,8 +2266,9 @@ var Suno = class {
2266
2266
  if (options.replaceSectionEnd !== void 0) body["replace_section_end"] = options.replaceSectionEnd;
2267
2267
  if (options.underpaintingStart !== void 0) body["underpainting_start"] = options.underpaintingStart;
2268
2268
  if (options.replaceSectionStart !== void 0) body["replace_section_start"] = options.replaceSectionStart;
2269
+ if (options.replaceSectionResultMode !== void 0) body["replace_section_result_mode"] = options.replaceSectionResultMode;
2269
2270
  for (const [key, value] of Object.entries(options)) {
2270
- if (!["action", "async", "audioId", "audioUrls", "audioWeight", "callbackUrl", "continueAt", "custom", "duration", "instrumental", "lyric", "lyricPrompt", "mashupAudioIds", "maxWait", "model", "negativeTags", "overpaintingEnd", "overpaintingStart", "personaId", "pollInterval", "prompt", "replaceSectionEnd", "replaceSectionStart", "samplesEnd", "samplesStart", "style", "styleInfluence", "title", "underpaintingEnd", "underpaintingStart", "variationCategory", "vocalGender", "wait", "weirdness"].includes(key) && value !== void 0) {
2271
+ if (!["action", "async", "audioId", "audioUrls", "audioWeight", "callbackUrl", "continueAt", "custom", "duration", "instrumental", "lyric", "lyricPrompt", "mashupAudioIds", "maxWait", "model", "negativeTags", "overpaintingEnd", "overpaintingStart", "personaId", "pollInterval", "prompt", "replaceSectionEnd", "replaceSectionResultMode", "replaceSectionStart", "samplesEnd", "samplesStart", "style", "styleInfluence", "title", "underpaintingEnd", "underpaintingStart", "variationCategory", "vocalGender", "wait", "weirdness"].includes(key) && value !== void 0) {
2271
2272
  body[key] = value;
2272
2273
  }
2273
2274
  }