@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 +50 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/resources/providers/suno.ts +7 -4
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
|
}
|