@koda-sl/baker-cli 0.387.0 → 0.389.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +147 -33
- package/canvas/static-ad-composition/index.html +253 -0
- package/canvas/static-ad-composition/meta.json +53 -0
- package/dist/{chunk-HJEMOSPH.js → chunk-7OVZ6SOA.js} +13 -2
- package/dist/{chunk-HJEMOSPH.js.map → chunk-7OVZ6SOA.js.map} +1 -1
- package/dist/{chunk-WLDM2TRF.js → chunk-EYN7G4KF.js} +4 -4
- package/dist/{chunk-FGHMWBUD.js → chunk-IOWWKZRF.js} +128 -19
- package/dist/chunk-IOWWKZRF.js.map +1 -0
- package/dist/{chunk-XHC4LMK4.js → chunk-J76AGFBH.js} +7 -7
- package/dist/{chunk-VZEDAFAR.js → chunk-TWSWUIDI.js} +2 -2
- package/dist/{chunk-MF7YA62W.js → chunk-Z7WHG6TA.js} +3 -3
- package/dist/cli.js +43947 -15763
- package/dist/cli.js.map +1 -1
- package/dist/{client-GR6YL3YX.js → client-YUWLIYLF.js} +4 -4
- package/dist/engine/index.js +3 -3
- package/dist/{env-4P5HOGNA.js → env-RQGMYIQN.js} +2 -2
- package/dist/{output-NMQXZF3Z.js → output-POG3LVBW.js} +5 -5
- package/dist/{shared-6762QE6R.js → shared-ZAEUTUNU.js} +6 -6
- package/package.json +4 -1
- package/dist/chunk-FGHMWBUD.js.map +0 -1
- /package/dist/{chunk-WLDM2TRF.js.map → chunk-EYN7G4KF.js.map} +0 -0
- /package/dist/{chunk-XHC4LMK4.js.map → chunk-J76AGFBH.js.map} +0 -0
- /package/dist/{chunk-VZEDAFAR.js.map → chunk-TWSWUIDI.js.map} +0 -0
- /package/dist/{chunk-MF7YA62W.js.map → chunk-Z7WHG6TA.js.map} +0 -0
- /package/dist/{client-GR6YL3YX.js.map → client-YUWLIYLF.js.map} +0 -0
- /package/dist/{env-4P5HOGNA.js.map → env-RQGMYIQN.js.map} +0 -0
- /package/dist/{output-NMQXZF3Z.js.map → output-POG3LVBW.js.map} +0 -0
- /package/dist/{shared-6762QE6R.js.map → shared-ZAEUTUNU.js.map} +0 -0
|
@@ -2,13 +2,13 @@ import {
|
|
|
2
2
|
handleConnectionError,
|
|
3
3
|
needsConnectionFix,
|
|
4
4
|
writeAdsJson
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-J76AGFBH.js";
|
|
6
6
|
import {
|
|
7
7
|
ApiError
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-Z7WHG6TA.js";
|
|
9
9
|
import {
|
|
10
10
|
getEnv
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-7OVZ6SOA.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/ads/meta/shared.ts
|
|
14
14
|
var DAY_MS = 864e5;
|
|
@@ -133,4 +133,4 @@ export {
|
|
|
133
133
|
resolveEffectiveStatus,
|
|
134
134
|
statusFilterHints
|
|
135
135
|
};
|
|
136
|
-
//# sourceMappingURL=chunk-
|
|
136
|
+
//# sourceMappingURL=chunk-EYN7G4KF.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
debugLogHttp,
|
|
3
3
|
readBodyForLog
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-TWSWUIDI.js";
|
|
5
5
|
import {
|
|
6
6
|
API_KEY_FORMAT_MESSAGE,
|
|
7
7
|
DIRECT_ROUTE,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
refuseNonPublicUrl,
|
|
19
19
|
requireConnection,
|
|
20
20
|
shouldEscalate
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-7OVZ6SOA.js";
|
|
22
22
|
|
|
23
23
|
// ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js
|
|
24
24
|
var require_safe_stable_stringify = __commonJS({
|
|
@@ -1340,12 +1340,17 @@ var IMAGE_GENERATE_MODELS = [
|
|
|
1340
1340
|
"openai/gpt-image-2.5-sunburst",
|
|
1341
1341
|
"openai/gpt-image-2",
|
|
1342
1342
|
"openai/gpt-5.4-image-2",
|
|
1343
|
-
"google/gemini-3.1-flash-image
|
|
1343
|
+
"google/gemini-3.1-flash-image",
|
|
1344
1344
|
"google/gemini-3.1-flash-lite-image",
|
|
1345
|
-
"google/gemini-3-pro-image
|
|
1346
|
-
"recraft/recraft-v4.1-pro-vector"
|
|
1345
|
+
"google/gemini-3-pro-image",
|
|
1346
|
+
"recraft/recraft-v4.1-pro-vector",
|
|
1347
|
+
// LEGACY — the preview ids the Gemini image models shipped under until they went GA
|
|
1348
|
+
// on 2026-06-18. Kept so every canvas written with them still validates and re-runs;
|
|
1349
|
+
// never pick them for new work.
|
|
1350
|
+
"google/gemini-3.1-flash-image-preview",
|
|
1351
|
+
"google/gemini-3-pro-image-preview"
|
|
1347
1352
|
];
|
|
1348
|
-
var DEFAULT_IMAGE_GENERATE_MODEL = "google/gemini-3.1-flash-image
|
|
1353
|
+
var DEFAULT_IMAGE_GENERATE_MODEL = "google/gemini-3.1-flash-image";
|
|
1349
1354
|
var VIDEO_GENERATE_MODELS = [
|
|
1350
1355
|
"bytedance/seedance-2.0",
|
|
1351
1356
|
"bytedance/seedance-2.5",
|
|
@@ -1536,6 +1541,32 @@ var MODEL_REGISTRY = {
|
|
|
1536
1541
|
quality: { kind: "string", enum: OPENROUTER_IMAGE_QUALITY }
|
|
1537
1542
|
}
|
|
1538
1543
|
},
|
|
1544
|
+
// The GA Nano Banana ids (2026-06-18). Same surface as the preview entries they
|
|
1545
|
+
// replace — read off GET /api/v1/images/models/google/gemini-3.1-flash-image/endpoints
|
|
1546
|
+
// and .../gemini-3-pro-image/endpoints — so a canvas moves between them unchanged.
|
|
1547
|
+
"google/gemini-3.1-flash-image": {
|
|
1548
|
+
label: "Google Gemini 3.1 Flash Image (Nano Banana 2)",
|
|
1549
|
+
inputs: [],
|
|
1550
|
+
optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: GEMINI_IMAGE_MAX_REFERENCES }],
|
|
1551
|
+
required: ["prompt"],
|
|
1552
|
+
params: {
|
|
1553
|
+
prompt: { kind: "string" },
|
|
1554
|
+
aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR_EXTREME },
|
|
1555
|
+
image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE_EXTENDED }
|
|
1556
|
+
}
|
|
1557
|
+
},
|
|
1558
|
+
"google/gemini-3-pro-image": {
|
|
1559
|
+
label: "Google Gemini 3 Pro Image (Nano Banana Pro)",
|
|
1560
|
+
inputs: [],
|
|
1561
|
+
optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: GEMINI_IMAGE_MAX_REFERENCES }],
|
|
1562
|
+
required: ["prompt"],
|
|
1563
|
+
params: {
|
|
1564
|
+
prompt: { kind: "string" },
|
|
1565
|
+
aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR },
|
|
1566
|
+
image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE }
|
|
1567
|
+
}
|
|
1568
|
+
},
|
|
1569
|
+
// LEGACY preview ids — see IMAGE_GENERATE_MODELS.
|
|
1539
1570
|
"google/gemini-3.1-flash-image-preview": {
|
|
1540
1571
|
label: "Google Gemini 3.1 Flash Image (Preview)",
|
|
1541
1572
|
inputs: [],
|
|
@@ -1573,7 +1604,7 @@ var MODEL_REGISTRY = {
|
|
|
1573
1604
|
}
|
|
1574
1605
|
},
|
|
1575
1606
|
"google/gemini-3-pro-image-preview": {
|
|
1576
|
-
label: "Google Gemini 3 Pro Image (
|
|
1607
|
+
label: "Google Gemini 3 Pro Image (Preview)",
|
|
1577
1608
|
inputs: [],
|
|
1578
1609
|
optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: GEMINI_IMAGE_MAX_REFERENCES }],
|
|
1579
1610
|
required: ["prompt"],
|
|
@@ -1616,6 +1647,35 @@ var MODEL_REGISTRY = {
|
|
|
1616
1647
|
// is baked into the backend handler — params here are semantic levers
|
|
1617
1648
|
// only. Both models consume MULTIPLE reference images via the `references`
|
|
1618
1649
|
// input slot (required: a sheet without source images is just image_generate).
|
|
1650
|
+
"google/gemini-3-pro-image": {
|
|
1651
|
+
label: "Google Gemini 3 Pro Image (Nano Banana Pro)",
|
|
1652
|
+
inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
|
|
1653
|
+
required: ["subject_description", "subject_type"],
|
|
1654
|
+
params: {
|
|
1655
|
+
subject_description: { kind: "string" },
|
|
1656
|
+
subject_type: { kind: "string", enum: ["character", "person", "product", "location"] },
|
|
1657
|
+
views: { kind: "json" },
|
|
1658
|
+
style: { kind: "string" },
|
|
1659
|
+
prompt_override: { kind: "string" },
|
|
1660
|
+
aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR },
|
|
1661
|
+
image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE }
|
|
1662
|
+
}
|
|
1663
|
+
},
|
|
1664
|
+
"google/gemini-3.1-flash-image": {
|
|
1665
|
+
label: "Google Gemini 3.1 Flash Image (Nano Banana 2)",
|
|
1666
|
+
inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
|
|
1667
|
+
required: ["subject_description", "subject_type"],
|
|
1668
|
+
params: {
|
|
1669
|
+
subject_description: { kind: "string" },
|
|
1670
|
+
subject_type: { kind: "string", enum: ["character", "person", "product", "location"] },
|
|
1671
|
+
views: { kind: "json" },
|
|
1672
|
+
style: { kind: "string" },
|
|
1673
|
+
prompt_override: { kind: "string" },
|
|
1674
|
+
aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR_EXTREME },
|
|
1675
|
+
image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE_EXTENDED }
|
|
1676
|
+
}
|
|
1677
|
+
},
|
|
1678
|
+
// LEGACY preview ids, kept so existing canvases re-run.
|
|
1619
1679
|
"google/gemini-3-pro-image-preview": {
|
|
1620
1680
|
label: "Google Gemini 3 Pro Image (Nano Banana Pro)",
|
|
1621
1681
|
inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
|
|
@@ -1654,6 +1714,29 @@ var MODEL_REGISTRY = {
|
|
|
1654
1714
|
// registry can't express "one of" or gate array elements), so `formats`
|
|
1655
1715
|
// is not listed as registry-required. The source creative is a required
|
|
1656
1716
|
// input slot.
|
|
1717
|
+
"google/gemini-3-pro-image": {
|
|
1718
|
+
label: "Google Gemini 3 Pro Image (Nano Banana Pro)",
|
|
1719
|
+
inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
|
|
1720
|
+
required: [],
|
|
1721
|
+
params: {
|
|
1722
|
+
formats: { kind: "json" },
|
|
1723
|
+
platform: { kind: "string", enum: AD_FORMAT_PLATFORMS },
|
|
1724
|
+
guidance: { kind: "string" },
|
|
1725
|
+
image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE }
|
|
1726
|
+
}
|
|
1727
|
+
},
|
|
1728
|
+
"google/gemini-3.1-flash-image": {
|
|
1729
|
+
label: "Google Gemini 3.1 Flash Image (Nano Banana 2)",
|
|
1730
|
+
inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
|
|
1731
|
+
required: [],
|
|
1732
|
+
params: {
|
|
1733
|
+
formats: { kind: "json" },
|
|
1734
|
+
platform: { kind: "string", enum: AD_FORMAT_PLATFORMS },
|
|
1735
|
+
guidance: { kind: "string" },
|
|
1736
|
+
image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE_EXTENDED }
|
|
1737
|
+
}
|
|
1738
|
+
},
|
|
1739
|
+
// LEGACY preview ids, kept so existing canvases re-run.
|
|
1657
1740
|
"google/gemini-3-pro-image-preview": {
|
|
1658
1741
|
label: "Google Gemini 3 Pro Image (Nano Banana Pro)",
|
|
1659
1742
|
inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
|
|
@@ -3133,7 +3216,7 @@ var LocalAssetStore = class {
|
|
|
3133
3216
|
);
|
|
3134
3217
|
const written = await readFile(tmp);
|
|
3135
3218
|
const computed = sha256Hex(written);
|
|
3136
|
-
if (computed !== args.sha256) {
|
|
3219
|
+
if (computed !== args.sha256 && !cdnReencodedImage(res, args.kind)) {
|
|
3137
3220
|
throw new Error(`asset-store: sha mismatch for ${args.url} (got ${computed}, expected ${args.sha256})`);
|
|
3138
3221
|
}
|
|
3139
3222
|
await rename(tmp, dest);
|
|
@@ -3154,6 +3237,9 @@ var LocalAssetStore = class {
|
|
|
3154
3237
|
});
|
|
3155
3238
|
}
|
|
3156
3239
|
};
|
|
3240
|
+
function cdnReencodedImage(res, kind) {
|
|
3241
|
+
return kind === "image" && res.headers.get("cf-polished") !== null;
|
|
3242
|
+
}
|
|
3157
3243
|
function byteLimit(url, maxBytes) {
|
|
3158
3244
|
let total = 0;
|
|
3159
3245
|
return new Transform({
|
|
@@ -7692,7 +7778,7 @@ async function collectFiles(root, current) {
|
|
|
7692
7778
|
import { readFile as readFile9 } from "fs/promises";
|
|
7693
7779
|
import path12 from "path";
|
|
7694
7780
|
import { z as z10 } from "zod";
|
|
7695
|
-
var InputKind = z10.enum(["video", "image", "audio", "json"]);
|
|
7781
|
+
var InputKind = z10.enum(["video", "image", "audio", "json", "font"]);
|
|
7696
7782
|
var InputSpec = z10.object({
|
|
7697
7783
|
kind: InputKind,
|
|
7698
7784
|
required: z10.boolean().optional().default(false),
|
|
@@ -7841,6 +7927,7 @@ function finalize(schema, dflt, required) {
|
|
|
7841
7927
|
}
|
|
7842
7928
|
function defaultFilenameForInput(key, kind) {
|
|
7843
7929
|
if (kind === "video") return `${key}.mp4`;
|
|
7930
|
+
if (kind === "font") return `${key}.font`;
|
|
7844
7931
|
if (kind === "audio") return `${key}.mp3`;
|
|
7845
7932
|
if (kind === "json") return `${key}.json`;
|
|
7846
7933
|
return `${key}.png`;
|
|
@@ -8335,7 +8422,7 @@ async function validateComposition(rawParams) {
|
|
|
8335
8422
|
}
|
|
8336
8423
|
return issues;
|
|
8337
8424
|
}
|
|
8338
|
-
async function validateCompositionParams(rawParams) {
|
|
8425
|
+
async function validateCompositionParams(rawParams, ownedKeys = NODE_OWNED_PARAM_KEYS) {
|
|
8339
8426
|
const issues = [];
|
|
8340
8427
|
if (!rawParams || typeof rawParams !== "object") return issues;
|
|
8341
8428
|
const params = rawParams;
|
|
@@ -8357,7 +8444,7 @@ async function validateCompositionParams(rawParams) {
|
|
|
8357
8444
|
}
|
|
8358
8445
|
const dynamic = {};
|
|
8359
8446
|
for (const [k, v] of Object.entries(params)) {
|
|
8360
|
-
if (
|
|
8447
|
+
if (ownedKeys.has(k)) continue;
|
|
8361
8448
|
dynamic[k] = v;
|
|
8362
8449
|
}
|
|
8363
8450
|
for (const key of Object.keys(dynamic)) {
|
|
@@ -8567,7 +8654,9 @@ var hyperframeSnapshotNode = defineNode({
|
|
|
8567
8654
|
params: HyperframeSnapshotParams,
|
|
8568
8655
|
outputs: HyperframeSnapshotOutputs,
|
|
8569
8656
|
cost: () => ({ credits: 0, seconds_estimate: 3 }),
|
|
8570
|
-
|
|
8657
|
+
// The snapshot's own keys (`wait_for`) are not composition params: checked against the
|
|
8658
|
+
// render node's key set, a canvas that waited on a selector failed validate every time.
|
|
8659
|
+
validateExtra: ({ rawParams }) => validateCompositionParams(rawParams, NODE_OWNED_PARAM_KEYS2),
|
|
8571
8660
|
cacheKeyExtras: async ({ params }) => {
|
|
8572
8661
|
const out = {};
|
|
8573
8662
|
const composition = params.composition;
|
|
@@ -8923,7 +9012,16 @@ var imageGenerateNode = delegated({
|
|
|
8923
9012
|
|
|
8924
9013
|
// src/engine/nodes/remote/imageAspectAdapt.ts
|
|
8925
9014
|
import { z as z18 } from "zod";
|
|
8926
|
-
var ASPECT_ADAPT_MODELS = [
|
|
9015
|
+
var ASPECT_ADAPT_MODELS = [
|
|
9016
|
+
"google/gemini-3-pro-image",
|
|
9017
|
+
"google/gemini-3.1-flash-image",
|
|
9018
|
+
"google/gemini-3-pro-image-preview",
|
|
9019
|
+
"google/gemini-3.1-flash-image-preview"
|
|
9020
|
+
];
|
|
9021
|
+
var PRO_ADAPT_MODELS = /* @__PURE__ */ new Set([
|
|
9022
|
+
"google/gemini-3-pro-image",
|
|
9023
|
+
"google/gemini-3-pro-image-preview"
|
|
9024
|
+
]);
|
|
8927
9025
|
var ASPECT_ADAPT_FORMATS = ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"];
|
|
8928
9026
|
var ImageAspectAdaptParams = z18.object({
|
|
8929
9027
|
model: z18.enum(ASPECT_ADAPT_MODELS),
|
|
@@ -8940,7 +9038,7 @@ var imageAspectAdaptNode = delegated({
|
|
|
8940
9038
|
version: "1.0.0",
|
|
8941
9039
|
category: "image",
|
|
8942
9040
|
summary: "Adapt ONE creative into multiple aspect ratios (Meta: 9:16 stories, 1:1 feed, 4:5, 16:9\u2026) in a single step. Give it either an explicit `formats` list OR a `platform` preset (meta_feed, meta_feed_stories, meta_all, linkedin, google_demandgen, tiktok, youtube) that expands to that platform's canonical set. AI recomposes the layout per format \u2014 identical subject, text, logos, colors, and style; the scene is extended/restructured, never stretched or cropped. Formats that already match the source ratio pass through unchanged at zero cost. Outputs are ordered exactly as the resolved format list.",
|
|
8943
|
-
when_to_use: "Use after a hero creative exists (image_generate, ingest, image_search) to fan it out to every placement format \u2014 wire the creative into `source` and set EITHER `formats` (exact ratios) OR `platform` (e.g. `meta_feed_stories`). Cost is estimated per format; formats matching the source ratio are free pass-throughs. Off-grid platform targets (e.g. Google 1.91:1) are not rendered here \u2014 crop them from the nearest ratio with `baker images crop`. Pick `google/gemini-3.1-flash-image
|
|
9041
|
+
when_to_use: "Use after a hero creative exists (image_generate, ingest, image_search) to fan it out to every placement format \u2014 wire the creative into `source` and set EITHER `formats` (exact ratios) OR `platform` (e.g. `meta_feed_stories`). Cost is estimated per format; formats matching the source ratio are free pass-throughs. Off-grid platform targets (e.g. Google 1.91:1) are not rendered here \u2014 crop them from the nearest ratio with `baker images crop`. Pick `google/gemini-3.1-flash-image` (Nano Banana 2) while iterating, `google/gemini-3-pro-image` (Nano Banana Pro) for final-quality adaptation.",
|
|
8944
9042
|
inputs: z18.object({ source: ImageRef }).loose(),
|
|
8945
9043
|
params: ImageAspectAdaptParams,
|
|
8946
9044
|
outputs: z18.object({ images: z18.array(ImageRef).min(1) }).strict(),
|
|
@@ -8949,7 +9047,7 @@ var imageAspectAdaptNode = delegated({
|
|
|
8949
9047
|
const p = params;
|
|
8950
9048
|
const count = Math.max(1, resolveAdaptFormats(p ?? {}).length);
|
|
8951
9049
|
return {
|
|
8952
|
-
credits: count * (p?.model
|
|
9050
|
+
credits: count * (PRO_ADAPT_MODELS.has(String(p?.model)) ? 20 : 5),
|
|
8953
9051
|
seconds_estimate: 30 + 30 * count
|
|
8954
9052
|
};
|
|
8955
9053
|
}
|
|
@@ -9035,7 +9133,16 @@ var imageLayerizeNode = delegated({
|
|
|
9035
9133
|
|
|
9036
9134
|
// src/engine/nodes/remote/imageReferenceSheet.ts
|
|
9037
9135
|
import { z as z22 } from "zod";
|
|
9038
|
-
var REFERENCE_SHEET_MODELS = [
|
|
9136
|
+
var REFERENCE_SHEET_MODELS = [
|
|
9137
|
+
"google/gemini-3-pro-image",
|
|
9138
|
+
"google/gemini-3.1-flash-image",
|
|
9139
|
+
"google/gemini-3-pro-image-preview",
|
|
9140
|
+
"google/gemini-3.1-flash-image-preview"
|
|
9141
|
+
];
|
|
9142
|
+
var PRO_SHEET_MODELS = /* @__PURE__ */ new Set([
|
|
9143
|
+
"google/gemini-3-pro-image",
|
|
9144
|
+
"google/gemini-3-pro-image-preview"
|
|
9145
|
+
]);
|
|
9039
9146
|
var ImageReferenceSheetParams = z22.object({
|
|
9040
9147
|
model: z22.enum(REFERENCE_SHEET_MODELS),
|
|
9041
9148
|
subject_description: z22.string().min(1),
|
|
@@ -9053,13 +9160,13 @@ var imageReferenceSheetNode = delegated({
|
|
|
9053
9160
|
version: "1.0.0",
|
|
9054
9161
|
category: "image",
|
|
9055
9162
|
summary: "Fuse 1\u20136 images of a single subject (person, character, product, or location/set) into ONE multi-view reference sheet \u2014 a labeled grid in consistent style and lighting: a turnaround (FRONT / SIDE / BACK\u2026) for a person/character/product, or several camera angles of the same room (WIDE / REVERSE / DETAIL\u2026) for a location. Curated models: Gemini 3 Pro Image (best fusion + labels), Gemini 3.1 Flash Image (cheap iteration).",
|
|
9056
|
-
when_to_use: "Use before image_generate / video_generate when a subject must stay consistent across many creatives \u2014 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
|
|
9163
|
+
when_to_use: "Use before image_generate / video_generate when a subject must stay consistent across many creatives \u2014 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` for final 6-view sheets at 2K+, `google/gemini-3.1-flash-image` while iterating.",
|
|
9057
9164
|
inputs: z22.object({ references: z22.array(ImageRef).min(1).max(6) }).loose(),
|
|
9058
9165
|
params: ImageReferenceSheetParams,
|
|
9059
9166
|
outputs: z22.object({ sheet: ImageRef }).strict(),
|
|
9060
9167
|
outputKinds: { sheet: "image" },
|
|
9061
9168
|
cost: ({ params }) => ({
|
|
9062
|
-
credits: params?.model
|
|
9169
|
+
credits: PRO_SHEET_MODELS.has(String(params?.model)) ? 20 : 5,
|
|
9063
9170
|
seconds_estimate: 30
|
|
9064
9171
|
})
|
|
9065
9172
|
});
|
|
@@ -9920,6 +10027,7 @@ export {
|
|
|
9920
10027
|
runFailureCode,
|
|
9921
10028
|
AD_FORMAT_PLATFORMS,
|
|
9922
10029
|
platformFormats,
|
|
10030
|
+
resolveAdaptFormats,
|
|
9923
10031
|
withoutCastName,
|
|
9924
10032
|
frameRealismDirection,
|
|
9925
10033
|
SEEDANCE_DURATIONS,
|
|
@@ -9975,6 +10083,7 @@ export {
|
|
|
9975
10083
|
canonicalUrl,
|
|
9976
10084
|
coercePathUrlToUrl,
|
|
9977
10085
|
toModelSafeImage,
|
|
10086
|
+
loadCompositionMeta,
|
|
9978
10087
|
catalogView,
|
|
9979
10088
|
BackendClient2,
|
|
9980
10089
|
Engine2 as Engine,
|
|
@@ -9986,4 +10095,4 @@ export {
|
|
|
9986
10095
|
defaultRegistry,
|
|
9987
10096
|
createEngineFromEnv
|
|
9988
10097
|
};
|
|
9989
|
-
//# sourceMappingURL=chunk-
|
|
10098
|
+
//# sourceMappingURL=chunk-IOWWKZRF.js.map
|