@acedatacloud/sdk 2026.1101.0 → 2026.1101.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 +131 -0
- package/dist/index.d.mts +17 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +25 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +25 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/resources/aichat.ts +1 -0
- package/src/resources/providers/maestro.ts +3 -3
- package/src/resources/providers/producer.ts +7 -7
- package/src/resources/providers/suno.ts +26 -2
- package/src/resources/webextrator.ts +25 -2
package/package.json
CHANGED
package/src/resources/aichat.ts
CHANGED
|
@@ -34,9 +34,9 @@ export interface MaestroGenerateOptions {
|
|
|
34
34
|
/** Production route: auto, narrated, captions, avatar, or drama. captions requires source video in file_urls; avatar requires a portrait. All routes use the same per-second rate. */
|
|
35
35
|
scenario?: "auto" | "narrated" | "captions" | "avatar" | "drama";
|
|
36
36
|
/** Optional visual-style preset — expressed through typography, palette, motion, image treatment and pacing. Orthogonal to `scenario` (it does NOT change routing). `auto` (default) lets the director pick; every other value adopts a real named look: `cinematic` = dark film-noir (black + blood-red, Oswald); `glass` = Apple / iOS-26 frosted liquid glass; `luxury` = timeless near-black + indigo, huge whitespace; `swiss` = precise grid + electric blue + oversized numerals; `modern` = clean light SaaS; `editorial` = cream magazine + serif; `warm` = intimate cream + amber; `vibrant` = festive folk colour; `neon` = electric neon glow; `mono` = grayscale, type-led; `pastel` = soft candy pastels; `bold` = huge poster type; `industrial` = raw glitch + rust; `futuristic` = particle glow. A freeform string is also accepted as a soft hint. */
|
|
37
|
-
style?:
|
|
38
|
-
/** Optional narration voice — the **timbre** of the voiceover, independent of language. `auto` (default) lets the director pick a fitting voice. Every preset can speak the language selected in `langs`, so choose purely by character — `warm-female`, `bright-female`, `anchor-female`, `clean-female`, `calm-male`, `deep-male`, `documentary-male`, `energetic-male`, `storyteller-male`. For `drama` / `avatar` this sets the primary / narrator timbre; distinct characters may still get their own. */
|
|
39
|
-
voice?: "auto" | "warm-female" | "bright-female" | "anchor-female" | "clean-female" | "calm-male" | "deep-male" | "documentary-male" | "energetic-male" | "storyteller-male";
|
|
37
|
+
style?: string;
|
|
38
|
+
/** Optional narration voice — the **timbre** of the voiceover, independent of language. `auto` (default) lets the director pick a fitting voice. Every preset can speak the language selected in `langs`, so choose purely by character — `warm-female`, `bright-female`, `anchor-female`, `clean-female`, `calm-male`, `deep-male`, `documentary-male`, `energetic-male`, `storyteller-male`. For `drama` / `avatar` this sets the primary / narrator timbre; distinct characters may still get their own. A 32-character hexadecimal voice reference_id is also accepted. */
|
|
39
|
+
voice?: "auto" | "warm-female" | "bright-female" | "anchor-female" | "clean-female" | "calm-male" | "deep-male" | "documentary-male" | "energetic-male" | "storyteller-male" | string;
|
|
40
40
|
/** Submit asynchronously and poll. Defaults to true. */
|
|
41
41
|
async?: boolean;
|
|
42
42
|
/** Wait for completion before returning the handle. */
|
|
@@ -41,20 +41,20 @@ export interface ProducerWavOptions {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
export interface ProducerGenerateOptions {
|
|
44
|
-
/** Lyrics content for generating audio. */
|
|
45
|
-
lyric: string;
|
|
46
44
|
/** Types of audio generation operations. Supported values include `generate` (generate based on prompts), `cover` (cover song), `extend` (continue writing), `variation` (variant), `swap_vocals` (replace vocals), `swap_instrumentals` (replace instrumentals), `replace_section` (replace section), `stems` (separate tracks). */
|
|
47
45
|
action: "generate" | "cover" | "extend" | "variation" | "swap_vocals" | "swap_instrumentals" | "replace_section" | "stems";
|
|
48
|
-
/** Prompts for generating audio should not exceed 200 characters in length. */
|
|
49
|
-
prompt: string;
|
|
50
46
|
/** Random seed used for audio generation. */
|
|
51
47
|
seed?: string;
|
|
48
|
+
/** Lyrics content for generating audio. */
|
|
49
|
+
lyric?: string;
|
|
52
50
|
/** The model used for generating music is `FUZZ-2.0` by default. */
|
|
53
51
|
model?: "FUZZ-2.0 Pro" | "FUZZ-2.0" | "FUZZ-2.0 Raw" | "FUZZ-1.1 Pro" | "FUZZ-1.0 Pro" | "FUZZ-1.0" | "FUZZ-1.1" | "FUZZ-0.8";
|
|
54
52
|
/** Title used for generating songs. */
|
|
55
53
|
title?: string;
|
|
56
54
|
/** Is it a custom mode? If `true`, the audio will be generated based on the `lyric`; otherwise, it will be generated based on the `prompt`. */
|
|
57
55
|
custom?: boolean;
|
|
56
|
+
/** Prompts for generating audio should not exceed 200 characters in length. */
|
|
57
|
+
prompt?: string;
|
|
58
58
|
/** The unique ID of the reference song. */
|
|
59
59
|
audioId?: string;
|
|
60
60
|
/** The degree of uniqueness of style can be selected between 0 and 1, with a default value of 0.5. */
|
|
@@ -136,13 +136,13 @@ export class Producer {
|
|
|
136
136
|
/** Producer AI music generation API, generates 1 song per request. */
|
|
137
137
|
async generate(options: ProducerGenerateOptions): Promise<TaskHandle> {
|
|
138
138
|
const body: Record<string, unknown> = {};
|
|
139
|
-
body["lyric"] = options.lyric;
|
|
140
139
|
body["action"] = options.action;
|
|
141
|
-
body["prompt"] = options.prompt;
|
|
142
140
|
if (options.seed !== undefined) body["seed"] = options.seed;
|
|
141
|
+
if (options.lyric !== undefined) body["lyric"] = options.lyric;
|
|
143
142
|
if (options.model !== undefined) body["model"] = options.model;
|
|
144
143
|
if (options.title !== undefined) body["title"] = options.title;
|
|
145
|
-
|
|
144
|
+
body["custom"] = options.custom ?? false;
|
|
145
|
+
if (options.prompt !== undefined) body["prompt"] = options.prompt;
|
|
146
146
|
if (options.audioId !== undefined) body["audio_id"] = options.audioId;
|
|
147
147
|
body["weirdness"] = options.weirdness ?? false;
|
|
148
148
|
body["continue_at"] = options.continueAt ?? false;
|
|
@@ -39,7 +39,7 @@ export interface SunoGenerateOptions {
|
|
|
39
39
|
weirdness?: number;
|
|
40
40
|
/** A list of reference audio URLs for inspiration, requiring 1 to 4 publicly accessible audio addresses. This field is mandatory when `action` is `inspo`. */
|
|
41
41
|
audioUrls?: string[];
|
|
42
|
-
/**
|
|
42
|
+
/** Singer style or cloned voice Persona ID for generation and cover / upload_cover. For a private voice, first upload the source to /suno/upload with the same persona_id, then use the returned audio_id on the same channel. No vocal_gender is required. */
|
|
43
43
|
personaId?: string;
|
|
44
44
|
/** Continue generating from the specified time point (seconds) of the existing audio. For example, 213.5 means to continue from 3 minutes and 33.5 seconds. */
|
|
45
45
|
continueAt?: number;
|
|
@@ -209,6 +209,8 @@ export interface SunoMashupLyricsOptions {
|
|
|
209
209
|
export interface SunoUploadOptions {
|
|
210
210
|
/** The CDN address (URL) for the custom audio file to be uploaded. */
|
|
211
211
|
audioUrl: string;
|
|
212
|
+
/** Optional voice Persona ID for standard uploads only. Associate the source audio with this voice before upload_cover; use the returned audio_id and the same persona_id on the same channel. */
|
|
213
|
+
personaId?: string;
|
|
212
214
|
callbackUrl?: string;
|
|
213
215
|
/** Any parameter added upstream before the SDK is regenerated. */
|
|
214
216
|
[key: string]: unknown;
|
|
@@ -228,6 +230,14 @@ export interface SunoMp3Options {
|
|
|
228
230
|
[key: string]: unknown;
|
|
229
231
|
}
|
|
230
232
|
|
|
233
|
+
export interface SunoAvailabilityOptions {
|
|
234
|
+
/** Suno audio ID from a completed task, not the task ID. */
|
|
235
|
+
audioId: string;
|
|
236
|
+
callbackUrl?: string;
|
|
237
|
+
/** Any parameter added upstream before the SDK is regenerated. */
|
|
238
|
+
[key: string]: unknown;
|
|
239
|
+
}
|
|
240
|
+
|
|
231
241
|
/** suno client. */
|
|
232
242
|
export class Suno {
|
|
233
243
|
constructor(private transport: Transport) {}
|
|
@@ -442,8 +452,9 @@ export class Suno {
|
|
|
442
452
|
async upload(options: SunoUploadOptions): Promise<Record<string, unknown>> {
|
|
443
453
|
const body: Record<string, unknown> = {};
|
|
444
454
|
body["audio_url"] = options.audioUrl;
|
|
455
|
+
if (options.personaId !== undefined) body["persona_id"] = options.personaId;
|
|
445
456
|
for (const [key, value] of Object.entries(options)) {
|
|
446
|
-
if (!["async", "audioUrl", "callbackUrl", "maxWait", "pollInterval", "wait"].includes(key) && value !== undefined) {
|
|
457
|
+
if (!["async", "audioUrl", "callbackUrl", "maxWait", "personaId", "pollInterval", "wait"].includes(key) && value !== undefined) {
|
|
447
458
|
body[key] = value;
|
|
448
459
|
}
|
|
449
460
|
}
|
|
@@ -470,4 +481,17 @@ export class Suno {
|
|
|
470
481
|
return handle;
|
|
471
482
|
}
|
|
472
483
|
|
|
484
|
+
/** Check Suno audio availability. */
|
|
485
|
+
async availability(options: SunoAvailabilityOptions): Promise<Record<string, unknown>> {
|
|
486
|
+
const body: Record<string, unknown> = {};
|
|
487
|
+
body["audio_id"] = options.audioId;
|
|
488
|
+
for (const [key, value] of Object.entries(options)) {
|
|
489
|
+
if (!["async", "audioId", "callbackUrl", "maxWait", "pollInterval", "wait"].includes(key) && value !== undefined) {
|
|
490
|
+
body[key] = value;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
if (options.callbackUrl !== undefined) body.callback_url = options.callbackUrl;
|
|
494
|
+
return (await this.transport.request('POST', "/suno/availability", { json: body })) as Record<string, unknown>;
|
|
495
|
+
}
|
|
496
|
+
|
|
473
497
|
}
|
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
import { Transport } from '../runtime/transport';
|
|
4
4
|
|
|
5
|
+
export interface WebExtratorCookie {
|
|
6
|
+
name: string;
|
|
7
|
+
value: string;
|
|
8
|
+
domain: string;
|
|
9
|
+
path?: string;
|
|
10
|
+
expires?: number;
|
|
11
|
+
httpOnly?: boolean;
|
|
12
|
+
secure?: boolean;
|
|
13
|
+
sameSite?: 'Strict' | 'Lax' | 'None';
|
|
14
|
+
}
|
|
15
|
+
|
|
5
16
|
export class WebExtrator {
|
|
6
17
|
constructor(private transport: Transport) {}
|
|
7
18
|
|
|
@@ -18,9 +29,12 @@ export class WebExtrator {
|
|
|
18
29
|
userAgent?: string;
|
|
19
30
|
callbackUrl?: string;
|
|
20
31
|
async?: boolean;
|
|
32
|
+
cookies?: WebExtratorCookie[];
|
|
33
|
+
bypassCache?: boolean;
|
|
34
|
+
cacheTtlSeconds?: number;
|
|
21
35
|
[key: string]: unknown;
|
|
22
36
|
}): Promise<Record<string, unknown>> {
|
|
23
|
-
const { url, expectedType, enableLlm, waitUntil, timeout, delay, waitForSelector, blockResources, headers, userAgent, callbackUrl, ...rest } = opts;
|
|
37
|
+
const { url, expectedType, enableLlm, waitUntil, timeout, delay, waitForSelector, blockResources, headers, userAgent, callbackUrl, cookies, bypassCache, cacheTtlSeconds, ...rest } = opts;
|
|
24
38
|
const body: Record<string, unknown> = { url, ...rest };
|
|
25
39
|
if (expectedType !== undefined) body.expected_type = expectedType;
|
|
26
40
|
if (enableLlm !== undefined) body.enable_llm = enableLlm;
|
|
@@ -32,6 +46,9 @@ export class WebExtrator {
|
|
|
32
46
|
if (headers !== undefined) body.headers = headers;
|
|
33
47
|
if (userAgent !== undefined) body.user_agent = userAgent;
|
|
34
48
|
if (callbackUrl !== undefined) body.callback_url = callbackUrl;
|
|
49
|
+
if (cookies !== undefined) body.cookies = cookies;
|
|
50
|
+
if (bypassCache !== undefined) body.bypass_cache = bypassCache;
|
|
51
|
+
if (cacheTtlSeconds !== undefined) body.cache_ttl_seconds = cacheTtlSeconds;
|
|
35
52
|
return this.transport.request('POST', '/webextrator/extract', { json: body });
|
|
36
53
|
}
|
|
37
54
|
|
|
@@ -46,9 +63,12 @@ export class WebExtrator {
|
|
|
46
63
|
userAgent?: string;
|
|
47
64
|
callbackUrl?: string;
|
|
48
65
|
async?: boolean;
|
|
66
|
+
cookies?: WebExtratorCookie[];
|
|
67
|
+
bypassCache?: boolean;
|
|
68
|
+
cacheTtlSeconds?: number;
|
|
49
69
|
[key: string]: unknown;
|
|
50
70
|
}): Promise<Record<string, unknown>> {
|
|
51
|
-
const { url, waitUntil, timeout, delay, waitForSelector, blockResources, headers, userAgent, callbackUrl, ...rest } = opts;
|
|
71
|
+
const { url, waitUntil, timeout, delay, waitForSelector, blockResources, headers, userAgent, callbackUrl, cookies, bypassCache, cacheTtlSeconds, ...rest } = opts;
|
|
52
72
|
const body: Record<string, unknown> = { url, ...rest };
|
|
53
73
|
if (waitUntil !== undefined) body.wait_until = waitUntil;
|
|
54
74
|
if (timeout !== undefined) body.timeout = timeout;
|
|
@@ -58,6 +78,9 @@ export class WebExtrator {
|
|
|
58
78
|
if (headers !== undefined) body.headers = headers;
|
|
59
79
|
if (userAgent !== undefined) body.user_agent = userAgent;
|
|
60
80
|
if (callbackUrl !== undefined) body.callback_url = callbackUrl;
|
|
81
|
+
if (cookies !== undefined) body.cookies = cookies;
|
|
82
|
+
if (bypassCache !== undefined) body.bypass_cache = bypassCache;
|
|
83
|
+
if (cacheTtlSeconds !== undefined) body.cache_ttl_seconds = cacheTtlSeconds;
|
|
61
84
|
return this.transport.request('POST', '/webextrator/render', { json: body });
|
|
62
85
|
}
|
|
63
86
|
}
|