@blockrun/franklin 3.15.51 → 3.15.53
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/dist/tools/videogen.js +32 -3
- package/package.json +1 -1
package/dist/tools/videogen.js
CHANGED
|
@@ -23,6 +23,7 @@ import path from 'node:path';
|
|
|
23
23
|
import { getOrCreateWallet, getOrCreateSolanaWallet, createPaymentPayload, createSolanaPaymentPayload, parsePaymentRequired, extractPaymentDetails, solanaKeyToBytes, SOLANA_NETWORK, } from '@blockrun/llm';
|
|
24
24
|
import { loadChain, API_URLS, VERSION } from '../config.js';
|
|
25
25
|
import { logger } from '../logger.js';
|
|
26
|
+
import { resolveReferenceImage } from './imagegen.js';
|
|
26
27
|
import { ModelClient } from '../agent/llm.js';
|
|
27
28
|
import { analyzeMediaRequest, renderProposalForAskUser } from '../agent/media-router.js';
|
|
28
29
|
import { recordUsage } from '../stats/tracker.js';
|
|
@@ -46,6 +47,28 @@ function buildExecute(deps) {
|
|
|
46
47
|
const { output_path, model, image_url, duration_seconds, contentId } = rawInput;
|
|
47
48
|
if (!rawInput.prompt)
|
|
48
49
|
return { output: 'Error: prompt is required', isError: true };
|
|
50
|
+
// Resolve image_url before sending. The gateway requires a URL (http(s)
|
|
51
|
+
// or data: URI), but agents naturally pass a local file path —
|
|
52
|
+
// verified 2026-05-04 in a live session: agent passed
|
|
53
|
+
// `/Users/.../keyframe.png` and the gateway returned
|
|
54
|
+
// `400 Invalid request body: invalid_format url path: image_url`.
|
|
55
|
+
// ImageGen already had `resolveReferenceImage` for the same problem;
|
|
56
|
+
// sharing the helper keeps the contract consistent across both tools
|
|
57
|
+
// (local path → base64 data URI; http(s) URL → fetched + inlined;
|
|
58
|
+
// data: URI → passes through). On any resolution failure, surface
|
|
59
|
+
// the message instead of letting the gateway 400 bubble back.
|
|
60
|
+
let resolvedImageUrl;
|
|
61
|
+
if (image_url) {
|
|
62
|
+
try {
|
|
63
|
+
resolvedImageUrl = await resolveReferenceImage(image_url, ctx.workingDir);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
return {
|
|
67
|
+
output: `Could not resolve image_url ${JSON.stringify(image_url)}: ${err.message}`,
|
|
68
|
+
isError: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
49
72
|
// One-shot refinement opt-out: leading `///` tells Franklin "don't
|
|
50
73
|
// refine this prompt." Strip the prefix and pass skipRefine through.
|
|
51
74
|
let prompt = rawInput.prompt;
|
|
@@ -131,7 +154,7 @@ function buildExecute(deps) {
|
|
|
131
154
|
const body = JSON.stringify({
|
|
132
155
|
model: videoModel,
|
|
133
156
|
prompt: chosenPrompt,
|
|
134
|
-
...(
|
|
157
|
+
...(resolvedImageUrl ? { image_url: resolvedImageUrl } : {}),
|
|
135
158
|
...(duration_seconds ? { duration_seconds } : {}),
|
|
136
159
|
});
|
|
137
160
|
const headers = {
|
|
@@ -439,8 +462,14 @@ export function createVideoGenCapability(deps = {}) {
|
|
|
439
462
|
properties: {
|
|
440
463
|
prompt: { type: 'string', description: 'Text description of the video to generate' },
|
|
441
464
|
output_path: { type: 'string', description: 'Where to save the MP4. Default: generated-<timestamp>.mp4 in working directory' },
|
|
442
|
-
model: {
|
|
443
|
-
|
|
465
|
+
model: {
|
|
466
|
+
type: 'string',
|
|
467
|
+
description: 'Video model. Default: xai/grok-imagine-video. Known-valid models on the BlockRun gateway as of 2026-05: ' +
|
|
468
|
+
'xai/grok-imagine-video, bytedance/seedance-1.5-pro, bytedance/seedance-2.0, bytedance/seedance-2.0-fast. ' +
|
|
469
|
+
'Pick from this list; the gateway rejects unknown names with HTTP 400 (no money charged on rejection). ' +
|
|
470
|
+
'Speak "Seedance Pro" → bytedance/seedance-2.0; speak "Seedance fast" → bytedance/seedance-2.0-fast.',
|
|
471
|
+
},
|
|
472
|
+
image_url: { type: 'string', description: 'Optional seed image (image-to-video). Accepts http(s) URL, data: URI, or local file path — local paths get inlined as base64 data URIs automatically.' },
|
|
444
473
|
duration_seconds: { type: 'number', description: 'Duration billed for. Default depends on model (8s for grok-imagine-video).' },
|
|
445
474
|
contentId: { type: 'string', description: 'Optional Content id to attach and budget against.' },
|
|
446
475
|
},
|
package/package.json
CHANGED