@vanillaskyai/video 0.1.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/CHANGELOG.md +45 -0
- package/LICENSE +201 -0
- package/PUBLIC-API.md +276 -0
- package/README.md +152 -0
- package/SECURITY.md +22 -0
- package/SUPPORT.md +28 -0
- package/bin/vanillasky.js +3 -0
- package/dist/bg-confetti-WNQXS7ZS.js +89 -0
- package/dist/bg-emoji-ETI47GLS.js +150 -0
- package/dist/bg-media-SVUZAMGX.js +99 -0
- package/dist/brand-message-F3RD4P3P.js +253 -0
- package/dist/builtin-server-F7YXRVCH.js +8 -0
- package/dist/catalog-types-BIhSpOWK.d.ts +74 -0
- package/dist/chart-bar-CNSC7BNK.js +304 -0
- package/dist/chart-counter-MCRHKN77.js +299 -0
- package/dist/chart-progress-ring-RMI4A7ZK.js +296 -0
- package/dist/check-runtime.d.ts +15 -0
- package/dist/check-runtime.js +102 -0
- package/dist/chunk-2E6T633S.js +27 -0
- package/dist/chunk-352ZZCET.js +83 -0
- package/dist/chunk-73NTSFFI.js +81 -0
- package/dist/chunk-A2X45FET.js +46 -0
- package/dist/chunk-ABPKM4GK.js +187 -0
- package/dist/chunk-ABZACD4G.js +216 -0
- package/dist/chunk-BCRUUJ6A.js +756 -0
- package/dist/chunk-CHLGW22F.js +3551 -0
- package/dist/chunk-CJ7F2CE6.js +104 -0
- package/dist/chunk-CR7FE7BW.js +109 -0
- package/dist/chunk-E7CL7UPB.js +109 -0
- package/dist/chunk-EE6PK6XC.js +18 -0
- package/dist/chunk-ERY4S6QV.js +385 -0
- package/dist/chunk-EVG2ZYIY.js +125 -0
- package/dist/chunk-FNAEQ7QO.js +155 -0
- package/dist/chunk-FQ47WXAJ.js +38 -0
- package/dist/chunk-FSG2PYWG.js +336 -0
- package/dist/chunk-GHJEAP4O.js +504 -0
- package/dist/chunk-GRMUV7QY.js +262 -0
- package/dist/chunk-IFOW65Z6.js +205 -0
- package/dist/chunk-IXCUY3B3.js +786 -0
- package/dist/chunk-L5BTTCZV.js +97 -0
- package/dist/chunk-LMG3GHLL.js +107 -0
- package/dist/chunk-OOPIETLW.js +101 -0
- package/dist/chunk-P22HHFDK.js +43 -0
- package/dist/chunk-QAAO7OAY.js +19 -0
- package/dist/chunk-S7HFLYNN.js +35 -0
- package/dist/chunk-SPVTJH3F.js +24 -0
- package/dist/chunk-W2XJKG6C.js +3177 -0
- package/dist/chunk-XB7LH4J2.js +301 -0
- package/dist/chunk-XGRA2MUV.js +242 -0
- package/dist/chunk-XTOXFMLM.js +105 -0
- package/dist/chunk-YC5MFXA5.js +132 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +1681 -0
- package/dist/compose-video-CN3VSWST.js +13 -0
- package/dist/cta-logo-SVA5GP2A.js +209 -0
- package/dist/cta-media-E7VLLK42.js +215 -0
- package/dist/events-_wfjbmEp.d.ts +81 -0
- package/dist/incoming-call-62MFZL3Z.js +320 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +14 -0
- package/dist/infographic-before-after-AXCDAWND.js +460 -0
- package/dist/infographic-feature-list-GW5GUE6O.js +266 -0
- package/dist/infographic-problem-solution-7NURJANA.js +340 -0
- package/dist/infographic-stat-row-J7IZR6ZN.js +241 -0
- package/dist/infographic-steps-VSZM6F5M.js +400 -0
- package/dist/kit-BMNcHqa9.d.ts +79 -0
- package/dist/prompt-input-LOUCRXCY.js +236 -0
- package/dist/react.d.ts +81 -0
- package/dist/react.js +835 -0
- package/dist/reaction-QG4CYZLQ.js +119 -0
- package/dist/server.d.ts +141 -0
- package/dist/server.js +498 -0
- package/dist/showcase-code-RUTFZR3H.js +351 -0
- package/dist/showcase-phone-6CP6XEU5.js +272 -0
- package/dist/showcase-terminal-MGAEQWPR.js +306 -0
- package/dist/showcase-web-Y4W2HVRJ.js +390 -0
- package/dist/social-conversation-75SD2637.js +695 -0
- package/dist/social-milestone-XI2QE5BO.js +292 -0
- package/dist/social-notification-2UOHQCUY.js +244 -0
- package/dist/social-review-stack-FDYZGZTJ.js +239 -0
- package/dist/social-testimonial-OQ7N52GJ.js +284 -0
- package/dist/social-tweet-5OLCNPPC.js +295 -0
- package/dist/state-DZcKuS32.d.ts +3 -0
- package/dist/system-prompt-A6UXNTPK.js +8 -0
- package/dist/template-catalog.d.ts +24 -0
- package/dist/template-catalog.js +6 -0
- package/dist/templates.d.ts +25 -0
- package/dist/templates.js +19 -0
- package/dist/test.d.ts +149 -0
- package/dist/test.js +272 -0
- package/dist/text-stream-6XHC7J47.js +10 -0
- package/dist/types-B-PZR6G_.d.ts +208 -0
- package/dist/validate-T7GBU2YF.js +8 -0
- package/docs/agent-integration.md +39 -0
- package/docs/architecture.md +84 -0
- package/docs/branding-and-personalization.md +87 -0
- package/docs/concepts.md +106 -0
- package/docs/custom-templates.md +329 -0
- package/docs/customization.md +141 -0
- package/docs/errors.md +70 -0
- package/docs/getting-started.md +111 -0
- package/docs/input-and-first-scene.md +41 -0
- package/docs/integrate-nextjs.md +79 -0
- package/docs/media-and-audio.md +69 -0
- package/docs/motion-and-effects.md +107 -0
- package/docs/persistence.md +95 -0
- package/docs/production.md +122 -0
- package/docs/prompt-and-input.md +185 -0
- package/docs/provider-integration.md +115 -0
- package/docs/reference/protocol.md +96 -0
- package/docs/reference/provider-adapters.md +158 -0
- package/docs/responsive-orientation.md +37 -0
- package/docs/security.md +38 -0
- package/docs/streaming-protocol.md +15 -0
- package/docs/testing.md +137 -0
- package/docs/use-cases.md +59 -0
- package/examples/custom-template/README.md +19 -0
- package/examples/custom-template/minimal-text.tsx +82 -0
- package/examples/custom-template/structured-data.tsx +104 -0
- package/examples/custom-template/supplied-media.tsx +92 -0
- package/examples/nextjs-quickstart/.env.example +2 -0
- package/examples/nextjs-quickstart/README.md +22 -0
- package/examples/nextjs-quickstart/next-env.d.ts +4 -0
- package/examples/nextjs-quickstart/package.json +24 -0
- package/examples/nextjs-quickstart/src/app/api/video/route.ts +22 -0
- package/examples/nextjs-quickstart/src/app/layout.tsx +5 -0
- package/examples/nextjs-quickstart/src/app/page.tsx +31 -0
- package/examples/nextjs-quickstart/tsconfig.json +26 -0
- package/package.json +167 -0
- package/registry/items/backgrounds.json +52 -0
- package/registry/items/barChart.json +237 -0
- package/registry/items/beforeAfter.json +180 -0
- package/registry/items/bigNumber.json +225 -0
- package/registry/items/brandMessage.json +158 -0
- package/registry/items/cardList.json +206 -0
- package/registry/items/chatMessenger.json +151 -0
- package/registry/items/chatWhatsapp.json +151 -0
- package/registry/items/codeEditor.json +184 -0
- package/registry/items/confetti.json +107 -0
- package/registry/items/ctaLogo.json +160 -0
- package/registry/items/ctaMedia.json +193 -0
- package/registry/items/emojiBurst.json +101 -0
- package/registry/items/incomingCall.json +170 -0
- package/registry/items/media.json +179 -0
- package/registry/items/milestone.json +205 -0
- package/registry/items/motion.json +45 -0
- package/registry/items/notification.json +182 -0
- package/registry/items/phoneMockup.json +254 -0
- package/registry/items/problemSolution.json +186 -0
- package/registry/items/progressRing.json +199 -0
- package/registry/items/promptInput.json +148 -0
- package/registry/items/reaction.json +170 -0
- package/registry/items/reviewStack.json +224 -0
- package/registry/items/steps.json +207 -0
- package/registry/items/template-context.json +31 -0
- package/registry/items/terminal.json +212 -0
- package/registry/items/testimonial.json +164 -0
- package/registry/items/theme.json +47 -0
- package/registry/items/tripleStats.json +228 -0
- package/registry/items/tweet.json +203 -0
- package/registry/items/typography.json +47 -0
- package/registry/items/webMockup.json +273 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SceneBackground
|
|
3
|
+
} from "./chunk-IFOW65Z6.js";
|
|
4
|
+
import {
|
|
5
|
+
TemplateText
|
|
6
|
+
} from "./chunk-BCRUUJ6A.js";
|
|
7
|
+
import "./chunk-L5BTTCZV.js";
|
|
8
|
+
import "./chunk-ABZACD4G.js";
|
|
9
|
+
import "./chunk-XTOXFMLM.js";
|
|
10
|
+
import {
|
|
11
|
+
resolveTokens
|
|
12
|
+
} from "./chunk-FNAEQ7QO.js";
|
|
13
|
+
|
|
14
|
+
// src/visual-system/scene-templates/reaction.tsx
|
|
15
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
16
|
+
var REACTION_TAGS = [
|
|
17
|
+
"launch",
|
|
18
|
+
"productLaunch",
|
|
19
|
+
"goLive",
|
|
20
|
+
"shipIt",
|
|
21
|
+
"wow",
|
|
22
|
+
"excited",
|
|
23
|
+
"happy",
|
|
24
|
+
"success",
|
|
25
|
+
"done",
|
|
26
|
+
"panic",
|
|
27
|
+
"waiting",
|
|
28
|
+
"celebration",
|
|
29
|
+
"cheers",
|
|
30
|
+
"applause",
|
|
31
|
+
"highFive",
|
|
32
|
+
"teamwork",
|
|
33
|
+
"fail",
|
|
34
|
+
"confused",
|
|
35
|
+
"thinking",
|
|
36
|
+
"thanks",
|
|
37
|
+
"letsGo",
|
|
38
|
+
"manual",
|
|
39
|
+
"office",
|
|
40
|
+
"meeting",
|
|
41
|
+
"deadline",
|
|
42
|
+
"coding",
|
|
43
|
+
"debugging",
|
|
44
|
+
"computer",
|
|
45
|
+
"startup",
|
|
46
|
+
"presentation",
|
|
47
|
+
"sales",
|
|
48
|
+
"growth",
|
|
49
|
+
"money"
|
|
50
|
+
];
|
|
51
|
+
var ReactionTemplate = ({
|
|
52
|
+
variables,
|
|
53
|
+
style,
|
|
54
|
+
progress,
|
|
55
|
+
motionProgress = progress,
|
|
56
|
+
beatIntensity,
|
|
57
|
+
width,
|
|
58
|
+
height,
|
|
59
|
+
textArchetype,
|
|
60
|
+
safeZone,
|
|
61
|
+
sceneDuration,
|
|
62
|
+
isPlaying = true
|
|
63
|
+
}) => {
|
|
64
|
+
const { font, foreground } = resolveTokens(style);
|
|
65
|
+
const color = foreground;
|
|
66
|
+
const mediaUrl = String(variables.mediaUrl || "");
|
|
67
|
+
const hasClip = mediaUrl.trim().length > 0;
|
|
68
|
+
return /* @__PURE__ */ jsxs("div", { style: { width, height, backgroundColor: "#000", position: "relative", overflow: "hidden", fontFamily: font }, children: [
|
|
69
|
+
/* @__PURE__ */ jsx(
|
|
70
|
+
SceneBackground,
|
|
71
|
+
{
|
|
72
|
+
style,
|
|
73
|
+
progress,
|
|
74
|
+
sceneDuration,
|
|
75
|
+
width,
|
|
76
|
+
height,
|
|
77
|
+
mediaUrl,
|
|
78
|
+
mediaType: hasClip ? "video" : "gradient",
|
|
79
|
+
mediaPoster: String(variables.mediaPoster || ""),
|
|
80
|
+
backgroundEffect: "slow-zoom-in",
|
|
81
|
+
seed: String(variables.texts || ""),
|
|
82
|
+
isPlaying,
|
|
83
|
+
beatIntensity
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
/* @__PURE__ */ jsx(
|
|
87
|
+
"div",
|
|
88
|
+
{
|
|
89
|
+
style: {
|
|
90
|
+
position: "absolute",
|
|
91
|
+
inset: 0,
|
|
92
|
+
background: "linear-gradient(180deg, rgba(0,0,0,.18), rgba(0,0,0,.08) 45%, rgba(0,0,0,.5))",
|
|
93
|
+
pointerEvents: "none"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
),
|
|
97
|
+
/* @__PURE__ */ jsx(
|
|
98
|
+
TemplateText,
|
|
99
|
+
{
|
|
100
|
+
motionProgress,
|
|
101
|
+
typeTreatment: resolveTokens(style).preset.type,
|
|
102
|
+
archetype: textArchetype || "slam",
|
|
103
|
+
text: String(variables.texts || "Still editing manually?"),
|
|
104
|
+
progress,
|
|
105
|
+
width,
|
|
106
|
+
height,
|
|
107
|
+
safeZone,
|
|
108
|
+
font,
|
|
109
|
+
color,
|
|
110
|
+
sceneDuration: sceneDuration ?? 3,
|
|
111
|
+
beatIntensity
|
|
112
|
+
}
|
|
113
|
+
)
|
|
114
|
+
] });
|
|
115
|
+
};
|
|
116
|
+
export {
|
|
117
|
+
REACTION_TAGS,
|
|
118
|
+
ReactionTemplate
|
|
119
|
+
};
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { l as VideoGenerationContext, m as VideoPlanner, n as VideoRequest, j as VideoCapabilities, d as VideoInput, a as VideoAudio, o as VideoSceneValidator, p as VideoTemplatePacing, q as VideoSnapshotRetention, r as VideoResumeCursor, s as VideoSceneValidationContext, f as VideoScene } from './types-B-PZR6G_.js';
|
|
2
|
+
import { b as VideoFinishReason, a as VideoWarning, V as VideoEvent } from './events-_wfjbmEp.js';
|
|
3
|
+
export { c as VideoWarningCategory } from './events-_wfjbmEp.js';
|
|
4
|
+
import { S as SceneTemplateMetadata } from './catalog-types-BIhSpOWK.js';
|
|
5
|
+
|
|
6
|
+
interface VideoProviderUsage {
|
|
7
|
+
inputTokens?: number;
|
|
8
|
+
outputTokens?: number;
|
|
9
|
+
totalTokens?: number;
|
|
10
|
+
cachedInputTokens?: number;
|
|
11
|
+
cacheWriteTokens?: number;
|
|
12
|
+
reasoningTokens?: number;
|
|
13
|
+
/** Bounded provider-native usage. Present only with includeRawProviderData. */
|
|
14
|
+
raw?: unknown;
|
|
15
|
+
}
|
|
16
|
+
interface VideoGenerationSummary {
|
|
17
|
+
finishReason?: VideoFinishReason;
|
|
18
|
+
usage?: VideoProviderUsage;
|
|
19
|
+
/** Bounded provider-native metadata. Present only with includeRawProviderData. */
|
|
20
|
+
providerMetadata?: unknown;
|
|
21
|
+
requestedModelId?: string;
|
|
22
|
+
resolvedModelId?: string;
|
|
23
|
+
timeToFirstSceneMs?: number;
|
|
24
|
+
totalDurationMs: number;
|
|
25
|
+
acceptedSceneCount: number;
|
|
26
|
+
rejectedSceneCount: number;
|
|
27
|
+
/** Duration of the committed deterministic video. maxDurationSec remains a ceiling, not a target. */
|
|
28
|
+
videoDurationSec: number;
|
|
29
|
+
warnings: VideoWarning[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
interface TextDeltaVideoPlannerOptions {
|
|
33
|
+
/** Capture provider credentials in this server-only closure. */
|
|
34
|
+
streamText: (context: VideoGenerationContext) => AsyncIterable<string> | TextDeltaVideoSource;
|
|
35
|
+
/** Retain bounded provider-native usage and metadata on the server summary. */
|
|
36
|
+
includeRawProviderData?: boolean;
|
|
37
|
+
}
|
|
38
|
+
type Awaitable<T> = T | PromiseLike<T>;
|
|
39
|
+
type ProviderFinishReason = string | {
|
|
40
|
+
unified?: string;
|
|
41
|
+
raw?: string;
|
|
42
|
+
};
|
|
43
|
+
interface TextDeltaVideoSource {
|
|
44
|
+
textStream: AsyncIterable<string>;
|
|
45
|
+
/** The provider SDK's normalized finish reason, when available. */
|
|
46
|
+
finishReason?: Awaitable<ProviderFinishReason | undefined>;
|
|
47
|
+
/** The provider's original finish reason, when available. */
|
|
48
|
+
rawFinishReason?: Awaitable<string | undefined>;
|
|
49
|
+
/** Vercel AI SDK usage. Both current and prior structural shapes are accepted. */
|
|
50
|
+
usage?: Awaitable<unknown>;
|
|
51
|
+
totalUsage?: Awaitable<unknown>;
|
|
52
|
+
providerMetadata?: Awaitable<unknown>;
|
|
53
|
+
warnings?: Awaitable<unknown>;
|
|
54
|
+
response?: Awaitable<unknown>;
|
|
55
|
+
finalStep?: Awaitable<unknown>;
|
|
56
|
+
/** Compatibility with older structural adapters. Prefer finalStep. */
|
|
57
|
+
lastStep?: Awaitable<unknown>;
|
|
58
|
+
steps?: Awaitable<unknown>;
|
|
59
|
+
/** Optional provider-neutral model hints for native adapters. */
|
|
60
|
+
requestedModelId?: Awaitable<string | undefined>;
|
|
61
|
+
resolvedModelId?: Awaitable<string | undefined>;
|
|
62
|
+
modelId?: Awaitable<string | undefined>;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
interface VideoStreamHandlerOptions {
|
|
66
|
+
generate: VideoPlanner;
|
|
67
|
+
systemPrompt?: string | ((context: {
|
|
68
|
+
request: VideoRequest;
|
|
69
|
+
capabilities?: VideoCapabilities;
|
|
70
|
+
}) => string);
|
|
71
|
+
selectAudio?: (input: VideoInput) => VideoAudio | undefined;
|
|
72
|
+
createRunId?: (request: VideoRequest) => string;
|
|
73
|
+
/** Browser origins allowed to call this customer-owned route. Omit for same-origin use. */
|
|
74
|
+
allowedOrigins?: string[];
|
|
75
|
+
/** Authenticate before reading the prompt body, or explicitly opt out for a non-public in-process/test route. */
|
|
76
|
+
authorize: ((request: Request) => boolean | Promise<boolean>) | "none";
|
|
77
|
+
maxBodyBytes?: number;
|
|
78
|
+
heartbeatMs?: number | false;
|
|
79
|
+
/** Private full-fidelity errors. Callback failures never affect the response. */
|
|
80
|
+
onError?: (error: Error) => unknown;
|
|
81
|
+
/** Safe warnings, exactly once per generated warning. */
|
|
82
|
+
onWarning?: (warning: VideoWarning) => unknown;
|
|
83
|
+
/** Server-only summary, exactly once and only after response.complete. */
|
|
84
|
+
onComplete?: (summary: VideoGenerationSummary) => unknown;
|
|
85
|
+
/** Drop malformed generated parts by default, or preserve fail-fast behavior. */
|
|
86
|
+
invalidPartBehavior?: "drop" | "fail";
|
|
87
|
+
/** Allow credentialed cross-origin requests from explicit allowedOrigins. */
|
|
88
|
+
allowCredentials?: boolean;
|
|
89
|
+
/** Templates and extensions implemented by this customer deployment. */
|
|
90
|
+
supportedCapabilities?: VideoCapabilities;
|
|
91
|
+
/** Validate template fields and grounding before forwarding a generated scene. */
|
|
92
|
+
validateScene?: VideoSceneValidator;
|
|
93
|
+
/** Resolve trusted pacing metadata for negotiated templates. */
|
|
94
|
+
getTemplatePacing?: (templateId: string) => VideoTemplatePacing | undefined;
|
|
95
|
+
/** Explicitly retain selected bounded source metadata in completed snapshots. */
|
|
96
|
+
snapshotRetention?: VideoSnapshotRetention;
|
|
97
|
+
/** Read events after a cursor from customer-owned durable storage. */
|
|
98
|
+
replay?: (cursor: VideoResumeCursor, context: {
|
|
99
|
+
request: VideoRequest;
|
|
100
|
+
signal: AbortSignal;
|
|
101
|
+
}) => AsyncIterable<VideoEvent>;
|
|
102
|
+
}
|
|
103
|
+
type VideoStreamHandler = (request: Request) => Promise<Response>;
|
|
104
|
+
|
|
105
|
+
interface ServerTemplateRegistry {
|
|
106
|
+
readonly capabilities: VideoCapabilities;
|
|
107
|
+
getTemplateMetadata(id: string): SceneTemplateMetadata | undefined;
|
|
108
|
+
listTemplateMetadata(): SceneTemplateMetadata[];
|
|
109
|
+
}
|
|
110
|
+
declare function createServerTemplateRegistry(options: {
|
|
111
|
+
templates: readonly SceneTemplateMetadata[];
|
|
112
|
+
}): ServerTemplateRegistry;
|
|
113
|
+
|
|
114
|
+
declare function createTemplateSceneValidator(options: {
|
|
115
|
+
kit: ServerTemplateRegistry;
|
|
116
|
+
/** Authorize an app-approved URL in addition to URLs supplied with the request. */
|
|
117
|
+
allowMediaUrl?: (url: string, context: VideoSceneValidationContext & {
|
|
118
|
+
scene: VideoScene;
|
|
119
|
+
variable: string;
|
|
120
|
+
}) => boolean;
|
|
121
|
+
}): VideoSceneValidator;
|
|
122
|
+
|
|
123
|
+
interface VideoHandlerOptions extends Omit<VideoStreamHandlerOptions, "generate" | "systemPrompt" | "supportedCapabilities" | "validateScene" | "getTemplatePacing"> {
|
|
124
|
+
/** Customer-owned templates that replace matching built-ins and add new IDs. */
|
|
125
|
+
templates?: ServerTemplateRegistry;
|
|
126
|
+
/** App-owned provider adapter. Choose any model per request and keep provider clients and credentials in this closure. */
|
|
127
|
+
streamText: TextDeltaVideoPlannerOptions["streamText"];
|
|
128
|
+
/** Opt in to bounded provider-native usage and metadata in onComplete. */
|
|
129
|
+
includeRawProviderData?: boolean;
|
|
130
|
+
/** Additional video-direction rules prepended to the generated trusted-template catalog. */
|
|
131
|
+
basePrompt?: string;
|
|
132
|
+
/** Authorize an app-approved media URL in addition to URLs supplied in the request. */
|
|
133
|
+
allowMediaUrl?: Parameters<typeof createTemplateSceneValidator>[0]["allowMediaUrl"];
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Build the secure route for a template kit while leaving provider, model,
|
|
137
|
+
* credentials, authentication, and deployment ownership with the app.
|
|
138
|
+
*/
|
|
139
|
+
declare function createVideoHandler(options: VideoHandlerOptions): VideoStreamHandler;
|
|
140
|
+
|
|
141
|
+
export { SceneTemplateMetadata as ServerTemplateMetadata, type ServerTemplateRegistry, VideoFinishReason, type VideoGenerationSummary, type VideoHandlerOptions, type VideoProviderUsage, VideoWarning, createServerTemplateRegistry, createVideoHandler };
|