@koda-sl/baker-cli 0.39.29 → 0.66.2
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 +1754 -7
- package/canvas/avocado-tutorial.json +89 -0
- package/canvas/hello-world-composition/index.html +83 -0
- package/canvas/hello-world-composition/meta.json +41 -0
- package/canvas/hello-world-overlay.json +37 -0
- package/canvas/phone-scroll-composition/index.html +141 -0
- package/canvas/phone-scroll-composition/meta.json +39 -0
- package/canvas/tiktok-captions-composition/index.html +126 -0
- package/canvas/tiktok-captions-composition/meta.json +46 -0
- package/canvas/video-overlay-composition/index.html +239 -0
- package/canvas/video-overlay-composition/meta.json +29 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/ads/meta/creatives.js +1 -1
- package/dist/commands/canvas/catalog.d.ts +2 -0
- package/dist/commands/canvas/catalog.d.ts.map +1 -0
- package/dist/commands/canvas/catalog.js +13 -0
- package/dist/commands/canvas/catalog.js.map +1 -0
- package/dist/commands/canvas/index.d.ts +2 -0
- package/dist/commands/canvas/index.d.ts.map +1 -0
- package/dist/commands/canvas/index.js +32 -0
- package/dist/commands/canvas/index.js.map +1 -0
- package/dist/commands/canvas/inspect.d.ts +16 -0
- package/dist/commands/canvas/inspect.d.ts.map +1 -0
- package/dist/commands/canvas/inspect.js +115 -0
- package/dist/commands/canvas/inspect.js.map +1 -0
- package/dist/commands/canvas/run.d.ts +24 -0
- package/dist/commands/canvas/run.d.ts.map +1 -0
- package/dist/commands/canvas/run.js +56 -0
- package/dist/commands/canvas/run.js.map +1 -0
- package/dist/commands/canvas/scaffold-static-ad.d.ts +40 -0
- package/dist/commands/canvas/scaffold-static-ad.d.ts.map +1 -0
- package/dist/commands/canvas/scaffold-static-ad.js +265 -0
- package/dist/commands/canvas/scaffold-static-ad.js.map +1 -0
- package/dist/commands/canvas/scaffold-video.d.ts +44 -0
- package/dist/commands/canvas/scaffold-video.d.ts.map +1 -0
- package/dist/commands/canvas/scaffold-video.js +235 -0
- package/dist/commands/canvas/scaffold-video.js.map +1 -0
- package/dist/commands/canvas/validate.d.ts +8 -0
- package/dist/commands/canvas/validate.d.ts.map +1 -0
- package/dist/commands/canvas/validate.js +37 -0
- package/dist/commands/canvas/validate.js.map +1 -0
- package/dist/commands/images/find.d.ts +1 -1
- package/dist/commands/images/find.d.ts.map +1 -1
- package/dist/commands/images/find.js +12 -3
- package/dist/commands/images/find.js.map +1 -1
- package/dist/commands/images/google.d.ts +1 -1
- package/dist/commands/images/google.d.ts.map +1 -1
- package/dist/commands/images/google.js +12 -3
- package/dist/commands/images/google.js.map +1 -1
- package/dist/commands/images/stock.d.ts +1 -1
- package/dist/commands/images/stock.d.ts.map +1 -1
- package/dist/commands/images/stock.js +7 -3
- package/dist/commands/images/stock.js.map +1 -1
- package/dist/engine/client/backend-client.d.ts +50 -0
- package/dist/engine/client/backend-client.d.ts.map +1 -0
- package/dist/engine/client/backend-client.js +20 -0
- package/dist/engine/client/backend-client.js.map +1 -0
- package/dist/engine/client/env.d.ts +7 -0
- package/dist/engine/client/env.d.ts.map +1 -0
- package/dist/engine/client/env.js +18 -0
- package/dist/engine/client/env.js.map +1 -0
- package/dist/engine/client/http.d.ts +56 -0
- package/dist/engine/client/http.d.ts.map +1 -0
- package/dist/engine/client/http.js +168 -0
- package/dist/engine/client/http.js.map +1 -0
- package/dist/engine/engine/cache-key.d.ts +19 -0
- package/dist/engine/engine/cache-key.d.ts.map +1 -0
- package/dist/engine/engine/cache-key.js +33 -0
- package/dist/engine/engine/cache-key.js.map +1 -0
- package/dist/engine/engine/canonical.d.ts +14 -0
- package/dist/engine/engine/canonical.d.ts.map +1 -0
- package/dist/engine/engine/canonical.js +53 -0
- package/dist/engine/engine/canonical.js.map +1 -0
- package/dist/engine/engine/composition-hash.d.ts +14 -0
- package/dist/engine/engine/composition-hash.d.ts.map +1 -0
- package/dist/engine/engine/composition-hash.js +51 -0
- package/dist/engine/engine/composition-hash.js.map +1 -0
- package/dist/engine/engine/composition-meta.d.ts +77 -0
- package/dist/engine/engine/composition-meta.d.ts.map +1 -0
- package/dist/engine/engine/composition-meta.js +199 -0
- package/dist/engine/engine/composition-meta.js.map +1 -0
- package/dist/engine/engine/context.d.ts +16 -0
- package/dist/engine/engine/context.d.ts.map +1 -0
- package/dist/engine/engine/context.js +2 -0
- package/dist/engine/engine/context.js.map +1 -0
- package/dist/engine/engine/define.d.ts +69 -0
- package/dist/engine/engine/define.d.ts.map +1 -0
- package/dist/engine/engine/define.js +9 -0
- package/dist/engine/engine/define.js.map +1 -0
- package/dist/engine/engine/didyoumean.d.ts +2 -0
- package/dist/engine/engine/didyoumean.d.ts.map +1 -0
- package/dist/engine/engine/didyoumean.js +58 -0
- package/dist/engine/engine/didyoumean.js.map +1 -0
- package/dist/engine/engine/errors.d.ts +41 -0
- package/dist/engine/engine/errors.d.ts.map +1 -0
- package/dist/engine/engine/errors.js +45 -0
- package/dist/engine/engine/errors.js.map +1 -0
- package/dist/engine/engine/executor.d.ts +72 -0
- package/dist/engine/engine/executor.d.ts.map +1 -0
- package/dist/engine/engine/executor.js +445 -0
- package/dist/engine/engine/executor.js.map +1 -0
- package/dist/engine/engine/refs.d.ts +12 -0
- package/dist/engine/engine/refs.d.ts.map +1 -0
- package/dist/engine/engine/refs.js +48 -0
- package/dist/engine/engine/refs.js.map +1 -0
- package/dist/engine/engine/registry.d.ts +11 -0
- package/dist/engine/engine/registry.d.ts.map +1 -0
- package/dist/engine/engine/registry.js +26 -0
- package/dist/engine/engine/registry.js.map +1 -0
- package/dist/engine/engine/scheduler.d.ts +10 -0
- package/dist/engine/engine/scheduler.d.ts.map +1 -0
- package/dist/engine/engine/scheduler.js +89 -0
- package/dist/engine/engine/scheduler.js.map +1 -0
- package/dist/engine/engine/validator.d.ts +31 -0
- package/dist/engine/engine/validator.d.ts.map +1 -0
- package/dist/engine/engine/validator.js +501 -0
- package/dist/engine/engine/validator.js.map +1 -0
- package/dist/engine/index.d.ts +33 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +104 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/lib/ulid.d.ts +3 -0
- package/dist/engine/lib/ulid.d.ts.map +1 -0
- package/dist/engine/lib/ulid.js +36 -0
- package/dist/engine/lib/ulid.js.map +1 -0
- package/dist/engine/models/canvas-ad-params.test.d.ts +2 -0
- package/dist/engine/models/canvas-ad-params.test.d.ts.map +1 -0
- package/dist/engine/models/canvas-ad-params.test.js +60 -0
- package/dist/engine/models/canvas-ad-params.test.js.map +1 -0
- package/dist/engine/models/registry.d.ts +63 -0
- package/dist/engine/models/registry.d.ts.map +1 -0
- package/dist/engine/models/registry.js +432 -0
- package/dist/engine/models/registry.js.map +1 -0
- package/dist/engine/models/validateParams.d.ts +38 -0
- package/dist/engine/models/validateParams.d.ts.map +1 -0
- package/dist/engine/models/validateParams.js +166 -0
- package/dist/engine/models/validateParams.js.map +1 -0
- package/dist/engine/nodes/ingest.d.ts +113 -0
- package/dist/engine/nodes/ingest.d.ts.map +1 -0
- package/dist/engine/nodes/ingest.js +555 -0
- package/dist/engine/nodes/ingest.js.map +1 -0
- package/dist/engine/nodes/ingest.svg.test.d.ts +2 -0
- package/dist/engine/nodes/ingest.svg.test.d.ts.map +1 -0
- package/dist/engine/nodes/ingest.svg.test.js +30 -0
- package/dist/engine/nodes/ingest.svg.test.js.map +1 -0
- package/dist/engine/nodes/local/audioTimeline.d.ts +82 -0
- package/dist/engine/nodes/local/audioTimeline.d.ts.map +1 -0
- package/dist/engine/nodes/local/audioTimeline.js +97 -0
- package/dist/engine/nodes/local/audioTimeline.js.map +1 -0
- package/dist/engine/nodes/local/ffmpeg.d.ts +56 -0
- package/dist/engine/nodes/local/ffmpeg.d.ts.map +1 -0
- package/dist/engine/nodes/local/ffmpeg.js +50 -0
- package/dist/engine/nodes/local/ffmpeg.js.map +1 -0
- package/dist/engine/nodes/local/fontSpecimen.d.ts +50 -0
- package/dist/engine/nodes/local/fontSpecimen.d.ts.map +1 -0
- package/dist/engine/nodes/local/fontSpecimen.js +198 -0
- package/dist/engine/nodes/local/fontSpecimen.js.map +1 -0
- package/dist/engine/nodes/local/hyperframe-snapshot.d.ts +116 -0
- package/dist/engine/nodes/local/hyperframe-snapshot.d.ts.map +1 -0
- package/dist/engine/nodes/local/hyperframe-snapshot.js +230 -0
- package/dist/engine/nodes/local/hyperframe-snapshot.js.map +1 -0
- package/dist/engine/nodes/local/hyperframe.d.ts +123 -0
- package/dist/engine/nodes/local/hyperframe.d.ts.map +1 -0
- package/dist/engine/nodes/local/hyperframe.js +367 -0
- package/dist/engine/nodes/local/hyperframe.js.map +1 -0
- package/dist/engine/nodes/local/imagemagick.d.ts +56 -0
- package/dist/engine/nodes/local/imagemagick.d.ts.map +1 -0
- package/dist/engine/nodes/local/imagemagick.js +71 -0
- package/dist/engine/nodes/local/imagemagick.js.map +1 -0
- package/dist/engine/nodes/local/lib/assets.d.ts +20 -0
- package/dist/engine/nodes/local/lib/assets.d.ts.map +1 -0
- package/dist/engine/nodes/local/lib/assets.js +40 -0
- package/dist/engine/nodes/local/lib/assets.js.map +1 -0
- package/dist/engine/nodes/local/lib/cli-runner.d.ts +78 -0
- package/dist/engine/nodes/local/lib/cli-runner.d.ts.map +1 -0
- package/dist/engine/nodes/local/lib/cli-runner.js +254 -0
- package/dist/engine/nodes/local/lib/cli-runner.js.map +1 -0
- package/dist/engine/nodes/local/lib/ffmpeg.d.ts +23 -0
- package/dist/engine/nodes/local/lib/ffmpeg.d.ts.map +1 -0
- package/dist/engine/nodes/local/lib/ffmpeg.js +75 -0
- package/dist/engine/nodes/local/lib/ffmpeg.js.map +1 -0
- package/dist/engine/nodes/local/lib/hyperframe-errors.d.ts +2 -0
- package/dist/engine/nodes/local/lib/hyperframe-errors.d.ts.map +1 -0
- package/dist/engine/nodes/local/lib/hyperframe-errors.js +47 -0
- package/dist/engine/nodes/local/lib/hyperframe-errors.js.map +1 -0
- package/dist/engine/nodes/local/lib/templating.d.ts +22 -0
- package/dist/engine/nodes/local/lib/templating.d.ts.map +1 -0
- package/dist/engine/nodes/local/lib/templating.js +85 -0
- package/dist/engine/nodes/local/lib/templating.js.map +1 -0
- package/dist/engine/nodes/local/text.d.ts +6 -0
- package/dist/engine/nodes/local/text.d.ts.map +1 -0
- package/dist/engine/nodes/local/text.js +15 -0
- package/dist/engine/nodes/local/text.js.map +1 -0
- package/dist/engine/nodes/remote/delegate.d.ts +25 -0
- package/dist/engine/nodes/remote/delegate.d.ts.map +1 -0
- package/dist/engine/nodes/remote/delegate.js +160 -0
- package/dist/engine/nodes/remote/delegate.js.map +1 -0
- package/dist/engine/nodes/remote/dialogue.d.ts +34 -0
- package/dist/engine/nodes/remote/dialogue.d.ts.map +1 -0
- package/dist/engine/nodes/remote/dialogue.js +54 -0
- package/dist/engine/nodes/remote/dialogue.js.map +1 -0
- package/dist/engine/nodes/remote/image.d.ts +42 -0
- package/dist/engine/nodes/remote/image.d.ts.map +1 -0
- package/dist/engine/nodes/remote/image.js +43 -0
- package/dist/engine/nodes/remote/image.js.map +1 -0
- package/dist/engine/nodes/remote/imageAspectAdapt.d.ts +30 -0
- package/dist/engine/nodes/remote/imageAspectAdapt.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageAspectAdapt.js +42 -0
- package/dist/engine/nodes/remote/imageAspectAdapt.js.map +1 -0
- package/dist/engine/nodes/remote/imageBackgroundRemove.d.ts +39 -0
- package/dist/engine/nodes/remote/imageBackgroundRemove.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageBackgroundRemove.js +37 -0
- package/dist/engine/nodes/remote/imageBackgroundRemove.js.map +1 -0
- package/dist/engine/nodes/remote/imageDescribe.d.ts +29 -0
- package/dist/engine/nodes/remote/imageDescribe.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageDescribe.js +25 -0
- package/dist/engine/nodes/remote/imageDescribe.js.map +1 -0
- package/dist/engine/nodes/remote/imageReferenceSheet.d.ts +34 -0
- package/dist/engine/nodes/remote/imageReferenceSheet.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageReferenceSheet.js +38 -0
- package/dist/engine/nodes/remote/imageReferenceSheet.js.map +1 -0
- package/dist/engine/nodes/remote/imageSearch.d.ts +18 -0
- package/dist/engine/nodes/remote/imageSearch.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageSearch.js +22 -0
- package/dist/engine/nodes/remote/imageSearch.js.map +1 -0
- package/dist/engine/nodes/remote/imageSelect.d.ts +39 -0
- package/dist/engine/nodes/remote/imageSelect.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageSelect.js +45 -0
- package/dist/engine/nodes/remote/imageSelect.js.map +1 -0
- package/dist/engine/nodes/remote/music.d.ts +45 -0
- package/dist/engine/nodes/remote/music.d.ts.map +1 -0
- package/dist/engine/nodes/remote/music.js +73 -0
- package/dist/engine/nodes/remote/music.js.map +1 -0
- package/dist/engine/nodes/remote/soundEffect.d.ts +21 -0
- package/dist/engine/nodes/remote/soundEffect.d.ts.map +1 -0
- package/dist/engine/nodes/remote/soundEffect.js +41 -0
- package/dist/engine/nodes/remote/soundEffect.js.map +1 -0
- package/dist/engine/nodes/remote/textGenerate.d.ts +21 -0
- package/dist/engine/nodes/remote/textGenerate.d.ts.map +1 -0
- package/dist/engine/nodes/remote/textGenerate.js +27 -0
- package/dist/engine/nodes/remote/textGenerate.js.map +1 -0
- package/dist/engine/nodes/remote/tts.d.ts +45 -0
- package/dist/engine/nodes/remote/tts.d.ts.map +1 -0
- package/dist/engine/nodes/remote/tts.js +66 -0
- package/dist/engine/nodes/remote/tts.js.map +1 -0
- package/dist/engine/nodes/remote/video.d.ts +58 -0
- package/dist/engine/nodes/remote/video.d.ts.map +1 -0
- package/dist/engine/nodes/remote/video.js +44 -0
- package/dist/engine/nodes/remote/video.js.map +1 -0
- package/dist/engine/nodes/remote/videoBackgroundRemove.d.ts +30 -0
- package/dist/engine/nodes/remote/videoBackgroundRemove.d.ts.map +1 -0
- package/dist/engine/nodes/remote/videoBackgroundRemove.js +29 -0
- package/dist/engine/nodes/remote/videoBackgroundRemove.js.map +1 -0
- package/dist/engine/nodes/remote/videoDeconstruct.d.ts +61 -0
- package/dist/engine/nodes/remote/videoDeconstruct.d.ts.map +1 -0
- package/dist/engine/nodes/remote/videoDeconstruct.js +40 -0
- package/dist/engine/nodes/remote/videoDeconstruct.js.map +1 -0
- package/dist/engine/nodes/remote/videoLipsync.d.ts +37 -0
- package/dist/engine/nodes/remote/videoLipsync.d.ts.map +1 -0
- package/dist/engine/nodes/remote/videoLipsync.js +26 -0
- package/dist/engine/nodes/remote/videoLipsync.js.map +1 -0
- package/dist/engine/nodes/remote/videoTranscribe.d.ts +116 -0
- package/dist/engine/nodes/remote/videoTranscribe.d.ts.map +1 -0
- package/dist/engine/nodes/remote/videoTranscribe.js +123 -0
- package/dist/engine/nodes/remote/videoTranscribe.js.map +1 -0
- package/dist/engine/nodes/remote/voiceSelect.d.ts +28 -0
- package/dist/engine/nodes/remote/voiceSelect.d.ts.map +1 -0
- package/dist/engine/nodes/remote/voiceSelect.js +25 -0
- package/dist/engine/nodes/remote/voiceSelect.js.map +1 -0
- package/dist/engine/scaffold/staticAd.d.ts +44 -0
- package/dist/engine/scaffold/staticAd.d.ts.map +1 -0
- package/dist/engine/scaffold/staticAd.js +243 -0
- package/dist/engine/scaffold/staticAd.js.map +1 -0
- package/dist/engine/scaffold/video.d.ts +56 -0
- package/dist/engine/scaffold/video.d.ts.map +1 -0
- package/dist/engine/scaffold/video.js +709 -0
- package/dist/engine/scaffold/video.js.map +1 -0
- package/dist/engine/schema/canvas.d.ts +41 -0
- package/dist/engine/schema/canvas.d.ts.map +1 -0
- package/dist/engine/schema/canvas.js +67 -0
- package/dist/engine/schema/canvas.js.map +1 -0
- package/dist/engine/schema/catalog.d.ts +25 -0
- package/dist/engine/schema/catalog.d.ts.map +1 -0
- package/dist/engine/schema/catalog.js +48 -0
- package/dist/engine/schema/catalog.js.map +1 -0
- package/dist/engine/schema/primitives.d.ts +6 -0
- package/dist/engine/schema/primitives.d.ts.map +1 -0
- package/dist/engine/schema/primitives.js +4 -0
- package/dist/engine/schema/primitives.js.map +1 -0
- package/dist/engine/schema/prompts.d.ts +4 -0
- package/dist/engine/schema/prompts.d.ts.map +1 -0
- package/dist/engine/schema/prompts.js +23 -0
- package/dist/engine/schema/prompts.js.map +1 -0
- package/dist/engine/schema/refs.d.ts +113 -0
- package/dist/engine/schema/refs.d.ts.map +1 -0
- package/dist/engine/schema/refs.js +35 -0
- package/dist/engine/schema/refs.js.map +1 -0
- package/dist/engine/storage/asset-store.d.ts +48 -0
- package/dist/engine/storage/asset-store.d.ts.map +1 -0
- package/dist/engine/storage/asset-store.js +166 -0
- package/dist/engine/storage/asset-store.js.map +1 -0
- package/dist/engine/storage/cache-store.d.ts +21 -0
- package/dist/engine/storage/cache-store.d.ts.map +1 -0
- package/dist/engine/storage/cache-store.js +31 -0
- package/dist/engine/storage/cache-store.js.map +1 -0
- package/dist/engine/storage/output-writer.d.ts +18 -0
- package/dist/engine/storage/output-writer.d.ts.map +1 -0
- package/dist/engine/storage/output-writer.js +52 -0
- package/dist/engine/storage/output-writer.js.map +1 -0
- package/dist/engine/storage/sha256.d.ts +2 -0
- package/dist/engine/storage/sha256.d.ts.map +1 -0
- package/dist/engine/storage/sha256.js +7 -0
- package/dist/engine/storage/sha256.js.map +1 -0
- package/package.json +15 -3
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export declare const imageBackgroundRemoveNode: import("../../engine/define.ts").NodeDefinition<{
|
|
2
|
+
image: {
|
|
3
|
+
sha256: string;
|
|
4
|
+
mime: string;
|
|
5
|
+
kind: "image";
|
|
6
|
+
url?: string | undefined;
|
|
7
|
+
path?: string | undefined;
|
|
8
|
+
metadata?: Record<string, unknown> | undefined;
|
|
9
|
+
width?: number | undefined;
|
|
10
|
+
height?: number | undefined;
|
|
11
|
+
};
|
|
12
|
+
}, {
|
|
13
|
+
model: "fal/birefnet-v2";
|
|
14
|
+
model_variant: "General Use (Light)" | "General Use (Heavy)" | "Matting" | "Portrait" | "DIS" | "HRSOD" | "COD";
|
|
15
|
+
mask_only: boolean;
|
|
16
|
+
operating_resolution?: "1024x1024" | "2048x2048" | "2304x2304" | undefined;
|
|
17
|
+
}, {
|
|
18
|
+
image: {
|
|
19
|
+
sha256: string;
|
|
20
|
+
mime: string;
|
|
21
|
+
kind: "image";
|
|
22
|
+
url?: string | undefined;
|
|
23
|
+
path?: string | undefined;
|
|
24
|
+
metadata?: Record<string, unknown> | undefined;
|
|
25
|
+
width?: number | undefined;
|
|
26
|
+
height?: number | undefined;
|
|
27
|
+
};
|
|
28
|
+
mask?: {
|
|
29
|
+
sha256: string;
|
|
30
|
+
mime: string;
|
|
31
|
+
kind: "image";
|
|
32
|
+
url?: string | undefined;
|
|
33
|
+
path?: string | undefined;
|
|
34
|
+
metadata?: Record<string, unknown> | undefined;
|
|
35
|
+
width?: number | undefined;
|
|
36
|
+
height?: number | undefined;
|
|
37
|
+
} | undefined;
|
|
38
|
+
}>;
|
|
39
|
+
//# sourceMappingURL=imageBackgroundRemove.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageBackgroundRemove.d.ts","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/imageBackgroundRemove.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBpC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ImageRef } from "../../schema/refs.js";
|
|
3
|
+
import { delegated } from "./delegate.js";
|
|
4
|
+
const ImageBackgroundRemoveParams = z
|
|
5
|
+
.object({
|
|
6
|
+
model: z.literal("fal/birefnet-v2").optional().default("fal/birefnet-v2"),
|
|
7
|
+
model_variant: z
|
|
8
|
+
.enum(["General Use (Light)", "General Use (Heavy)", "Matting", "Portrait", "DIS", "HRSOD", "COD"])
|
|
9
|
+
.optional()
|
|
10
|
+
.default("General Use (Light)"),
|
|
11
|
+
operating_resolution: z.enum(["1024x1024", "2048x2048", "2304x2304"]).optional(),
|
|
12
|
+
mask_only: z.boolean().optional().default(false),
|
|
13
|
+
})
|
|
14
|
+
.strict();
|
|
15
|
+
export const imageBackgroundRemoveNode = delegated({
|
|
16
|
+
id: "image_background_remove",
|
|
17
|
+
version: "1.0.0",
|
|
18
|
+
category: "image",
|
|
19
|
+
summary: "Remove the background from an image and return a transparent PNG (or the segmentation mask). Powered by fal.ai `fal-ai/birefnet/v2`.",
|
|
20
|
+
when_to_use: "Use to extract subjects from photos for use as overlays in hyperframe compositions, product shots, or compositing pipelines. " +
|
|
21
|
+
"Set `mask_only:true` to return the binary mask instead of the alpha-cut image.",
|
|
22
|
+
inputs: z
|
|
23
|
+
.object({
|
|
24
|
+
image: ImageRef,
|
|
25
|
+
})
|
|
26
|
+
.strict(),
|
|
27
|
+
params: ImageBackgroundRemoveParams,
|
|
28
|
+
outputs: z
|
|
29
|
+
.object({
|
|
30
|
+
image: ImageRef,
|
|
31
|
+
mask: ImageRef.optional(),
|
|
32
|
+
})
|
|
33
|
+
.strict(),
|
|
34
|
+
outputKinds: { image: "image", mask: "image" },
|
|
35
|
+
cost: () => ({ credits: 1, seconds_estimate: 5 }),
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=imageBackgroundRemove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageBackgroundRemove.js","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/imageBackgroundRemove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,2BAA2B,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC;IACzE,aAAa,EAAE,CAAC;SACb,IAAI,CAAC,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;SAClG,QAAQ,EAAE;SACV,OAAO,CAAC,qBAAqB,CAAC;IACjC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChF,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACjD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC;IACjD,EAAE,EAAE,yBAAyB;IAC7B,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,OAAO;IACjB,OAAO,EACL,sIAAsI;IACxI,WAAW,EACT,+HAA+H;QAC/H,gFAAgF;IAClF,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,KAAK,EAAE,QAAQ;KAChB,CAAC;SACD,MAAM,EAAE;IACX,MAAM,EAAE,2BAA2B;IACnC,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE;KAC1B,CAAC;SACD,MAAM,EAAE;IACX,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;IAC9C,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;CAClD,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare const imageDescribeNode: import("../../engine/define.ts").NodeDefinition<{
|
|
2
|
+
[x: string]: unknown;
|
|
3
|
+
image: {
|
|
4
|
+
sha256: string;
|
|
5
|
+
mime: string;
|
|
6
|
+
kind: "image";
|
|
7
|
+
url?: string | undefined;
|
|
8
|
+
path?: string | undefined;
|
|
9
|
+
metadata?: Record<string, unknown> | undefined;
|
|
10
|
+
width?: number | undefined;
|
|
11
|
+
height?: number | undefined;
|
|
12
|
+
};
|
|
13
|
+
}, {
|
|
14
|
+
model: "~google/gemini-flash-latest" | "~google/gemini-pro-latest";
|
|
15
|
+
focus?: string | undefined;
|
|
16
|
+
context?: string | undefined;
|
|
17
|
+
temperature?: number | undefined;
|
|
18
|
+
max_tokens?: number | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
description: {
|
|
21
|
+
sha256: string;
|
|
22
|
+
mime: string;
|
|
23
|
+
kind: "json";
|
|
24
|
+
url?: string | undefined;
|
|
25
|
+
path?: string | undefined;
|
|
26
|
+
metadata?: Record<string, unknown> | undefined;
|
|
27
|
+
};
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=imageDescribe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageDescribe.d.ts","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/imageDescribe.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqB5B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ImageRef, JsonRef } from "../../schema/refs.js";
|
|
3
|
+
import { delegated } from "./delegate.js";
|
|
4
|
+
const IMAGE_DESCRIBE_MODELS = ["~google/gemini-pro-latest", "~google/gemini-flash-latest"];
|
|
5
|
+
export const imageDescribeNode = delegated({
|
|
6
|
+
id: "image_describe",
|
|
7
|
+
version: "1.3.0",
|
|
8
|
+
category: "vision",
|
|
9
|
+
summary: "Reverse-engineer an image into an exhaustive, replication-grade JSON description: who the advertiser is and what they sell (source_context), composition, non-person subjects with expression/treatment, deeply detailed people, brand-identified logos (named by brand, not appearance), camera optics, lighting, color palette WITH per-color brand-ownership (brand vs borrowed-functional) and purpose, materials, visible text, ad signals (proof badges/CTA/price), the persuasion engine (ad_intent), style, post-processing.",
|
|
10
|
+
when_to_use: 'Use to turn a reference image into a structured blueprint you can inject into downstream prompts via `{{slot}}` — e.g. restyle a competitor ad onto your own product, lock a look across a series, or feed exact palette/lighting into image_generate. Purpose-built for market adaptation: logos are identified by brand ("Trustpilot", never "green star"), people and animals carry expression/emotion/intent detail, and each color is tagged brand vs borrowed-functional so a recolor can keep the reds/yellows that do a job. The extraction prompt is baked in; use `focus` to emphasise aspects and `context` to pass known provenance (advertiser, category, market) so source_context and color ownership are grounded. Pick `~google/gemini-pro-latest` for the densest extraction (recommended for ad / market-adaptation passes), `~google/gemini-flash-latest` for cheap/fast passes. The output is rich — raise `max_tokens` (e.g. 8000+) for dense ads so the JSON isn\'t truncated.',
|
|
11
|
+
inputs: z.object({ image: ImageRef }).loose(),
|
|
12
|
+
params: z
|
|
13
|
+
.object({
|
|
14
|
+
model: z.enum(IMAGE_DESCRIBE_MODELS),
|
|
15
|
+
focus: z.string().optional(),
|
|
16
|
+
context: z.string().optional(),
|
|
17
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
18
|
+
max_tokens: z.number().int().positive().optional(),
|
|
19
|
+
})
|
|
20
|
+
.strict(),
|
|
21
|
+
outputs: z.object({ description: JsonRef }).strict(),
|
|
22
|
+
outputKinds: { description: "json" },
|
|
23
|
+
cost: () => ({ credits: 2, seconds_estimate: 10 }),
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=imageDescribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageDescribe.js","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/imageDescribe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,qBAAqB,GAAG,CAAC,2BAA2B,EAAE,6BAA6B,CAAU,CAAC;AAEpG,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;IACzC,EAAE,EAAE,gBAAgB;IACpB,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,QAAQ;IAClB,OAAO,EACL,sgBAAsgB;IACxgB,WAAW,EACT,u8BAAu8B;IACz8B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE;IAC7C,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;QACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAChD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KACnD,CAAC;SACD,MAAM,EAAE;IACX,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACpD,WAAW,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;IACpC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;CACnD,CAAC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export declare const imageReferenceSheetNode: import("../../engine/define.ts").NodeDefinition<{
|
|
2
|
+
[x: string]: unknown;
|
|
3
|
+
references: {
|
|
4
|
+
sha256: string;
|
|
5
|
+
mime: string;
|
|
6
|
+
kind: "image";
|
|
7
|
+
url?: string | undefined;
|
|
8
|
+
path?: string | undefined;
|
|
9
|
+
metadata?: Record<string, unknown> | undefined;
|
|
10
|
+
width?: number | undefined;
|
|
11
|
+
height?: number | undefined;
|
|
12
|
+
}[];
|
|
13
|
+
}, {
|
|
14
|
+
model: "google/gemini-3.1-flash-image-preview" | "google/gemini-3-pro-image-preview";
|
|
15
|
+
subject_description: string;
|
|
16
|
+
subject_type: "character" | "person" | "product";
|
|
17
|
+
views?: string[] | undefined;
|
|
18
|
+
style?: string | undefined;
|
|
19
|
+
prompt_override?: string | undefined;
|
|
20
|
+
aspect_ratio?: "1:1" | "16:9" | "9:16" | "2:3" | "3:4" | "4:5" | "3:2" | "4:3" | "5:4" | "21:9" | "1:4" | "4:1" | "1:8" | "8:1" | undefined;
|
|
21
|
+
image_size?: "1K" | "2K" | "4K" | "0.5K" | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
sheet: {
|
|
24
|
+
sha256: string;
|
|
25
|
+
mime: string;
|
|
26
|
+
kind: "image";
|
|
27
|
+
url?: string | undefined;
|
|
28
|
+
path?: string | undefined;
|
|
29
|
+
metadata?: Record<string, unknown> | undefined;
|
|
30
|
+
width?: number | undefined;
|
|
31
|
+
height?: number | undefined;
|
|
32
|
+
};
|
|
33
|
+
}>;
|
|
34
|
+
//# sourceMappingURL=imageReferenceSheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageReferenceSheet.d.ts","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/imageReferenceSheet.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBlC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ImageRef } from "../../schema/refs.js";
|
|
3
|
+
import { delegated } from "./delegate.js";
|
|
4
|
+
const REFERENCE_SHEET_MODELS = ["google/gemini-3-pro-image-preview", "google/gemini-3.1-flash-image-preview"];
|
|
5
|
+
// Permissive union of every param accepted by any curated model. The model
|
|
6
|
+
// registry (`models/registry.ts`) is the strict per-model gate. The sheet
|
|
7
|
+
// prompt itself is baked into the backend handler — `prompt_override` is the
|
|
8
|
+
// only full-bypass lever.
|
|
9
|
+
const ImageReferenceSheetParams = z
|
|
10
|
+
.object({
|
|
11
|
+
model: z.enum(REFERENCE_SHEET_MODELS),
|
|
12
|
+
subject_description: z.string().min(1),
|
|
13
|
+
subject_type: z.enum(["character", "person", "product"]),
|
|
14
|
+
views: z.array(z.string().min(1)).min(2).max(6).optional(),
|
|
15
|
+
style: z.string().optional(),
|
|
16
|
+
prompt_override: z.string().min(1).optional(),
|
|
17
|
+
aspect_ratio: z
|
|
18
|
+
.enum(["1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3", "4:5", "5:4", "21:9", "1:4", "4:1", "1:8", "8:1"])
|
|
19
|
+
.optional(),
|
|
20
|
+
image_size: z.enum(["0.5K", "1K", "2K", "4K"]).optional(),
|
|
21
|
+
})
|
|
22
|
+
.strict();
|
|
23
|
+
export const imageReferenceSheetNode = delegated({
|
|
24
|
+
id: "image_reference_sheet",
|
|
25
|
+
version: "1.0.0",
|
|
26
|
+
category: "image",
|
|
27
|
+
summary: "Fuse 1–6 images of a single subject (person, character, or product) into ONE multi-view reference sheet — a labeled turnaround grid (FRONT / SIDE / BACK…) in consistent style and lighting. Curated models: Gemini 3 Pro Image (best fusion + labels), Gemini 3.1 Flash Image (cheap iteration).",
|
|
28
|
+
when_to_use: "Use before image_generate / video_generate when a subject must stay consistent across many creatives — wire the `sheet` output into their `reference` input instead of re-describing the subject per prompt. `subject_description` should be the exact wording you reuse downstream. Pick `google/gemini-3-pro-image-preview` for final 6-view sheets at 2K+, `google/gemini-3.1-flash-image-preview` while iterating.",
|
|
29
|
+
inputs: z.object({ references: z.array(ImageRef).min(1).max(6) }).loose(),
|
|
30
|
+
params: ImageReferenceSheetParams,
|
|
31
|
+
outputs: z.object({ sheet: ImageRef }).strict(),
|
|
32
|
+
outputKinds: { sheet: "image" },
|
|
33
|
+
cost: ({ params }) => ({
|
|
34
|
+
credits: params?.model === "google/gemini-3-pro-image-preview" ? 20 : 5,
|
|
35
|
+
seconds_estimate: 30,
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=imageReferenceSheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageReferenceSheet.js","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/imageReferenceSheet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,sBAAsB,GAAG,CAAC,mCAAmC,EAAE,uCAAuC,CAAU,CAAC;AAEvH,2EAA2E;AAC3E,0EAA0E;AAC1E,6EAA6E;AAC7E,0BAA0B;AAC1B,MAAM,yBAAyB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;IACrC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7C,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC3G,QAAQ,EAAE;IACb,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC1D,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC;IAC/C,EAAE,EAAE,uBAAuB;IAC3B,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,OAAO;IACjB,OAAO,EACL,mSAAmS;IACrS,WAAW,EACT,wZAAwZ;IAC1Z,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;IACzE,MAAM,EAAE,yBAAyB;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IAC/C,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAC/B,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACrB,OAAO,EAAG,MAAyC,EAAE,KAAK,KAAK,mCAAmC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3G,gBAAgB,EAAE,EAAE;KACrB,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const imageSearchNode: import("../../engine/define.ts").NodeDefinition<{
|
|
2
|
+
[x: string]: unknown;
|
|
3
|
+
}, {
|
|
4
|
+
prompt: string;
|
|
5
|
+
count: number;
|
|
6
|
+
}, {
|
|
7
|
+
images: {
|
|
8
|
+
sha256: string;
|
|
9
|
+
mime: string;
|
|
10
|
+
kind: "image";
|
|
11
|
+
url?: string | undefined;
|
|
12
|
+
path?: string | undefined;
|
|
13
|
+
metadata?: Record<string, unknown> | undefined;
|
|
14
|
+
width?: number | undefined;
|
|
15
|
+
height?: number | undefined;
|
|
16
|
+
}[];
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=imageSearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageSearch.d.ts","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/imageSearch.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;EAa1B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ImageRef } from "../../schema/refs.js";
|
|
3
|
+
import { delegated } from "./delegate.js";
|
|
4
|
+
const ImageSearchParams = z
|
|
5
|
+
.object({
|
|
6
|
+
prompt: z.string().min(1),
|
|
7
|
+
count: z.number().int().min(1).max(20).default(5),
|
|
8
|
+
})
|
|
9
|
+
.strict();
|
|
10
|
+
export const imageSearchNode = delegated({
|
|
11
|
+
id: "image_search",
|
|
12
|
+
version: "1.0.0",
|
|
13
|
+
category: "image",
|
|
14
|
+
summary: "Agentic image search across Google Images, stock photography (Freepik), and Pinterest. An LLM agent picks the search tools and queries, selects the best matches, and the results are downloaded into canvas assets.",
|
|
15
|
+
when_to_use: "Use to gather real-world reference or inspiration images for a prompt (e.g. several photos of an australian shepherd) so a later step or the user can pick the best one. Not for creating new imagery — use image_generate for that.",
|
|
16
|
+
inputs: z.object({}).loose(),
|
|
17
|
+
params: ImageSearchParams,
|
|
18
|
+
outputs: z.object({ images: z.array(ImageRef).min(1) }).strict(),
|
|
19
|
+
outputKinds: { images: "image" },
|
|
20
|
+
cost: ({ params }) => ({ credits: Math.ceil(2 + params.count / 2), seconds_estimate: 30 }),
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=imageSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageSearch.js","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/imageSearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CAClD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;IACvC,EAAE,EAAE,cAAc;IAClB,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,OAAO;IACjB,OAAO,EACL,sNAAsN;IACxN,WAAW,EACT,sOAAsO;IACxO,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;IAC5B,MAAM,EAAE,iBAAiB;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IAChE,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;IAChC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;CAC3F,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export declare const imageSelectNode: import("../../engine/define.ts").NodeDefinition<{
|
|
2
|
+
[x: string]: unknown;
|
|
3
|
+
images: {
|
|
4
|
+
sha256: string;
|
|
5
|
+
mime: string;
|
|
6
|
+
kind: "image";
|
|
7
|
+
url?: string | undefined;
|
|
8
|
+
path?: string | undefined;
|
|
9
|
+
metadata?: Record<string, unknown> | undefined;
|
|
10
|
+
width?: number | undefined;
|
|
11
|
+
height?: number | undefined;
|
|
12
|
+
}[];
|
|
13
|
+
}, {
|
|
14
|
+
model: "~google/gemini-flash-latest" | "~google/gemini-pro-latest";
|
|
15
|
+
prompt: string;
|
|
16
|
+
count: number;
|
|
17
|
+
temperature?: number | undefined;
|
|
18
|
+
max_tokens?: number | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
images: {
|
|
21
|
+
sha256: string;
|
|
22
|
+
mime: string;
|
|
23
|
+
kind: "image";
|
|
24
|
+
url?: string | undefined;
|
|
25
|
+
path?: string | undefined;
|
|
26
|
+
metadata?: Record<string, unknown> | undefined;
|
|
27
|
+
width?: number | undefined;
|
|
28
|
+
height?: number | undefined;
|
|
29
|
+
}[];
|
|
30
|
+
reasoning: {
|
|
31
|
+
sha256: string;
|
|
32
|
+
mime: string;
|
|
33
|
+
kind: "text";
|
|
34
|
+
url?: string | undefined;
|
|
35
|
+
path?: string | undefined;
|
|
36
|
+
metadata?: Record<string, unknown> | undefined;
|
|
37
|
+
};
|
|
38
|
+
}>;
|
|
39
|
+
//# sourceMappingURL=imageSelect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageSelect.d.ts","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/imageSelect.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwC1B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ImageRef, TextRef } from "../../schema/refs.js";
|
|
3
|
+
import { delegated } from "./delegate.js";
|
|
4
|
+
const IMAGE_SELECT_MODELS = ["~google/gemini-flash-latest", "~google/gemini-pro-latest"];
|
|
5
|
+
export const imageSelectNode = delegated({
|
|
6
|
+
id: "image_select",
|
|
7
|
+
version: "1.0.0",
|
|
8
|
+
category: "vision",
|
|
9
|
+
summary: "Pick the best `count` images out of 2+ candidates with a vision LLM, judged against a prompt. Outputs a passthrough subset of the input refs (no new pixels) plus the model's comparative reasoning.",
|
|
10
|
+
when_to_use: "Use after fanning out several image_generate variants (or any pool of 2+ images) to keep only the strongest before expensive downstream steps — video generation, reference sheets, final delivery. `count` fixes the output size, so `images#0`…`images#count-1` are always safe to wire. Pick `~google/gemini-flash-latest` for cheap/fast picks and `~google/gemini-pro-latest` for harder aesthetic judgement.",
|
|
11
|
+
inputs: z.object({ images: z.array(ImageRef).min(2) }).loose(),
|
|
12
|
+
params: z
|
|
13
|
+
.object({
|
|
14
|
+
model: z.enum(IMAGE_SELECT_MODELS),
|
|
15
|
+
prompt: z.string().min(1),
|
|
16
|
+
count: z.number().int().min(1).default(1),
|
|
17
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
18
|
+
max_tokens: z.number().int().positive().optional(),
|
|
19
|
+
})
|
|
20
|
+
.strict(),
|
|
21
|
+
outputs: z.object({ images: z.array(ImageRef).min(1), reasoning: TextRef }).strict(),
|
|
22
|
+
outputKinds: { images: "image", reasoning: "text" },
|
|
23
|
+
cost: () => ({ credits: 1, seconds_estimate: 5 }),
|
|
24
|
+
// Arity is only knowable at validate time when `images` is a literal array
|
|
25
|
+
// of refs; a single `$ref:` string to an upstream array output is deferred
|
|
26
|
+
// to the runtime Zod parse and the backend's own arity check.
|
|
27
|
+
validateExtra: ({ rawParams, rawInputs }) => {
|
|
28
|
+
const issues = [];
|
|
29
|
+
const images = rawInputs?.images;
|
|
30
|
+
if (!Array.isArray(images))
|
|
31
|
+
return issues;
|
|
32
|
+
if (images.length < 2) {
|
|
33
|
+
issues.push({ path: "inputs.images", message: "image_select needs at least 2 images wired" });
|
|
34
|
+
}
|
|
35
|
+
const count = rawParams?.count;
|
|
36
|
+
if (typeof count === "number" && count > images.length) {
|
|
37
|
+
issues.push({
|
|
38
|
+
path: "params.count",
|
|
39
|
+
message: `count ${count} exceeds the ${images.length} images wired into \`images\``,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return issues;
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=imageSelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageSelect.js","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/imageSelect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,mBAAmB,GAAG,CAAC,6BAA6B,EAAE,2BAA2B,CAAU,CAAC;AAElG,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;IACvC,EAAE,EAAE,cAAc;IAClB,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,QAAQ;IAClB,OAAO,EACL,sMAAsM;IACxM,WAAW,EACT,oZAAoZ;IACtZ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;IAC9D,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAChD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KACnD,CAAC;SACD,MAAM,EAAE;IACX,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACpF,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;IACnD,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;IACjD,2EAA2E;IAC3E,2EAA2E;IAC3E,8DAA8D;IAC9D,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;QAC1C,MAAM,MAAM,GAA6C,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAI,SAA8C,EAAE,MAAM,CAAC;QACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QAC1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,KAAK,GAAI,SAA6C,EAAE,KAAK,CAAC;QACpE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,SAAS,KAAK,gBAAgB,MAAM,CAAC,MAAM,+BAA+B;aACpF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export declare const musicNode: import("../../engine/define.ts").NodeDefinition<{
|
|
2
|
+
[x: string]: unknown;
|
|
3
|
+
video?: {
|
|
4
|
+
sha256: string;
|
|
5
|
+
mime: string;
|
|
6
|
+
kind: "video";
|
|
7
|
+
url?: string | undefined;
|
|
8
|
+
path?: string | undefined;
|
|
9
|
+
metadata?: Record<string, unknown> | undefined;
|
|
10
|
+
width?: number | undefined;
|
|
11
|
+
height?: number | undefined;
|
|
12
|
+
duration_ms?: number | undefined;
|
|
13
|
+
} | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
model: "elevenlabs/music-v1" | "elevenlabs/video-background-music-v1";
|
|
16
|
+
prompt?: string | undefined;
|
|
17
|
+
composition_plan?: Record<string, unknown> | undefined;
|
|
18
|
+
music_length_ms?: number | undefined;
|
|
19
|
+
seed?: number | undefined;
|
|
20
|
+
force_instrumental?: boolean | undefined;
|
|
21
|
+
respect_sections_durations?: boolean | undefined;
|
|
22
|
+
with_timestamps?: boolean | undefined;
|
|
23
|
+
description?: string | undefined;
|
|
24
|
+
tags?: string[] | undefined;
|
|
25
|
+
output_format?: "mp3_22050_32" | "mp3_44100_32" | "mp3_44100_64" | "mp3_44100_96" | "mp3_44100_128" | "mp3_44100_192" | undefined;
|
|
26
|
+
}, {
|
|
27
|
+
audio: {
|
|
28
|
+
sha256: string;
|
|
29
|
+
mime: string;
|
|
30
|
+
kind: "audio";
|
|
31
|
+
url?: string | undefined;
|
|
32
|
+
path?: string | undefined;
|
|
33
|
+
metadata?: Record<string, unknown> | undefined;
|
|
34
|
+
duration_ms?: number | undefined;
|
|
35
|
+
};
|
|
36
|
+
timestamps?: {
|
|
37
|
+
sha256: string;
|
|
38
|
+
mime: string;
|
|
39
|
+
kind: "json";
|
|
40
|
+
url?: string | undefined;
|
|
41
|
+
path?: string | undefined;
|
|
42
|
+
metadata?: Record<string, unknown> | undefined;
|
|
43
|
+
} | undefined;
|
|
44
|
+
}>;
|
|
45
|
+
//# sourceMappingURL=music.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"music.d.ts","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/music.ts"],"names":[],"mappings":"AAqCA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCpB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ELEVENLABS_MAX_MUSIC_LENGTH_MS, ELEVENLABS_OUTPUT_FORMATS } from "../../models/registry.js";
|
|
3
|
+
import { AudioRef, JsonRef, VideoRef } from "../../schema/refs.js";
|
|
4
|
+
import { delegated } from "./delegate.js";
|
|
5
|
+
const MUSIC_MODELS = ["elevenlabs/music-v1", "elevenlabs/video-background-music-v1"];
|
|
6
|
+
const MusicParams = z
|
|
7
|
+
.object({
|
|
8
|
+
model: z.enum(MUSIC_MODELS),
|
|
9
|
+
/** Free-form prompt. Used by `elevenlabs/music-v1` (compose-detailed). */
|
|
10
|
+
prompt: z.string().optional(),
|
|
11
|
+
/**
|
|
12
|
+
* Structured composition plan (intro / hook / verse / outro sections with
|
|
13
|
+
* per-section styles + durations). Mutually exclusive with `prompt`.
|
|
14
|
+
*/
|
|
15
|
+
composition_plan: z.record(z.string(), z.unknown()).optional(),
|
|
16
|
+
/** Target length when using `prompt`. 3000–454545ms (capped by the $10 per-node cost limit). */
|
|
17
|
+
music_length_ms: z.number().int().min(3000).max(ELEVENLABS_MAX_MUSIC_LENGTH_MS).optional(),
|
|
18
|
+
seed: z.number().int().optional(),
|
|
19
|
+
/** Prompt mode only — forces an instrumental (no vocals) track. */
|
|
20
|
+
force_instrumental: z.boolean().optional(),
|
|
21
|
+
/** composition_plan only — honor exact section durations. */
|
|
22
|
+
respect_sections_durations: z.boolean().optional(),
|
|
23
|
+
/** Emit word-level timestamps alongside the audio. */
|
|
24
|
+
with_timestamps: z.boolean().optional(),
|
|
25
|
+
/**
|
|
26
|
+
* video-to-music only — short description of the desired score
|
|
27
|
+
* ("upbeat synth, fast cuts, 80s") used to bias the model.
|
|
28
|
+
*/
|
|
29
|
+
description: z.string().max(1000).optional(),
|
|
30
|
+
/** video-to-music only — up to 10 style tags. */
|
|
31
|
+
tags: z.array(z.string()).max(10).optional(),
|
|
32
|
+
output_format: z.enum(ELEVENLABS_OUTPUT_FORMATS).optional(),
|
|
33
|
+
})
|
|
34
|
+
.strict();
|
|
35
|
+
export const musicNode = delegated({
|
|
36
|
+
id: "music",
|
|
37
|
+
version: "1.1.0",
|
|
38
|
+
category: "audio",
|
|
39
|
+
summary: "Generate music for ad creatives and website video content. `elevenlabs/music-v1` composes from a text prompt or structured composition plan; `elevenlabs/video-background-music-v1` scores an existing video clip provided via `inputs.video`.",
|
|
40
|
+
when_to_use: "Use to produce background music or a full score for video ads, hero-section reels, or any motion content. Prefer the video-to-music model when you already have a cut and want music timed to it; use compose-detailed when you have only a brief or want section-level control (intro / hook / outro). Pair the resulting audio with `video_generate` or `video_lipsync` at compose time.",
|
|
41
|
+
inputs: z.object({ video: VideoRef.optional() }).loose(),
|
|
42
|
+
params: MusicParams,
|
|
43
|
+
outputs: z.object({ audio: AudioRef, timestamps: JsonRef.optional() }).strict(),
|
|
44
|
+
outputKinds: { audio: "audio", timestamps: "json" },
|
|
45
|
+
cost: ({ params }) => {
|
|
46
|
+
const seconds = params.music_length_ms ? Math.ceil(params.music_length_ms / 1000) : 30;
|
|
47
|
+
return { credits: Math.max(1, Math.ceil(seconds * 2.2)), seconds_estimate: seconds + 15 };
|
|
48
|
+
},
|
|
49
|
+
// Per-model semantics the registry can't express: compose needs exactly one
|
|
50
|
+
// of prompt/composition_plan, and a video wired into compose is dead weight.
|
|
51
|
+
validateExtra: ({ rawParams, rawInputs }) => {
|
|
52
|
+
const issues = [];
|
|
53
|
+
const params = (rawParams ?? {});
|
|
54
|
+
if (params.model !== "elevenlabs/music-v1")
|
|
55
|
+
return issues;
|
|
56
|
+
const hasPrompt = params.prompt !== undefined;
|
|
57
|
+
const hasPlan = params.composition_plan !== undefined;
|
|
58
|
+
if (hasPrompt === hasPlan) {
|
|
59
|
+
issues.push({
|
|
60
|
+
path: "params",
|
|
61
|
+
message: "elevenlabs/music-v1 needs exactly one of `prompt` or `composition_plan`",
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (rawInputs?.video !== undefined) {
|
|
65
|
+
issues.push({
|
|
66
|
+
path: "inputs.video",
|
|
67
|
+
message: "elevenlabs/music-v1 ignores `inputs.video` — use elevenlabs/video-background-music-v1 to score a video",
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return issues;
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=music.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"music.js","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/music.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const soundEffectNode: import("../../engine/define.ts").NodeDefinition<{
|
|
2
|
+
[x: string]: unknown;
|
|
3
|
+
}, {
|
|
4
|
+
model: "elevenlabs/eleven_text_to_sound_v2";
|
|
5
|
+
text: string;
|
|
6
|
+
duration_seconds?: number | undefined;
|
|
7
|
+
prompt_influence?: number | undefined;
|
|
8
|
+
loop?: boolean | undefined;
|
|
9
|
+
output_format?: "mp3_22050_32" | "mp3_44100_32" | "mp3_44100_64" | "mp3_44100_96" | "mp3_44100_128" | "mp3_44100_192" | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
audio: {
|
|
12
|
+
sha256: string;
|
|
13
|
+
mime: string;
|
|
14
|
+
kind: "audio";
|
|
15
|
+
url?: string | undefined;
|
|
16
|
+
path?: string | undefined;
|
|
17
|
+
metadata?: Record<string, unknown> | undefined;
|
|
18
|
+
duration_ms?: number | undefined;
|
|
19
|
+
};
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=soundEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soundEffect.d.ts","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/soundEffect.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;EAgB1B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ELEVENLABS_OUTPUT_FORMATS } from "../../models/registry.js";
|
|
3
|
+
import { AudioRef } from "../../schema/refs.js";
|
|
4
|
+
import { delegated } from "./delegate.js";
|
|
5
|
+
const SOUND_EFFECT_MODELS = ["elevenlabs/eleven_text_to_sound_v2"];
|
|
6
|
+
const SoundEffectParams = z
|
|
7
|
+
.object({
|
|
8
|
+
model: z.enum(SOUND_EFFECT_MODELS),
|
|
9
|
+
/** Prompt describing the SFX ("metal door slam", "soft UI tap", "ocean waves"). */
|
|
10
|
+
text: z.string().min(1),
|
|
11
|
+
/**
|
|
12
|
+
* Target length in seconds. 0.5–30. Leave unset to let the model pick the
|
|
13
|
+
* natural length for the described effect.
|
|
14
|
+
*/
|
|
15
|
+
duration_seconds: z.number().min(0.5).max(30).optional(),
|
|
16
|
+
/**
|
|
17
|
+
* 0–1. Higher = stick closer to the prompt at the cost of variety; lower
|
|
18
|
+
* = let the model interpret more freely. Defaults to 0.3 on the provider.
|
|
19
|
+
*/
|
|
20
|
+
prompt_influence: z.number().min(0).max(1).optional(),
|
|
21
|
+
/** Only valid on `eleven_text_to_sound_v2` — produce a seamless loop. */
|
|
22
|
+
loop: z.boolean().optional(),
|
|
23
|
+
output_format: z.enum(ELEVENLABS_OUTPUT_FORMATS).optional(),
|
|
24
|
+
})
|
|
25
|
+
.strict();
|
|
26
|
+
export const soundEffectNode = delegated({
|
|
27
|
+
id: "sound_effect",
|
|
28
|
+
version: "1.1.0",
|
|
29
|
+
category: "audio",
|
|
30
|
+
summary: "Generate short sound effects from a text prompt via ElevenLabs Text-to-Sound. Use for whooshes, impacts, UI clicks, ambient beds, or signature stingers in ad creatives and product videos.",
|
|
31
|
+
when_to_use: "Reach for this when you need a punch-in SFX layered against `video_generate` or `hyperframe_render` output — e.g. a logo whoosh on a hero shot, a click on a CTA cut, a swelling ambient bed under VO. Set `loop: true` for atmospheric beds that need to tile under longer footage; leave `duration_seconds` unset and the model picks a natural length.",
|
|
32
|
+
inputs: z.object({}).loose(),
|
|
33
|
+
params: SoundEffectParams,
|
|
34
|
+
outputs: z.object({ audio: AudioRef }).strict(),
|
|
35
|
+
outputKinds: { audio: "audio" },
|
|
36
|
+
cost: ({ params }) => {
|
|
37
|
+
const seconds = params.duration_seconds ?? 5;
|
|
38
|
+
return { credits: Math.max(1, Math.ceil(seconds * 2.2)), seconds_estimate: seconds + 5 };
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=soundEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soundEffect.js","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/soundEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,mBAAmB,GAAG,CAAC,oCAAoC,CAAU,CAAC;AAE5E,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;IAClC,mFAAmF;IACnF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB;;;OAGG;IACH,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxD;;;OAGG;IACH,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrD,yEAAyE;IACzE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC5B,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,QAAQ,EAAE;CAC5D,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;IACvC,EAAE,EAAE,cAAc;IAClB,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,OAAO;IACjB,OAAO,EACL,6LAA6L;IAC/L,WAAW,EACT,2VAA2V;IAC7V,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;IAC5B,MAAM,EAAE,iBAAiB;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IAC/C,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;IAC/B,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,GAAG,CAAC,EAAE,CAAC;IAC3F,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const textGenerateNode: import("../../engine/define.ts").NodeDefinition<{
|
|
2
|
+
[x: string]: unknown;
|
|
3
|
+
}, {
|
|
4
|
+
model: "~google/gemini-flash-latest" | "~google/gemini-pro-latest";
|
|
5
|
+
prompt: string;
|
|
6
|
+
system?: string | undefined;
|
|
7
|
+
response_format?: "text" | "json_object" | undefined;
|
|
8
|
+
web_search?: boolean | undefined;
|
|
9
|
+
temperature?: number | undefined;
|
|
10
|
+
max_tokens?: number | undefined;
|
|
11
|
+
}, {
|
|
12
|
+
text: {
|
|
13
|
+
sha256: string;
|
|
14
|
+
mime: string;
|
|
15
|
+
kind: "text";
|
|
16
|
+
url?: string | undefined;
|
|
17
|
+
path?: string | undefined;
|
|
18
|
+
metadata?: Record<string, unknown> | undefined;
|
|
19
|
+
};
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=textGenerate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textGenerate.d.ts","sourceRoot":"","sources":["../../../../src/engine/nodes/remote/textGenerate.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;EAsB3B,CAAC"}
|