@slatesvideo/shared 0.1.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.
- package/README.md +5 -0
- package/dist/clients/cloud.js +32 -1
- package/dist/clients/desktop.d.ts +10 -4
- package/dist/clients/desktop.js +95 -7
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -0
- package/dist/operations/index.d.ts +207 -1
- package/dist/operations/index.js +1513 -32
- package/dist/prompts/character-sheet.d.ts +24 -0
- package/dist/prompts/character-sheet.js +53 -0
- package/dist/prompts/environment-sheet.d.ts +9 -0
- package/dist/prompts/environment-sheet.js +27 -0
- package/dist/prompts/index.d.ts +6 -0
- package/dist/prompts/index.js +17 -0
- package/dist/prompts/model-facts.d.ts +17 -0
- package/dist/prompts/model-facts.js +64 -0
- package/dist/prompts/reference-rules.d.ts +34 -0
- package/dist/prompts/reference-rules.js +120 -0
- package/dist/prompts/style-library.d.ts +31 -0
- package/dist/prompts/style-library.js +84 -0
- package/dist/skills/content.d.ts +2 -0
- package/dist/skills/content.js +20 -0
- package/package.json +36 -5
- package/skills/slates-character-turnaround.md +55 -0
- package/skills/slates-cost-discipline.md +96 -0
- package/skills/slates-direct-response-ad.md +66 -0
- package/skills/slates-edit-and-iterate.md +48 -0
- package/skills/slates-one-prompt-film.md +67 -0
- package/skills/slates-prompting-flux-2-max.md +112 -0
- package/skills/slates-prompting-kling-v3.md +167 -0
- package/skills/slates-prompting-lip-sync.md +169 -0
- package/skills/slates-prompting-motion-transfer.md +148 -0
- package/skills/slates-prompting-nano-banana-2.md +154 -0
- package/skills/slates-prompting-seedance.md +155 -0
- package/skills/slates-prompting-seedream-5-lite.md +74 -0
- package/skills/slates-prompting-veo-3.md +156 -0
- package/skills/slates-storyboard-from-script.md +49 -0
- package/skills/slates-vision-feedback-loop.md +62 -0
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js.map +0 -1
- package/dist/clients/cloud.d.ts.map +0 -1
- package/dist/clients/cloud.js.map +0 -1
- package/dist/clients/desktop.d.ts.map +0 -1
- package/dist/clients/desktop.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/operations/index.d.ts.map +0 -1
- package/dist/operations/index.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# @slatesvideo/shared
|
|
2
|
+
|
|
3
|
+
Internal shared layer for the [Slates](https://slates.video) MCP server and CLI: the auth/connection-file reader, the cloud and desktop HTTP clients, and the single operations array both surfaces register. You almost certainly want [@slatesvideo/mcp-server](https://www.npmjs.com/package/@slatesvideo/mcp-server) (MCP clients like Claude Desktop and Cursor) or [@slatesvideo/cli](https://www.npmjs.com/package/@slatesvideo/cli) (the `slates` command) instead — this package is published only as their dependency.
|
|
4
|
+
|
|
5
|
+
Source: [github.com/EricDisero/slates-mcp](https://github.com/EricDisero/slates-mcp)
|
package/dist/clients/cloud.js
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
import { requireCloudToken } from '../auth.js';
|
|
2
|
-
|
|
2
|
+
const FALLBACK_CLOUD_BASE_URL = 'https://slates-api.fly.dev';
|
|
3
|
+
// The slates_sk_ bearer is attached to every cloud request. SLATES_CLOUD_BASE_URL
|
|
4
|
+
// may override the host for dev/staging, but ONLY over https (or http to
|
|
5
|
+
// localhost) — otherwise the token could be exfiltrated to an arbitrary host
|
|
6
|
+
// or sent in cleartext. An invalid/insecure override is ignored (falls back to
|
|
7
|
+
// production) rather than silently leaking the token.
|
|
8
|
+
function resolveCloudBaseUrl() {
|
|
9
|
+
const override = process.env.SLATES_CLOUD_BASE_URL;
|
|
10
|
+
if (!override)
|
|
11
|
+
return FALLBACK_CLOUD_BASE_URL;
|
|
12
|
+
try {
|
|
13
|
+
const u = new URL(override);
|
|
14
|
+
const isLoopback = u.hostname === 'localhost' || u.hostname === '127.0.0.1';
|
|
15
|
+
if (u.protocol === 'https:' || (u.protocol === 'http:' && isLoopback)) {
|
|
16
|
+
return override.replace(/\/+$/, '');
|
|
17
|
+
}
|
|
18
|
+
console.error(`[slates] Ignoring SLATES_CLOUD_BASE_URL="${override}": must be https:// (or http://localhost). ` +
|
|
19
|
+
`Falling back to ${FALLBACK_CLOUD_BASE_URL} so the auth token is not exposed.`);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
console.error(`[slates] Ignoring invalid SLATES_CLOUD_BASE_URL="${override}". Falling back to ${FALLBACK_CLOUD_BASE_URL}.`);
|
|
23
|
+
}
|
|
24
|
+
return FALLBACK_CLOUD_BASE_URL;
|
|
25
|
+
}
|
|
26
|
+
export const DEFAULT_CLOUD_BASE_URL = resolveCloudBaseUrl();
|
|
3
27
|
// Thin client for slates-api. Used for credit-aware ops that route through
|
|
4
28
|
// the user's account (generation proxy, credits balance, model registry,
|
|
5
29
|
// license checks). The desktop client below is the local equivalent.
|
|
@@ -37,6 +61,13 @@ export class SlatesCloudClient {
|
|
|
37
61
|
// fall through
|
|
38
62
|
}
|
|
39
63
|
if (!res.ok) {
|
|
64
|
+
// 401 = the slates_sk_ token is missing, expired, or was revoked
|
|
65
|
+
// (Disconnect in Slates Settings kills it server-side). Point at the
|
|
66
|
+
// two recovery paths instead of echoing an opaque auth error.
|
|
67
|
+
if (res.status === 401) {
|
|
68
|
+
throw new Error(`slates-api ${path} rejected the auth token (401) — it's expired or was revoked. ` +
|
|
69
|
+
'To reconnect, run `slates login` (CLI) or reconnect in Slates → Settings → Agent Control');
|
|
70
|
+
}
|
|
40
71
|
const detail = parsed && typeof parsed === 'object' && 'error' in parsed
|
|
41
72
|
? parsed.error
|
|
42
73
|
: text || res.statusText;
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
export interface DesktopHealth {
|
|
2
|
+
ok: true;
|
|
3
|
+
service: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
agentApiVersion?: number;
|
|
6
|
+
capabilities?: string[];
|
|
7
|
+
}
|
|
1
8
|
export declare class SlatesDesktopClient {
|
|
2
9
|
private readonly token;
|
|
3
10
|
private readonly port;
|
|
@@ -6,12 +13,11 @@ export declare class SlatesDesktopClient {
|
|
|
6
13
|
port?: number;
|
|
7
14
|
});
|
|
8
15
|
private get baseUrl();
|
|
9
|
-
healthz(): Promise<
|
|
10
|
-
|
|
11
|
-
service: string;
|
|
12
|
-
}>;
|
|
16
|
+
healthz(): Promise<DesktopHealth>;
|
|
17
|
+
requireCapability(cap: string, friendlyFeature: string): Promise<void>;
|
|
13
18
|
get<T>(path: string, params?: Record<string, string | number | boolean | null | undefined>): Promise<T>;
|
|
14
19
|
post<T>(path: string, body: unknown): Promise<T>;
|
|
20
|
+
private fetchOrFriendly;
|
|
15
21
|
private handle;
|
|
16
22
|
}
|
|
17
23
|
//# sourceMappingURL=desktop.d.ts.map
|
package/dist/clients/desktop.js
CHANGED
|
@@ -1,8 +1,44 @@
|
|
|
1
1
|
import { requireDesktop } from '../auth.js';
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
|
|
2
|
+
// Friendly message for the by-far-most-common failure: the desktop app
|
|
3
|
+
// isn't running (or the connection file holds a stale port). A raw
|
|
4
|
+
// "fetch failed" tells the agent nothing actionable.
|
|
5
|
+
const DESKTOP_UNREACHABLE_MESSAGE = 'Slates desktop app is not reachable — open the Slates app and retry. ' +
|
|
6
|
+
'Not installed? https://slates.video/download';
|
|
7
|
+
// Timeout-class failures are NOT "app not running": undici's default 300s
|
|
8
|
+
// headers timeout fires on long blocking calls (export_video encoding can
|
|
9
|
+
// exceed 5 min) while the desktop is still mid-work. Mislabeling that as
|
|
10
|
+
// unreachable invites a retry that double-spends.
|
|
11
|
+
const DESKTOP_TIMEOUT_MESSAGE = 'The Slates desktop app did not respond in time but may still be working ' +
|
|
12
|
+
'(long renders and video generations can exceed the HTTP timeout). ' +
|
|
13
|
+
'For video generation use background: true and poll with slates_get_generation_status. ' +
|
|
14
|
+
'For exports, check whether the output file landed on disk before retrying.';
|
|
15
|
+
const CONNECTION_ERROR_CODES = new Set(['ECONNREFUSED', 'ECONNRESET', 'ENOTFOUND', 'EHOSTUNREACH']);
|
|
16
|
+
const TIMEOUT_ERROR_CODES = new Set(['UND_ERR_HEADERS_TIMEOUT', 'UND_ERR_BODY_TIMEOUT', 'ETIMEDOUT']);
|
|
17
|
+
// fetch wraps the real failure in TypeError('fetch failed', { cause }).
|
|
18
|
+
// The cause carries the code — sometimes directly, sometimes (connect
|
|
19
|
+
// failures) as an AggregateError whose sub-errors carry it. Collect all.
|
|
20
|
+
function fetchErrorCodes(err) {
|
|
21
|
+
const codes = [];
|
|
22
|
+
const cause = err?.cause;
|
|
23
|
+
const code = cause?.code;
|
|
24
|
+
if (typeof code === 'string')
|
|
25
|
+
codes.push(code);
|
|
26
|
+
const subErrors = cause?.errors;
|
|
27
|
+
if (Array.isArray(subErrors)) {
|
|
28
|
+
for (const sub of subErrors) {
|
|
29
|
+
const c = sub?.code;
|
|
30
|
+
if (typeof c === 'string')
|
|
31
|
+
codes.push(c);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return codes;
|
|
35
|
+
}
|
|
36
|
+
// Module-level health cache so capability checks don't re-hit /agent/healthz
|
|
37
|
+
// on every op call. 60s TTL — long enough to amortize a multi-op workflow,
|
|
38
|
+
// short enough that an app update mid-session is picked up. Keyed by port
|
|
39
|
+
// (each desktop instance = one port).
|
|
40
|
+
const HEALTH_CACHE_TTL_MS = 60_000;
|
|
41
|
+
const healthCache = new Map();
|
|
6
42
|
export class SlatesDesktopClient {
|
|
7
43
|
token;
|
|
8
44
|
port;
|
|
@@ -21,12 +57,33 @@ export class SlatesDesktopClient {
|
|
|
21
57
|
return `http://127.0.0.1:${this.port}`;
|
|
22
58
|
}
|
|
23
59
|
async healthz() {
|
|
24
|
-
const res = await
|
|
60
|
+
const res = await this.fetchOrFriendly(`${this.baseUrl}/agent/healthz`);
|
|
25
61
|
if (!res.ok) {
|
|
26
62
|
throw new Error(`Desktop healthz failed (${res.status})`);
|
|
27
63
|
}
|
|
28
64
|
return res.json();
|
|
29
65
|
}
|
|
66
|
+
// Version handshake. New ops (timeline, export, background generation,
|
|
67
|
+
// edit-image, image references) exist only on agent API v2 desktops.
|
|
68
|
+
// Calling a missing route on an old desktop would 404 with an opaque
|
|
69
|
+
// error — this check turns that into an actionable "update Slates"
|
|
70
|
+
// message BEFORE the op's first real request.
|
|
71
|
+
async requireCapability(cap, friendlyFeature) {
|
|
72
|
+
const cached = healthCache.get(this.port);
|
|
73
|
+
let health;
|
|
74
|
+
if (cached && Date.now() - cached.fetchedAt < HEALTH_CACHE_TTL_MS) {
|
|
75
|
+
health = cached.health;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
health = await this.healthz();
|
|
79
|
+
healthCache.set(this.port, { health, fetchedAt: Date.now() });
|
|
80
|
+
}
|
|
81
|
+
if (health.agentApiVersion === undefined || !health.capabilities?.includes(cap)) {
|
|
82
|
+
throw new Error(`Your Slates desktop app doesn't support ${friendlyFeature} yet ` +
|
|
83
|
+
`(agent API v${health.agentApiVersion ?? 1}, need v2 with '${cap}'). ` +
|
|
84
|
+
`Update Slates (Settings → Check for Updates) and retry.`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
30
87
|
async get(path, params) {
|
|
31
88
|
const url = new URL(`${this.baseUrl}${path}`);
|
|
32
89
|
if (params) {
|
|
@@ -36,13 +93,13 @@ export class SlatesDesktopClient {
|
|
|
36
93
|
url.searchParams.set(k, String(v));
|
|
37
94
|
}
|
|
38
95
|
}
|
|
39
|
-
const res = await
|
|
96
|
+
const res = await this.fetchOrFriendly(url.toString(), {
|
|
40
97
|
headers: { Authorization: `Bearer ${this.token}` },
|
|
41
98
|
});
|
|
42
99
|
return this.handle(path, res);
|
|
43
100
|
}
|
|
44
101
|
async post(path, body) {
|
|
45
|
-
const res = await
|
|
102
|
+
const res = await this.fetchOrFriendly(`${this.baseUrl}${path}`, {
|
|
46
103
|
method: 'POST',
|
|
47
104
|
headers: {
|
|
48
105
|
'Content-Type': 'application/json',
|
|
@@ -52,6 +109,37 @@ export class SlatesDesktopClient {
|
|
|
52
109
|
});
|
|
53
110
|
return this.handle(path, res);
|
|
54
111
|
}
|
|
112
|
+
// Network-level failures surface as a generic TypeError from fetch.
|
|
113
|
+
// Classify by the underlying error code: connection-class (ECONNREFUSED
|
|
114
|
+
// on a closed app, stale port after an app restart) → "open the app";
|
|
115
|
+
// timeout-class (undici headers/body timeout on a long blocking render,
|
|
116
|
+
// caller abort) → "may still be working — don't blind-retry"; anything
|
|
117
|
+
// else → rethrow with context, NOT a misleading unreachable message.
|
|
118
|
+
// HTTP-level errors still flow to handle().
|
|
119
|
+
async fetchOrFriendly(url, init) {
|
|
120
|
+
try {
|
|
121
|
+
return await fetch(url, init);
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
const codes = fetchErrorCodes(err);
|
|
125
|
+
if (codes.some((c) => CONNECTION_ERROR_CODES.has(c))) {
|
|
126
|
+
throw new Error(DESKTOP_UNREACHABLE_MESSAGE);
|
|
127
|
+
}
|
|
128
|
+
const name = err?.name;
|
|
129
|
+
if (name === 'AbortError' || codes.some((c) => TIMEOUT_ERROR_CODES.has(c))) {
|
|
130
|
+
throw new Error(DESKTOP_TIMEOUT_MESSAGE);
|
|
131
|
+
}
|
|
132
|
+
let path = url;
|
|
133
|
+
try {
|
|
134
|
+
path = new URL(url).pathname;
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// keep the full url
|
|
138
|
+
}
|
|
139
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
140
|
+
throw new Error(`slates-desktop request to ${path} failed: ${message}`, { cause: err });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
55
143
|
async handle(path, res) {
|
|
56
144
|
const text = await res.text();
|
|
57
145
|
let parsed = null;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './auth.js';
|
|
2
2
|
export { SlatesCloudClient, type SlatesUserInfo, type CreditsBalance, type ModelRegistryResponse } from './clients/cloud.js';
|
|
3
|
-
export { SlatesDesktopClient } from './clients/desktop.js';
|
|
3
|
+
export { SlatesDesktopClient, type DesktopHealth } from './clients/desktop.js';
|
|
4
|
+
export { SKILLS } from './skills/content.js';
|
|
4
5
|
export * as operations from './operations/index.js';
|
|
5
6
|
export { ALL_OPERATIONS, defaultContext, type Operation, type OperationContext, type OperationResult } from './operations/index.js';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './auth.js';
|
|
2
2
|
export { SlatesCloudClient } from './clients/cloud.js';
|
|
3
3
|
export { SlatesDesktopClient } from './clients/desktop.js';
|
|
4
|
+
export { SKILLS } from './skills/content.js';
|
|
4
5
|
export * as operations from './operations/index.js';
|
|
5
6
|
export { ALL_OPERATIONS, defaultContext } from './operations/index.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -44,6 +44,13 @@ export declare const getAssetImage: Operation<{
|
|
|
44
44
|
id: string;
|
|
45
45
|
fullRes?: boolean;
|
|
46
46
|
}>;
|
|
47
|
+
export declare const getAssetsBatch: Operation<{
|
|
48
|
+
ids: string[];
|
|
49
|
+
}>;
|
|
50
|
+
export declare const getAssetVideoFrames: Operation<{
|
|
51
|
+
id: string;
|
|
52
|
+
count?: number;
|
|
53
|
+
}>;
|
|
47
54
|
export declare const uploadReferenceImage: Operation<{
|
|
48
55
|
projectId: string;
|
|
49
56
|
filePath?: string;
|
|
@@ -113,11 +120,210 @@ export declare const addFrame: Operation<{
|
|
|
113
120
|
}>;
|
|
114
121
|
export declare const generateImage: Operation<{
|
|
115
122
|
prompt: string;
|
|
123
|
+
model?: 'nano-banana-2' | 'flux-2-max' | 'seedream-5-lite';
|
|
124
|
+
projectId?: string;
|
|
116
125
|
resolution?: '1k' | '2k' | '4k';
|
|
117
|
-
aspectRatio?:
|
|
126
|
+
aspectRatio?: '1:1' | '16:9' | '9:16' | '4:3' | '3:4' | '21:9' | '9:21' | '4:5' | '5:4' | '2:3' | '3:2';
|
|
118
127
|
count?: number;
|
|
119
128
|
referenceImageUrls?: string[];
|
|
129
|
+
referenceAssetIds?: string[];
|
|
130
|
+
background?: boolean;
|
|
131
|
+
confirm?: boolean;
|
|
132
|
+
}>;
|
|
133
|
+
export declare const editImage: Operation<{
|
|
134
|
+
projectId: string;
|
|
135
|
+
sourceAssetId: string;
|
|
136
|
+
prompt: string;
|
|
137
|
+
editModel?: 'nano-banana-2' | 'flux-2-max' | 'seedream-5-lite';
|
|
138
|
+
referenceAssetIds?: string[];
|
|
139
|
+
resolution?: '1k' | '2k' | '4k';
|
|
140
|
+
aspectRatio?: string;
|
|
120
141
|
confirm?: boolean;
|
|
142
|
+
background?: boolean;
|
|
143
|
+
}>;
|
|
144
|
+
declare const VIDEO_MODELS: readonly ["kling-v3.0-std", "kling-v3.0-pro", "kling-v3.0-omni", "veo-3.1-fast", "veo-3.1-standard", "seedance-2-fast", "seedance-2-std"];
|
|
145
|
+
type VideoModel = (typeof VIDEO_MODELS)[number];
|
|
146
|
+
export declare const generateVideo: Operation<{
|
|
147
|
+
prompt: string;
|
|
148
|
+
model: VideoModel;
|
|
149
|
+
projectId?: string;
|
|
150
|
+
aspectRatio?: '1:1' | '16:9' | '9:16' | '4:3' | '3:4' | '21:9' | '9:21' | '4:5' | '5:4' | '2:3' | '3:2';
|
|
151
|
+
duration?: number;
|
|
152
|
+
videoResolution?: '720p' | '1080p' | '4k';
|
|
153
|
+
seedanceSpeed?: 'economy' | 'priority';
|
|
154
|
+
firstFrameAssetId?: string;
|
|
155
|
+
lastFrameAssetId?: string;
|
|
156
|
+
ingredientAssetIds?: string[];
|
|
157
|
+
sound?: boolean;
|
|
158
|
+
audioLanguage?: 'EN' | 'ZH' | 'JA' | 'KO' | 'ES';
|
|
159
|
+
generateMusic?: boolean;
|
|
160
|
+
negativePrompt?: string;
|
|
161
|
+
background?: boolean;
|
|
162
|
+
confirm?: boolean;
|
|
163
|
+
}>;
|
|
164
|
+
export declare const generateLipSync: Operation<{
|
|
165
|
+
projectId: string;
|
|
166
|
+
sourceAssetId: string;
|
|
167
|
+
sourceType: 'image' | 'video';
|
|
168
|
+
audioMethod: 'tts' | 'upload';
|
|
169
|
+
ttsText?: string;
|
|
170
|
+
ttsVoice?: string;
|
|
171
|
+
ttsLanguage?: 'EN' | 'ZH' | 'JA' | 'KO' | 'ES';
|
|
172
|
+
ttsSpeed?: number;
|
|
173
|
+
audioFilePath?: string;
|
|
174
|
+
avatarModel?: 'avatar-standard' | 'avatar-pro';
|
|
175
|
+
background?: boolean;
|
|
176
|
+
confirm?: boolean;
|
|
177
|
+
}>;
|
|
178
|
+
export declare const generateMotionTransfer: Operation<{
|
|
179
|
+
projectId: string;
|
|
180
|
+
sourceVideoAssetId: string;
|
|
181
|
+
targetImageAssetId: string;
|
|
182
|
+
motionModel?: 'kling-mc-std' | 'kling-mc-pro';
|
|
183
|
+
characterOrientation?: 'video' | 'image';
|
|
184
|
+
prompt?: string;
|
|
185
|
+
background?: boolean;
|
|
186
|
+
confirm?: boolean;
|
|
187
|
+
}>;
|
|
188
|
+
export declare const getGenerationStatus: Operation<{
|
|
189
|
+
generationId: string;
|
|
190
|
+
}>;
|
|
191
|
+
export declare const listGenerations: Operation<{
|
|
192
|
+
projectId?: string;
|
|
193
|
+
status?: 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled';
|
|
194
|
+
limit?: number;
|
|
195
|
+
}>;
|
|
196
|
+
export declare const getTimeline: Operation<{
|
|
197
|
+
projectId: string;
|
|
198
|
+
}>;
|
|
199
|
+
export declare const addClipToTimeline: Operation<{
|
|
200
|
+
projectId: string;
|
|
201
|
+
assetId: string;
|
|
202
|
+
trackId?: string;
|
|
203
|
+
startFrame?: number;
|
|
204
|
+
sourceInFrame?: number;
|
|
205
|
+
sourceOutFrame?: number;
|
|
206
|
+
}>;
|
|
207
|
+
export declare const reorderClips: Operation<{
|
|
208
|
+
trackId: string;
|
|
209
|
+
clipIds: string[];
|
|
210
|
+
}>;
|
|
211
|
+
export declare const removeClip: Operation<{
|
|
212
|
+
clipId: string;
|
|
213
|
+
}>;
|
|
214
|
+
export declare const exportVideo: Operation<{
|
|
215
|
+
projectId?: string;
|
|
216
|
+
timelineId?: string;
|
|
217
|
+
outputPath: string;
|
|
218
|
+
overwrite?: boolean;
|
|
219
|
+
}>;
|
|
220
|
+
export declare const exportTimelineXml: Operation<{
|
|
221
|
+
projectId?: string;
|
|
222
|
+
timelineId?: string;
|
|
223
|
+
outputPath: string;
|
|
224
|
+
overwrite?: boolean;
|
|
225
|
+
}>;
|
|
226
|
+
export declare const revealFile: Operation<{
|
|
227
|
+
path: string;
|
|
228
|
+
}>;
|
|
229
|
+
export declare const updateProject: Operation<{
|
|
230
|
+
id: string;
|
|
231
|
+
name?: string;
|
|
232
|
+
description?: string;
|
|
233
|
+
}>;
|
|
234
|
+
export declare const deleteProject: Operation<{
|
|
235
|
+
id: string;
|
|
236
|
+
confirm?: boolean;
|
|
237
|
+
}>;
|
|
238
|
+
export declare const getProjectDirectory: Operation<{
|
|
239
|
+
id: string;
|
|
240
|
+
}>;
|
|
241
|
+
export declare const deleteAsset: Operation<{
|
|
242
|
+
id: string;
|
|
243
|
+
}>;
|
|
244
|
+
export declare const renameFolder: Operation<{
|
|
245
|
+
folderId: string;
|
|
246
|
+
name: string;
|
|
247
|
+
}>;
|
|
248
|
+
export declare const deleteFolder: Operation<{
|
|
249
|
+
folderId: string;
|
|
250
|
+
}>;
|
|
251
|
+
export declare const setFolderCover: Operation<{
|
|
252
|
+
folderId: string;
|
|
253
|
+
assetId: string | null;
|
|
254
|
+
}>;
|
|
255
|
+
export declare const updateCharacter: Operation<{
|
|
256
|
+
characterId: string;
|
|
257
|
+
name?: string;
|
|
258
|
+
description?: string;
|
|
259
|
+
style?: 'realistic' | 'anime' | 'pixar' | 'comic-book';
|
|
260
|
+
}>;
|
|
261
|
+
export declare const deleteCharacter: Operation<{
|
|
262
|
+
characterId: string;
|
|
263
|
+
}>;
|
|
264
|
+
export declare const updateEnvironment: Operation<{
|
|
265
|
+
environmentId: string;
|
|
266
|
+
name?: string;
|
|
267
|
+
description?: string;
|
|
268
|
+
style?: 'realistic' | 'anime' | 'pixar' | 'comic-book';
|
|
269
|
+
gridAssetId?: string | null;
|
|
270
|
+
}>;
|
|
271
|
+
export declare const deleteEnvironment: Operation<{
|
|
272
|
+
environmentId: string;
|
|
273
|
+
}>;
|
|
274
|
+
export declare const listStyles: Operation<{
|
|
275
|
+
projectId: string;
|
|
276
|
+
}>;
|
|
277
|
+
export declare const createStyle: Operation<{
|
|
278
|
+
projectId: string;
|
|
279
|
+
name: string;
|
|
280
|
+
description?: string;
|
|
281
|
+
}>;
|
|
282
|
+
export declare const updateStyle: Operation<{
|
|
283
|
+
styleId: string;
|
|
284
|
+
name?: string;
|
|
285
|
+
description?: string;
|
|
286
|
+
imageAssetId?: string | null;
|
|
287
|
+
}>;
|
|
288
|
+
export declare const deleteStyle: Operation<{
|
|
289
|
+
styleId: string;
|
|
290
|
+
}>;
|
|
291
|
+
export declare const updateStoryboard: Operation<{
|
|
292
|
+
storyboardId: string;
|
|
293
|
+
name?: string;
|
|
294
|
+
description?: string;
|
|
295
|
+
}>;
|
|
296
|
+
export declare const deleteStoryboard: Operation<{
|
|
297
|
+
storyboardId: string;
|
|
298
|
+
}>;
|
|
299
|
+
export declare const updateScene: Operation<{
|
|
300
|
+
sceneId: string;
|
|
301
|
+
name?: string;
|
|
302
|
+
position?: number;
|
|
303
|
+
}>;
|
|
304
|
+
export declare const deleteScene: Operation<{
|
|
305
|
+
sceneId: string;
|
|
306
|
+
}>;
|
|
307
|
+
export declare const reorderScenes: Operation<{
|
|
308
|
+
storyboardId: string;
|
|
309
|
+
sceneIds: string[];
|
|
310
|
+
}>;
|
|
311
|
+
export declare const updateFrame: Operation<{
|
|
312
|
+
frameId: string;
|
|
313
|
+
shotLabel?: string;
|
|
314
|
+
notes?: string;
|
|
315
|
+
assetId?: string | null;
|
|
316
|
+
sceneId?: string | null;
|
|
317
|
+
position?: number;
|
|
318
|
+
frameType?: 'first' | 'last' | 'ingredient' | null;
|
|
319
|
+
motionPrompt?: string | null;
|
|
320
|
+
}>;
|
|
321
|
+
export declare const deleteFrame: Operation<{
|
|
322
|
+
frameId: string;
|
|
323
|
+
}>;
|
|
324
|
+
export declare const getPromptingGuide: Operation<{
|
|
325
|
+
topic: string;
|
|
121
326
|
}>;
|
|
122
327
|
export declare const ALL_OPERATIONS: ReadonlyArray<Operation<unknown>>;
|
|
328
|
+
export {};
|
|
123
329
|
//# sourceMappingURL=index.d.ts.map
|