venice-video-harness 2.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/CHANGELOG.md +28 -0
- package/LICENSE +21 -0
- package/README.md +598 -0
- package/dist/assembly/manifest-builder.d.ts +8 -0
- package/dist/assembly/manifest-builder.d.ts.map +1 -0
- package/dist/assembly/manifest-builder.js +196 -0
- package/dist/assembly/manifest-builder.js.map +1 -0
- package/dist/assembly/remotion-scaffold.d.ts +14 -0
- package/dist/assembly/remotion-scaffold.d.ts.map +1 -0
- package/dist/assembly/remotion-scaffold.js +292 -0
- package/dist/assembly/remotion-scaffold.js.map +1 -0
- package/dist/assembly/types.d.ts +67 -0
- package/dist/assembly/types.d.ts.map +1 -0
- package/dist/assembly/types.js +5 -0
- package/dist/assembly/types.js.map +1 -0
- package/dist/characters/describer.d.ts +32 -0
- package/dist/characters/describer.d.ts.map +1 -0
- package/dist/characters/describer.js +309 -0
- package/dist/characters/describer.js.map +1 -0
- package/dist/characters/extractor.d.ts +27 -0
- package/dist/characters/extractor.d.ts.map +1 -0
- package/dist/characters/extractor.js +274 -0
- package/dist/characters/extractor.js.map +1 -0
- package/dist/characters/reference-manager.d.ts +95 -0
- package/dist/characters/reference-manager.d.ts.map +1 -0
- package/dist/characters/reference-manager.js +346 -0
- package/dist/characters/reference-manager.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +310 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +22 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +66 -0
- package/dist/config.js.map +1 -0
- package/dist/editing/aligner.d.ts +44 -0
- package/dist/editing/aligner.d.ts.map +1 -0
- package/dist/editing/aligner.js +201 -0
- package/dist/editing/aligner.js.map +1 -0
- package/dist/editing/edl.d.ts +45 -0
- package/dist/editing/edl.d.ts.map +1 -0
- package/dist/editing/edl.js +133 -0
- package/dist/editing/edl.js.map +1 -0
- package/dist/editing/overlays.d.ts +97 -0
- package/dist/editing/overlays.d.ts.map +1 -0
- package/dist/editing/overlays.js +41 -0
- package/dist/editing/overlays.js.map +1 -0
- package/dist/editing/packer.d.ts +52 -0
- package/dist/editing/packer.d.ts.map +1 -0
- package/dist/editing/packer.js +170 -0
- package/dist/editing/packer.js.map +1 -0
- package/dist/editing/providers/whisper-cpp.d.ts +32 -0
- package/dist/editing/providers/whisper-cpp.d.ts.map +1 -0
- package/dist/editing/providers/whisper-cpp.js +239 -0
- package/dist/editing/providers/whisper-cpp.js.map +1 -0
- package/dist/editing/render.d.ts +36 -0
- package/dist/editing/render.d.ts.map +1 -0
- package/dist/editing/render.js +227 -0
- package/dist/editing/render.js.map +1 -0
- package/dist/editing/self-eval.d.ts +48 -0
- package/dist/editing/self-eval.d.ts.map +1 -0
- package/dist/editing/self-eval.js +293 -0
- package/dist/editing/self-eval.js.map +1 -0
- package/dist/editing/silence.d.ts +76 -0
- package/dist/editing/silence.d.ts.map +1 -0
- package/dist/editing/silence.js +189 -0
- package/dist/editing/silence.js.map +1 -0
- package/dist/editing/types.d.ts +178 -0
- package/dist/editing/types.d.ts.map +1 -0
- package/dist/editing/types.js +13 -0
- package/dist/editing/types.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive.d.ts +12 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +78 -0
- package/dist/interactive.js.map +1 -0
- package/dist/mini-drama/assembler.d.ts +61 -0
- package/dist/mini-drama/assembler.d.ts.map +1 -0
- package/dist/mini-drama/assembler.js +466 -0
- package/dist/mini-drama/assembler.js.map +1 -0
- package/dist/mini-drama/audio-mix.d.ts +65 -0
- package/dist/mini-drama/audio-mix.d.ts.map +1 -0
- package/dist/mini-drama/audio-mix.js +118 -0
- package/dist/mini-drama/audio-mix.js.map +1 -0
- package/dist/mini-drama/cli.d.ts +3 -0
- package/dist/mini-drama/cli.d.ts.map +1 -0
- package/dist/mini-drama/cli.js +2869 -0
- package/dist/mini-drama/cli.js.map +1 -0
- package/dist/mini-drama/fcpxml-export.d.ts +2 -0
- package/dist/mini-drama/fcpxml-export.d.ts.map +1 -0
- package/dist/mini-drama/fcpxml-export.js +5 -0
- package/dist/mini-drama/fcpxml-export.js.map +1 -0
- package/dist/mini-drama/generation-planner.d.ts +24 -0
- package/dist/mini-drama/generation-planner.d.ts.map +1 -0
- package/dist/mini-drama/generation-planner.js +304 -0
- package/dist/mini-drama/generation-planner.js.map +1 -0
- package/dist/mini-drama/location-generator.d.ts +23 -0
- package/dist/mini-drama/location-generator.d.ts.map +1 -0
- package/dist/mini-drama/location-generator.js +144 -0
- package/dist/mini-drama/location-generator.js.map +1 -0
- package/dist/mini-drama/music-cues.d.ts +96 -0
- package/dist/mini-drama/music-cues.d.ts.map +1 -0
- package/dist/mini-drama/music-cues.js +332 -0
- package/dist/mini-drama/music-cues.js.map +1 -0
- package/dist/mini-drama/panel-fixer.d.ts +12 -0
- package/dist/mini-drama/panel-fixer.d.ts.map +1 -0
- package/dist/mini-drama/panel-fixer.js +319 -0
- package/dist/mini-drama/panel-fixer.js.map +1 -0
- package/dist/mini-drama/prompt-builder.d.ts +149 -0
- package/dist/mini-drama/prompt-builder.d.ts.map +1 -0
- package/dist/mini-drama/prompt-builder.js +722 -0
- package/dist/mini-drama/prompt-builder.js.map +1 -0
- package/dist/mini-drama/reference-slots.d.ts +31 -0
- package/dist/mini-drama/reference-slots.d.ts.map +1 -0
- package/dist/mini-drama/reference-slots.js +161 -0
- package/dist/mini-drama/reference-slots.js.map +1 -0
- package/dist/mini-drama/shot-paths.d.ts +77 -0
- package/dist/mini-drama/shot-paths.d.ts.map +1 -0
- package/dist/mini-drama/shot-paths.js +101 -0
- package/dist/mini-drama/shot-paths.js.map +1 -0
- package/dist/mini-drama/storyboard-reference-generator.d.ts +47 -0
- package/dist/mini-drama/storyboard-reference-generator.d.ts.map +1 -0
- package/dist/mini-drama/storyboard-reference-generator.js +293 -0
- package/dist/mini-drama/storyboard-reference-generator.js.map +1 -0
- package/dist/mini-drama/subtitle-generator.d.ts +12 -0
- package/dist/mini-drama/subtitle-generator.d.ts.map +1 -0
- package/dist/mini-drama/subtitle-generator.js +139 -0
- package/dist/mini-drama/subtitle-generator.js.map +1 -0
- package/dist/mini-drama/timeline-export/davinci-fcpxml.d.ts +3 -0
- package/dist/mini-drama/timeline-export/davinci-fcpxml.d.ts.map +1 -0
- package/dist/mini-drama/timeline-export/davinci-fcpxml.js +150 -0
- package/dist/mini-drama/timeline-export/davinci-fcpxml.js.map +1 -0
- package/dist/mini-drama/timeline-export/fcpxml.d.ts +11 -0
- package/dist/mini-drama/timeline-export/fcpxml.d.ts.map +1 -0
- package/dist/mini-drama/timeline-export/fcpxml.js +140 -0
- package/dist/mini-drama/timeline-export/fcpxml.js.map +1 -0
- package/dist/mini-drama/timeline-export/index.d.ts +13 -0
- package/dist/mini-drama/timeline-export/index.d.ts.map +1 -0
- package/dist/mini-drama/timeline-export/index.js +26 -0
- package/dist/mini-drama/timeline-export/index.js.map +1 -0
- package/dist/mini-drama/timeline-export/premiere-xmeml.d.ts +3 -0
- package/dist/mini-drama/timeline-export/premiere-xmeml.d.ts.map +1 -0
- package/dist/mini-drama/timeline-export/premiere-xmeml.js +211 -0
- package/dist/mini-drama/timeline-export/premiere-xmeml.js.map +1 -0
- package/dist/mini-drama/timeline-export/probe.d.ts +53 -0
- package/dist/mini-drama/timeline-export/probe.d.ts.map +1 -0
- package/dist/mini-drama/timeline-export/probe.js +89 -0
- package/dist/mini-drama/timeline-export/probe.js.map +1 -0
- package/dist/mini-drama/timeline-export/types.d.ts +57 -0
- package/dist/mini-drama/timeline-export/types.d.ts.map +1 -0
- package/dist/mini-drama/timeline-export/types.js +14 -0
- package/dist/mini-drama/timeline-export/types.js.map +1 -0
- package/dist/mini-drama/video-generator.d.ts +22 -0
- package/dist/mini-drama/video-generator.d.ts.map +1 -0
- package/dist/mini-drama/video-generator.js +1305 -0
- package/dist/mini-drama/video-generator.js.map +1 -0
- package/dist/mini-drama/voice-reference.d.ts +42 -0
- package/dist/mini-drama/voice-reference.d.ts.map +1 -0
- package/dist/mini-drama/voice-reference.js +170 -0
- package/dist/mini-drama/voice-reference.js.map +1 -0
- package/dist/output/html-renderer.d.ts +2 -0
- package/dist/output/html-renderer.d.ts.map +1 -0
- package/dist/output/html-renderer.js +37 -0
- package/dist/output/html-renderer.js.map +1 -0
- package/dist/parsers/fountain-parser.d.ts +34 -0
- package/dist/parsers/fountain-parser.d.ts.map +1 -0
- package/dist/parsers/fountain-parser.js +71 -0
- package/dist/parsers/fountain-parser.js.map +1 -0
- package/dist/parsers/pdf-parser.d.ts +24 -0
- package/dist/parsers/pdf-parser.d.ts.map +1 -0
- package/dist/parsers/pdf-parser.js +237 -0
- package/dist/parsers/pdf-parser.js.map +1 -0
- package/dist/parsers/scene-extractor.d.ts +41 -0
- package/dist/parsers/scene-extractor.d.ts.map +1 -0
- package/dist/parsers/scene-extractor.js +400 -0
- package/dist/parsers/scene-extractor.js.map +1 -0
- package/dist/series/manager.d.ts +64 -0
- package/dist/series/manager.d.ts.map +1 -0
- package/dist/series/manager.js +282 -0
- package/dist/series/manager.js.map +1 -0
- package/dist/series/types.d.ts +641 -0
- package/dist/series/types.d.ts.map +1 -0
- package/dist/series/types.js +304 -0
- package/dist/series/types.js.map +1 -0
- package/dist/storyboard/assembler.d.ts +134 -0
- package/dist/storyboard/assembler.d.ts.map +1 -0
- package/dist/storyboard/assembler.js +319 -0
- package/dist/storyboard/assembler.js.map +1 -0
- package/dist/storyboard/prompt-builder.d.ts +113 -0
- package/dist/storyboard/prompt-builder.d.ts.map +1 -0
- package/dist/storyboard/prompt-builder.js +578 -0
- package/dist/storyboard/prompt-builder.js.map +1 -0
- package/dist/storyboard/shot-planner.d.ts +34 -0
- package/dist/storyboard/shot-planner.d.ts.map +1 -0
- package/dist/storyboard/shot-planner.js +446 -0
- package/dist/storyboard/shot-planner.js.map +1 -0
- package/dist/user-config.d.ts +15 -0
- package/dist/user-config.d.ts.map +1 -0
- package/dist/user-config.js +103 -0
- package/dist/user-config.js.map +1 -0
- package/dist/venice/audio-preflight.d.ts +80 -0
- package/dist/venice/audio-preflight.d.ts.map +1 -0
- package/dist/venice/audio-preflight.js +142 -0
- package/dist/venice/audio-preflight.js.map +1 -0
- package/dist/venice/audio.d.ts +88 -0
- package/dist/venice/audio.d.ts.map +1 -0
- package/dist/venice/audio.js +234 -0
- package/dist/venice/audio.js.map +1 -0
- package/dist/venice/client.d.ts +86 -0
- package/dist/venice/client.d.ts.map +1 -0
- package/dist/venice/client.js +375 -0
- package/dist/venice/client.js.map +1 -0
- package/dist/venice/edit.d.ts +57 -0
- package/dist/venice/edit.d.ts.map +1 -0
- package/dist/venice/edit.js +100 -0
- package/dist/venice/edit.js.map +1 -0
- package/dist/venice/generate.d.ts +47 -0
- package/dist/venice/generate.d.ts.map +1 -0
- package/dist/venice/generate.js +150 -0
- package/dist/venice/generate.js.map +1 -0
- package/dist/venice/image-bytes.d.ts +26 -0
- package/dist/venice/image-bytes.d.ts.map +1 -0
- package/dist/venice/image-bytes.js +101 -0
- package/dist/venice/image-bytes.js.map +1 -0
- package/dist/venice/models.d.ts +143 -0
- package/dist/venice/models.d.ts.map +1 -0
- package/dist/venice/models.js +984 -0
- package/dist/venice/models.js.map +1 -0
- package/dist/venice/multi-edit.d.ts +40 -0
- package/dist/venice/multi-edit.d.ts.map +1 -0
- package/dist/venice/multi-edit.js +97 -0
- package/dist/venice/multi-edit.js.map +1 -0
- package/dist/venice/provenance.d.ts +66 -0
- package/dist/venice/provenance.d.ts.map +1 -0
- package/dist/venice/provenance.js +151 -0
- package/dist/venice/provenance.js.map +1 -0
- package/dist/venice/recipe.d.ts +69 -0
- package/dist/venice/recipe.d.ts.map +1 -0
- package/dist/venice/recipe.js +103 -0
- package/dist/venice/recipe.js.map +1 -0
- package/dist/venice/rejection.d.ts +63 -0
- package/dist/venice/rejection.d.ts.map +1 -0
- package/dist/venice/rejection.js +111 -0
- package/dist/venice/rejection.js.map +1 -0
- package/dist/venice/seedance-preflight.d.ts +38 -0
- package/dist/venice/seedance-preflight.d.ts.map +1 -0
- package/dist/venice/seedance-preflight.js +29 -0
- package/dist/venice/seedance-preflight.js.map +1 -0
- package/dist/venice/types.d.ts +212 -0
- package/dist/venice/types.d.ts.map +1 -0
- package/dist/venice/types.js +9 -0
- package/dist/venice/types.js.map +1 -0
- package/dist/venice/video.d.ts +77 -0
- package/dist/venice/video.d.ts.map +1 -0
- package/dist/venice/video.js +163 -0
- package/dist/venice/video.js.map +1 -0
- package/dist/venice/voices.d.ts +40 -0
- package/dist/venice/voices.d.ts.map +1 -0
- package/dist/venice/voices.js +194 -0
- package/dist/venice/voices.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// VeniceClient -- low-level HTTP transport for the Venice AI REST API.
|
|
3
|
+
//
|
|
4
|
+
// Handles authentication, serialisation, retries with exponential back-off,
|
|
5
|
+
// and a simple inter-request rate-limit delay.
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// ---- Configuration constants ----------------------------------------------
|
|
8
|
+
const DEFAULT_BASE_URL = "https://api.venice.ai";
|
|
9
|
+
const MAX_RETRIES = 3;
|
|
10
|
+
const INITIAL_BACKOFF_MS = 1_000; // 1 s
|
|
11
|
+
const RATE_LIMIT_DELAY_MS = 250; // 250 ms between requests
|
|
12
|
+
// ---- Custom error ---------------------------------------------------------
|
|
13
|
+
export class VeniceRequestError extends Error {
|
|
14
|
+
status;
|
|
15
|
+
body;
|
|
16
|
+
constructor(message, status, body) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = "VeniceRequestError";
|
|
19
|
+
this.status = status;
|
|
20
|
+
this.body = body;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// ---- Deprecation header surfacing -----------------------------------------
|
|
24
|
+
//
|
|
25
|
+
// Venice returns these headers on every call that uses a deprecated model:
|
|
26
|
+
//
|
|
27
|
+
// x-venice-model-id (the model actually served)
|
|
28
|
+
// x-venice-model-name (display name)
|
|
29
|
+
// x-venice-model-deprecation-warning (free-form notice)
|
|
30
|
+
// x-venice-model-deprecation-date (ISO 8601 date)
|
|
31
|
+
//
|
|
32
|
+
// Source: https://docs.venice.ai/api-reference/api-spec (response headers).
|
|
33
|
+
//
|
|
34
|
+
// Before this change the client read JSON bodies and discarded headers,
|
|
35
|
+
// which meant the harness was completely blind to upcoming Venice model
|
|
36
|
+
// sunsets — a model would keep working with a "deprecation in N days"
|
|
37
|
+
// banner that we never saw, and then start 404ing post-sunset with no
|
|
38
|
+
// warning. (This is exactly what happened with `qwen-2.5-vl` for the QA
|
|
39
|
+
// vision model: the model sunset 2025-09-22 and the harness only learned
|
|
40
|
+
// about it via downstream 404s.)
|
|
41
|
+
//
|
|
42
|
+
// We surface each unique (model, date) deprecation warning ONCE per
|
|
43
|
+
// process via stderr so the MCP can pattern-match `MODEL DEPRECATION` and
|
|
44
|
+
// the agent operating the pipeline can plan a migration before the sunset
|
|
45
|
+
// date. The dedupe key includes the date so a model whose sunset is
|
|
46
|
+
// rescheduled re-warns.
|
|
47
|
+
const seenDeprecations = new Set();
|
|
48
|
+
/**
|
|
49
|
+
* Inspect a Response's headers for Venice deprecation notices and emit
|
|
50
|
+
* a structured stderr warning the first time each unique notice is seen
|
|
51
|
+
* in this process. Returns the parsed notice when present (mostly for
|
|
52
|
+
* testing), otherwise null.
|
|
53
|
+
*
|
|
54
|
+
* Exported for tests; callers in this file invoke it from each request
|
|
55
|
+
* path so every response shape (json, binary, json-or-binary) is covered.
|
|
56
|
+
*/
|
|
57
|
+
export function reportVeniceDeprecation(headers, requestPath) {
|
|
58
|
+
const warning = headers.get("x-venice-model-deprecation-warning");
|
|
59
|
+
if (!warning)
|
|
60
|
+
return null;
|
|
61
|
+
const date = headers.get("x-venice-model-deprecation-date");
|
|
62
|
+
const modelId = headers.get("x-venice-model-id");
|
|
63
|
+
const modelName = headers.get("x-venice-model-name");
|
|
64
|
+
const dedupeKey = `${modelId ?? "(unknown)"}::${date ?? "(no-date)"}`;
|
|
65
|
+
if (!seenDeprecations.has(dedupeKey)) {
|
|
66
|
+
seenDeprecations.add(dedupeKey);
|
|
67
|
+
const id = modelId ?? "(unknown id)";
|
|
68
|
+
const name = modelName ? ` "${modelName}"` : "";
|
|
69
|
+
const when = date ? ` sunset ${date}` : "";
|
|
70
|
+
console.warn(` ⚠ MODEL DEPRECATION: ${id}${name}${when} (via ${requestPath}): ${warning}`);
|
|
71
|
+
console.warn(` Migrate before the sunset date or this call will start returning 404 / 410.`);
|
|
72
|
+
console.warn(` Check the current recommended replacement via inspect.models (MCP) ` +
|
|
73
|
+
`or GET https://api.venice.ai/api/v1/models for the model's traits.`);
|
|
74
|
+
}
|
|
75
|
+
return { modelId, modelName, warning, date };
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Test-only: reset the per-process deduplication state so unit tests can
|
|
79
|
+
* exercise the warn-once behavior across multiple invocations.
|
|
80
|
+
*/
|
|
81
|
+
export function _resetDeprecationDedupeForTests() {
|
|
82
|
+
seenDeprecations.clear();
|
|
83
|
+
}
|
|
84
|
+
// ---- Client ---------------------------------------------------------------
|
|
85
|
+
export class VeniceClient {
|
|
86
|
+
apiKey;
|
|
87
|
+
baseUrl;
|
|
88
|
+
/**
|
|
89
|
+
* Timestamp (epoch ms) of the last request that completed. Used by the
|
|
90
|
+
* simple rate-limiter to ensure a minimum gap between consecutive calls.
|
|
91
|
+
*/
|
|
92
|
+
lastRequestAt = 0;
|
|
93
|
+
/**
|
|
94
|
+
* @param apiKey Bearer token for the Venice API. Falls back to the
|
|
95
|
+
* `VENICE_API_KEY` environment variable when omitted.
|
|
96
|
+
* @param baseUrl Root URL for the API (no trailing slash).
|
|
97
|
+
*/
|
|
98
|
+
constructor(apiKey, baseUrl) {
|
|
99
|
+
const resolvedKey = apiKey ?? process.env.VENICE_API_KEY;
|
|
100
|
+
if (!resolvedKey) {
|
|
101
|
+
throw new Error("Venice API key is required. Pass it explicitly or set the VENICE_API_KEY environment variable.");
|
|
102
|
+
}
|
|
103
|
+
this.apiKey = resolvedKey;
|
|
104
|
+
this.baseUrl = (baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
|
|
105
|
+
}
|
|
106
|
+
// ---- Public API ---------------------------------------------------------
|
|
107
|
+
/** Send a GET request and return parsed JSON. Used by setup/doctor checks. */
|
|
108
|
+
async get(path) {
|
|
109
|
+
await this.applyRateLimit();
|
|
110
|
+
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
111
|
+
headers: { Authorization: `Bearer ${this.apiKey}` },
|
|
112
|
+
});
|
|
113
|
+
this.lastRequestAt = Date.now();
|
|
114
|
+
reportVeniceDeprecation(response.headers, path);
|
|
115
|
+
if (response.ok)
|
|
116
|
+
return (await response.json());
|
|
117
|
+
let errorBody;
|
|
118
|
+
try {
|
|
119
|
+
errorBody = await response.json();
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
errorBody = { raw: await response.text().catch(() => '') };
|
|
123
|
+
}
|
|
124
|
+
const apiError = errorBody;
|
|
125
|
+
throw new VeniceRequestError(apiError?.error?.message ?? `Venice API returned HTTP ${response.status}`, response.status, errorBody);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Send a POST request to `path` with a JSON body and return the parsed
|
|
129
|
+
* response.
|
|
130
|
+
*
|
|
131
|
+
* Automatically retries on transient failures (HTTP 429 / 5xx) up to
|
|
132
|
+
* {@link MAX_RETRIES} times using exponential back-off. A small delay is
|
|
133
|
+
* inserted between consecutive requests to stay within rate limits.
|
|
134
|
+
*
|
|
135
|
+
* @typeParam T Expected shape of the parsed JSON response.
|
|
136
|
+
* @param path API path **including** the leading slash (e.g. `/api/v1/image/generate`).
|
|
137
|
+
* @param body Request payload -- will be JSON-stringified.
|
|
138
|
+
* @returns Parsed JSON response body.
|
|
139
|
+
* @throws {VeniceRequestError} On non-retryable HTTP errors (4xx other than 429).
|
|
140
|
+
* @throws {Error} When all retry attempts are exhausted.
|
|
141
|
+
*/
|
|
142
|
+
async post(path, body) {
|
|
143
|
+
await this.applyRateLimit();
|
|
144
|
+
const url = `${this.baseUrl}${path}`;
|
|
145
|
+
let lastError;
|
|
146
|
+
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
|
147
|
+
if (attempt > 0) {
|
|
148
|
+
const backoff = INITIAL_BACKOFF_MS * Math.pow(2, attempt - 1);
|
|
149
|
+
await VeniceClient.sleep(backoff);
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
const response = await fetch(url, {
|
|
153
|
+
method: "POST",
|
|
154
|
+
headers: {
|
|
155
|
+
"Content-Type": "application/json",
|
|
156
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
157
|
+
},
|
|
158
|
+
body: JSON.stringify(body),
|
|
159
|
+
});
|
|
160
|
+
this.lastRequestAt = Date.now();
|
|
161
|
+
reportVeniceDeprecation(response.headers, path);
|
|
162
|
+
if (response.ok) {
|
|
163
|
+
return (await response.json());
|
|
164
|
+
}
|
|
165
|
+
// Parse the error body for diagnostics.
|
|
166
|
+
let errorBody;
|
|
167
|
+
try {
|
|
168
|
+
errorBody = await response.json();
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
errorBody = { raw: await response.text().catch(() => "") };
|
|
172
|
+
}
|
|
173
|
+
const apiError = errorBody;
|
|
174
|
+
const message = apiError?.error?.message ??
|
|
175
|
+
`Venice API returned HTTP ${response.status}`;
|
|
176
|
+
// Retry on rate-limit (429) and server errors (5xx).
|
|
177
|
+
if (response.status === 429 || response.status >= 500) {
|
|
178
|
+
if (response.status === 429) {
|
|
179
|
+
console.warn(` ⚠ Venice rate-limit (HTTP 429) on ${path}; retrying with exponential back-off (attempt ${attempt + 1}/${MAX_RETRIES}).`);
|
|
180
|
+
}
|
|
181
|
+
lastError = new VeniceRequestError(message, response.status, errorBody);
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
// 410 Gone usually means the model has been removed post-sunset and
|
|
185
|
+
// routing wasn't possible — surface it explicitly so the agent
|
|
186
|
+
// doesn't just see a generic 4xx.
|
|
187
|
+
if (response.status === 410) {
|
|
188
|
+
console.warn(` ⚠ Venice returned 410 Gone on ${path}. The requested model is likely fully retired ` +
|
|
189
|
+
`and Venice could not route to a replacement. Check the deprecation tracker or call ` +
|
|
190
|
+
`GET /api/v1/models to find the current equivalent.`);
|
|
191
|
+
}
|
|
192
|
+
// Non-retryable client error -- throw immediately.
|
|
193
|
+
throw new VeniceRequestError(message, response.status, errorBody);
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
// Network errors (DNS failure, connection reset, etc.) are retryable.
|
|
197
|
+
if (err instanceof VeniceRequestError) {
|
|
198
|
+
// Already classified above; re-throw non-retryable errors.
|
|
199
|
+
if (err.status > 0 && err.status < 500 && err.status !== 429) {
|
|
200
|
+
throw err;
|
|
201
|
+
}
|
|
202
|
+
lastError = err;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
lastError = err instanceof Error ? err : new Error(String(err));
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
throw lastError ?? new Error("Venice API request failed after all retries.");
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* POST with JSON body, receive raw binary (e.g. image/png from multi-edit).
|
|
213
|
+
* Same retry/rate-limit logic as {@link post}.
|
|
214
|
+
*/
|
|
215
|
+
async postBinary(path, body) {
|
|
216
|
+
await this.applyRateLimit();
|
|
217
|
+
const url = `${this.baseUrl}${path}`;
|
|
218
|
+
let lastError;
|
|
219
|
+
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
|
220
|
+
if (attempt > 0) {
|
|
221
|
+
const backoff = INITIAL_BACKOFF_MS * Math.pow(2, attempt - 1);
|
|
222
|
+
await VeniceClient.sleep(backoff);
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
const response = await fetch(url, {
|
|
226
|
+
method: "POST",
|
|
227
|
+
headers: {
|
|
228
|
+
"Content-Type": "application/json",
|
|
229
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
230
|
+
},
|
|
231
|
+
body: JSON.stringify(body),
|
|
232
|
+
});
|
|
233
|
+
this.lastRequestAt = Date.now();
|
|
234
|
+
reportVeniceDeprecation(response.headers, path);
|
|
235
|
+
if (response.ok) {
|
|
236
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
237
|
+
return Buffer.from(arrayBuffer);
|
|
238
|
+
}
|
|
239
|
+
let errorBody;
|
|
240
|
+
try {
|
|
241
|
+
errorBody = await response.json();
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
errorBody = { raw: await response.text().catch(() => "") };
|
|
245
|
+
}
|
|
246
|
+
const apiError = errorBody;
|
|
247
|
+
const message = apiError?.error?.message ??
|
|
248
|
+
`Venice API returned HTTP ${response.status}`;
|
|
249
|
+
if (response.status === 429 || response.status >= 500) {
|
|
250
|
+
lastError = new VeniceRequestError(message, response.status, errorBody);
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
throw new VeniceRequestError(message, response.status, errorBody);
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
if (err instanceof VeniceRequestError) {
|
|
257
|
+
if (err.status > 0 && err.status < 500 && err.status !== 429) {
|
|
258
|
+
throw err;
|
|
259
|
+
}
|
|
260
|
+
lastError = err;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
lastError = err instanceof Error ? err : new Error(String(err));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
throw lastError ?? new Error("Venice API request failed after all retries.");
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* POST with JSON body, receive either JSON status data or raw binary media.
|
|
271
|
+
* Useful for async retrieval endpoints that return JSON while processing and
|
|
272
|
+
* switch to binary once the asset is ready for download.
|
|
273
|
+
*/
|
|
274
|
+
async postBinaryOrJson(path, body) {
|
|
275
|
+
await this.applyRateLimit();
|
|
276
|
+
const url = `${this.baseUrl}${path}`;
|
|
277
|
+
let lastError;
|
|
278
|
+
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
|
279
|
+
if (attempt > 0) {
|
|
280
|
+
const backoff = INITIAL_BACKOFF_MS * Math.pow(2, attempt - 1);
|
|
281
|
+
await VeniceClient.sleep(backoff);
|
|
282
|
+
}
|
|
283
|
+
try {
|
|
284
|
+
const response = await fetch(url, {
|
|
285
|
+
method: "POST",
|
|
286
|
+
headers: {
|
|
287
|
+
"Content-Type": "application/json",
|
|
288
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
289
|
+
},
|
|
290
|
+
body: JSON.stringify(body),
|
|
291
|
+
});
|
|
292
|
+
this.lastRequestAt = Date.now();
|
|
293
|
+
reportVeniceDeprecation(response.headers, path);
|
|
294
|
+
if (response.ok) {
|
|
295
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
296
|
+
if (contentType.includes("application/json")) {
|
|
297
|
+
return {
|
|
298
|
+
contentType,
|
|
299
|
+
value: (await response.json()),
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
contentType,
|
|
304
|
+
value: Buffer.from(await response.arrayBuffer()),
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
let errorBody;
|
|
308
|
+
try {
|
|
309
|
+
errorBody = await response.json();
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
errorBody = { raw: await response.text().catch(() => "") };
|
|
313
|
+
}
|
|
314
|
+
const apiError = errorBody;
|
|
315
|
+
const message = apiError?.error?.message ??
|
|
316
|
+
`Venice API returned HTTP ${response.status}`;
|
|
317
|
+
if (response.status === 429 || response.status >= 500) {
|
|
318
|
+
lastError = new VeniceRequestError(message, response.status, errorBody);
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
throw new VeniceRequestError(message, response.status, errorBody);
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
if (err instanceof VeniceRequestError) {
|
|
325
|
+
if (err.status > 0 && err.status < 500 && err.status !== 429) {
|
|
326
|
+
throw err;
|
|
327
|
+
}
|
|
328
|
+
lastError = err;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
lastError = err instanceof Error ? err : new Error(String(err));
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
throw lastError ?? new Error("Venice API request failed after all retries.");
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Send a chat completion request with multimodal content (text + images).
|
|
339
|
+
* Uses the OpenAI-compatible chat completions endpoint.
|
|
340
|
+
*/
|
|
341
|
+
async chatWithVision(model, systemPrompt, imageDataUris, userPrompt) {
|
|
342
|
+
const content = [];
|
|
343
|
+
for (const uri of imageDataUris) {
|
|
344
|
+
content.push({ type: 'image_url', image_url: { url: uri } });
|
|
345
|
+
}
|
|
346
|
+
content.push({ type: 'text', text: userPrompt });
|
|
347
|
+
const body = {
|
|
348
|
+
model,
|
|
349
|
+
messages: [
|
|
350
|
+
{ role: 'system', content: systemPrompt },
|
|
351
|
+
{ role: 'user', content },
|
|
352
|
+
],
|
|
353
|
+
max_tokens: 2000,
|
|
354
|
+
temperature: 0.3,
|
|
355
|
+
};
|
|
356
|
+
const response = await this.post('/api/v1/chat/completions', body);
|
|
357
|
+
return response.choices?.[0]?.message?.content ?? '';
|
|
358
|
+
}
|
|
359
|
+
// ---- Internals ----------------------------------------------------------
|
|
360
|
+
/**
|
|
361
|
+
* Ensure at least {@link RATE_LIMIT_DELAY_MS} ms have elapsed since the
|
|
362
|
+
* previous request completed.
|
|
363
|
+
*/
|
|
364
|
+
async applyRateLimit() {
|
|
365
|
+
const elapsed = Date.now() - this.lastRequestAt;
|
|
366
|
+
if (elapsed < RATE_LIMIT_DELAY_MS) {
|
|
367
|
+
await VeniceClient.sleep(RATE_LIMIT_DELAY_MS - elapsed);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
/** Promise-based sleep helper. */
|
|
371
|
+
static sleep(ms) {
|
|
372
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/venice/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { VeniceClient } from "./client.js";
|
|
2
|
+
export interface EditImageOptions {
|
|
3
|
+
image: string;
|
|
4
|
+
mask?: string;
|
|
5
|
+
prompt: string;
|
|
6
|
+
strength?: number;
|
|
7
|
+
model?: string;
|
|
8
|
+
steps?: number;
|
|
9
|
+
cfg_scale?: number;
|
|
10
|
+
seed?: number;
|
|
11
|
+
safe_mode?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface EditImageResult {
|
|
14
|
+
base64: string;
|
|
15
|
+
seed: number | undefined;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* @deprecated The /images/edit inpainting endpoint was disabled May 19, 2025.
|
|
19
|
+
* Use multiEditImage from multi-edit.ts instead.
|
|
20
|
+
*/
|
|
21
|
+
export declare function editImage(client: VeniceClient, options: EditImageOptions): Promise<EditImageResult>;
|
|
22
|
+
export interface UpscaleImageOptions {
|
|
23
|
+
/** Base64-encoded image or data URL */
|
|
24
|
+
image: string;
|
|
25
|
+
/** Upscale factor (e.g. 2, 4). Model-dependent. */
|
|
26
|
+
scale?: number;
|
|
27
|
+
/** Model override. Default determined by Venice. */
|
|
28
|
+
model?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface UpscaleImageResult {
|
|
31
|
+
/** Base64-encoded upscaled image */
|
|
32
|
+
base64: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Upscale an image using Venice's AI upscaling endpoint.
|
|
36
|
+
* Returns the upscaled image as base64.
|
|
37
|
+
*/
|
|
38
|
+
export declare function upscaleImage(client: VeniceClient, options: UpscaleImageOptions): Promise<UpscaleImageResult>;
|
|
39
|
+
/**
|
|
40
|
+
* Upscale an image and save the result to disk.
|
|
41
|
+
*/
|
|
42
|
+
export declare function upscaleImageToFile(client: VeniceClient, options: UpscaleImageOptions, outputPath: string): Promise<string>;
|
|
43
|
+
export interface RemoveBackgroundOptions {
|
|
44
|
+
/** Base64-encoded image or data URL */
|
|
45
|
+
image: string;
|
|
46
|
+
/** Model override. Default: bria-bg-remover */
|
|
47
|
+
model?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface RemoveBackgroundResult {
|
|
50
|
+
base64: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Remove the background from an image.
|
|
54
|
+
* Returns the image with transparent background as base64 PNG.
|
|
55
|
+
*/
|
|
56
|
+
export declare function removeBackground(client: VeniceClient, options: RemoveBackgroundOptions): Promise<RemoveBackgroundResult>;
|
|
57
|
+
//# sourceMappingURL=edit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/venice/edit.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAkBhD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CA4C1B;AAID,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAU7B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,EAC5B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAajB;AAID,MAAM,WAAW,uBAAuB;IACtC,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CASjC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Venice Image Editing, Upscaling, and Background Removal
|
|
3
|
+
//
|
|
4
|
+
// - editImage: DEPRECATED -- /api/v1/images/edit was disabled May 2025
|
|
5
|
+
// - upscaleImage: POST /api/v1/image/upscale
|
|
6
|
+
// - removeBackground: POST /api/v1/image/background-remove
|
|
7
|
+
//
|
|
8
|
+
// For layered multi-image editing, use multi-edit.ts instead.
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
import { mkdir } from 'node:fs/promises';
|
|
11
|
+
import { dirname } from 'node:path';
|
|
12
|
+
// ---- Constants ------------------------------------------------------------
|
|
13
|
+
const EDIT_PATH = "/api/v1/images/edit";
|
|
14
|
+
const UPSCALE_PATH = "/api/v1/image/upscale";
|
|
15
|
+
const BACKGROUND_REMOVE_PATH = "/api/v1/image/background-remove";
|
|
16
|
+
// The /images/edit endpoint is deprecated; kept for backwards compat only.
|
|
17
|
+
// Anything that goes downstream into Seedance should use the new
|
|
18
|
+
// `seedream-v5-lite` family, so align the default here too.
|
|
19
|
+
const DEFAULT_MODEL = "seedream-v5-lite";
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated The /images/edit inpainting endpoint was disabled May 19, 2025.
|
|
22
|
+
* Use multiEditImage from multi-edit.ts instead.
|
|
23
|
+
*/
|
|
24
|
+
export async function editImage(client, options) {
|
|
25
|
+
const { image, mask, prompt, strength = 0.65, model = DEFAULT_MODEL, steps, cfg_scale, seed, safe_mode, } = options;
|
|
26
|
+
const body = {
|
|
27
|
+
image,
|
|
28
|
+
prompt,
|
|
29
|
+
strength,
|
|
30
|
+
model,
|
|
31
|
+
};
|
|
32
|
+
if (mask !== undefined)
|
|
33
|
+
body.mask = mask;
|
|
34
|
+
if (steps !== undefined)
|
|
35
|
+
body.steps = steps;
|
|
36
|
+
if (cfg_scale !== undefined)
|
|
37
|
+
body.cfg_scale = cfg_scale;
|
|
38
|
+
if (seed !== undefined)
|
|
39
|
+
body.seed = seed;
|
|
40
|
+
if (safe_mode !== undefined)
|
|
41
|
+
body.safe_mode = safe_mode;
|
|
42
|
+
const raw = await client.post(EDIT_PATH, body);
|
|
43
|
+
const rawImages = raw.images ?? [];
|
|
44
|
+
if (rawImages.length === 0) {
|
|
45
|
+
throw new Error("Venice API returned an empty images array from the edit endpoint.");
|
|
46
|
+
}
|
|
47
|
+
const first = rawImages[0];
|
|
48
|
+
const b64 = typeof first === "string" ? first : first.b64_json;
|
|
49
|
+
const imgSeed = typeof first === "object" && first !== null ? first.seed : undefined;
|
|
50
|
+
return {
|
|
51
|
+
base64: b64,
|
|
52
|
+
seed: imgSeed,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Upscale an image using Venice's AI upscaling endpoint.
|
|
57
|
+
* Returns the upscaled image as base64.
|
|
58
|
+
*/
|
|
59
|
+
export async function upscaleImage(client, options) {
|
|
60
|
+
const body = {
|
|
61
|
+
image: options.image,
|
|
62
|
+
};
|
|
63
|
+
if (options.scale !== undefined)
|
|
64
|
+
body.scale = options.scale;
|
|
65
|
+
if (options.model)
|
|
66
|
+
body.model = options.model;
|
|
67
|
+
const buffer = await client.postBinary(UPSCALE_PATH, body);
|
|
68
|
+
return { base64: buffer.toString('base64') };
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Upscale an image and save the result to disk.
|
|
72
|
+
*/
|
|
73
|
+
export async function upscaleImageToFile(client, options, outputPath) {
|
|
74
|
+
const body = {
|
|
75
|
+
image: options.image,
|
|
76
|
+
};
|
|
77
|
+
if (options.scale !== undefined)
|
|
78
|
+
body.scale = options.scale;
|
|
79
|
+
if (options.model)
|
|
80
|
+
body.model = options.model;
|
|
81
|
+
const buffer = await client.postBinary(UPSCALE_PATH, body);
|
|
82
|
+
await mkdir(dirname(outputPath), { recursive: true });
|
|
83
|
+
const { writeFile } = await import('node:fs/promises');
|
|
84
|
+
await writeFile(outputPath, buffer);
|
|
85
|
+
return outputPath;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Remove the background from an image.
|
|
89
|
+
* Returns the image with transparent background as base64 PNG.
|
|
90
|
+
*/
|
|
91
|
+
export async function removeBackground(client, options) {
|
|
92
|
+
const body = {
|
|
93
|
+
image: options.image,
|
|
94
|
+
};
|
|
95
|
+
if (options.model)
|
|
96
|
+
body.model = options.model;
|
|
97
|
+
const buffer = await client.postBinary(BACKGROUND_REMOVE_PATH, body);
|
|
98
|
+
return { base64: buffer.toString('base64') };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/venice/edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { VeniceClient } from "./client.js";
|
|
2
|
+
import type { ImageGenerateRequest, ImageGenerateResponse, GenerateWithReferencesOptions, GenerateWithReferencesResult } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Generate a single image from a text prompt.
|
|
5
|
+
*
|
|
6
|
+
* This is a straightforward 1:1 mapping to the Venice `/api/v1/image/generate`
|
|
7
|
+
* endpoint. All request fields are forwarded as-is; only `model`, `resolution`,
|
|
8
|
+
* and `aspect_ratio` receive defaults when omitted.
|
|
9
|
+
*
|
|
10
|
+
* @param client An authenticated {@link VeniceClient} instance.
|
|
11
|
+
* @param options Request parameters. At minimum `prompt` is required.
|
|
12
|
+
* @returns The full API response including the `images` array.
|
|
13
|
+
*/
|
|
14
|
+
export declare function generateImage(client: VeniceClient, options: Partial<ImageGenerateRequest> & {
|
|
15
|
+
prompt: string;
|
|
16
|
+
}): Promise<ImageGenerateResponse>;
|
|
17
|
+
/**
|
|
18
|
+
* Generate a scene image while injecting character face references for
|
|
19
|
+
* identity consistency across storyboard frames.
|
|
20
|
+
*
|
|
21
|
+
* **How it works**
|
|
22
|
+
*
|
|
23
|
+
* 1. The caller supplies up to 14 {@link CharacterReference} entries via
|
|
24
|
+
* `options.referenceImages`.
|
|
25
|
+
* 2. The first N entries (where N = `options.faceSlots`, default 5, max 5)
|
|
26
|
+
* are treated as **face references**. For each one a role-assignment line
|
|
27
|
+
* is prepended to the prompt so the model knows which reference image
|
|
28
|
+
* corresponds to which character:
|
|
29
|
+
*
|
|
30
|
+
* ```
|
|
31
|
+
* Image 1: face reference for MARCUS (the detective)
|
|
32
|
+
* Image 2: face reference for LENA (the journalist)
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* 3. All reference images (face + non-face) are concatenated as a
|
|
36
|
+
* comma-separated base-64 string in the `image` field, which Venice
|
|
37
|
+
* interprets as a multi-reference input.
|
|
38
|
+
*
|
|
39
|
+
* 4. The fidelity is set to a moderate default (0.35) to allow creative
|
|
40
|
+
* freedom while anchoring character likeness.
|
|
41
|
+
*
|
|
42
|
+
* @param client An authenticated {@link VeniceClient} instance.
|
|
43
|
+
* @param options Generation parameters plus reference images.
|
|
44
|
+
* @returns The generated image as base-64 and the seed used.
|
|
45
|
+
*/
|
|
46
|
+
export declare function generateWithReferences(client: VeniceClient, options: GenerateWithReferencesOptions): Promise<GenerateWithReferencesResult>;
|
|
47
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/venice/generate.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAE7B,MAAM,YAAY,CAAC;AAuBpB;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1D,OAAO,CAAC,qBAAqB,CAAC,CAiChC;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,4BAA4B,CAAC,CAsFvC"}
|