@nodaro/prompts 1.13.0 → 1.14.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/dist/index.cjs +86 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +87 -8
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/multi-picker-spec.test.ts +21 -1
- package/src/__tests__/person-regional-aesthetic.test.ts +2 -1
- package/src/__tests__/provider-prompt-doctrine.test.ts +39 -0
- package/src/gemini-omni-inputs.ts +11 -3
- package/src/held-prop.ts +1 -0
- package/src/person.ts +4 -0
- package/src/picker-analyzer-registry.ts +37 -0
- package/src/prompt-wizard-categories.ts +6 -0
- package/src/provider-prompt-doctrine.ts +51 -2
- package/src/setting.ts +1 -0
- package/src/style.ts +1 -0
- package/src/styling.ts +5 -1
package/dist/index.cjs
CHANGED
|
@@ -1766,7 +1766,8 @@ var STYLES = [
|
|
|
1766
1766
|
{ id: "pastel", label: "Pastel", description: "Degas-era soft chalk pastel", promptHint: "rendered as a soft chalk pastel drawing, dry powdery pigment laid in feathered strokes on tinted paper with luminous dusty colors, gently blended edges and the dreamy Degas-era atmosphere of dancers in stage light", term: "soft pastel drawing" },
|
|
1767
1767
|
{ id: "acrylic-paint", label: "Acrylic Paint", description: "Fast-drying opaque acrylic on canvas", promptHint: "rendered as an acrylic painting on canvas, fast-drying opaque pigment with crisp sharp edges, confident quick brush strokes, high-key saturated color and a flatter more graphic finish than traditional oil paint", term: "acrylic painting" },
|
|
1768
1768
|
{ id: "mixed-media", label: "Mixed Media", description: "Collage + paint + ink hybrid", promptHint: "rendered as a mixed-media artwork combining torn paper collage, acrylic paint, ink and graphite on a layered substrate, heterogeneous textures, visible tape and stitching, and an exuberant hand-assembled studio-art quality" },
|
|
1769
|
-
{ id: "manga", label: "Manga", description: "Inked B&W Japanese comic panel", promptHint: "rendered as inked manga panel art, crisp black ink on white with confident line weight variation, screen-tone dot patterns for shading, dramatic speed lines and the distinctly Japanese black-and-white comic aesthetic \u2014 separate from full-color anime" }
|
|
1769
|
+
{ id: "manga", label: "Manga", description: "Inked B&W Japanese comic panel", promptHint: "rendered as inked manga panel art, crisp black ink on white with confident line weight variation, screen-tone dot patterns for shading, dramatic speed lines and the distinctly Japanese black-and-white comic aesthetic \u2014 separate from full-color anime" },
|
|
1770
|
+
{ id: "early-color-photo", label: "Early Color Photo", description: "Prokudin-Gorsky / autochrome early-1900s color", promptHint: "rendered as an early-1900s color photograph in the Prokudin-Gorsky / autochrome tradition \u2014 soft three-colour-separation registration, muted dye-toned palette, fine grain and a gentle antique warmth", term: "early autochrome color photograph" }
|
|
1770
1771
|
];
|
|
1771
1772
|
var styleById = new Map(STYLES.map((s) => [s.id, s]));
|
|
1772
1773
|
function getStyle(id) {
|
|
@@ -1832,6 +1833,7 @@ var SETTINGS = [
|
|
|
1832
1833
|
{ id: "parking-lot", label: "Parking Lot", category: "urban", description: "Suburban parking lot at dusk", promptHint: "set in an empty suburban parking lot at dusk with sodium-vapor lamps casting orange pools, scattered shopping carts and painted lane lines" },
|
|
1833
1834
|
{ id: "penthouse", label: "Penthouse", category: "urban", description: "Luxury penthouse with skyline view", promptHint: "set in a luxury penthouse interior with panoramic skyline views, marble floors, modernist furniture and low warm ambient light" },
|
|
1834
1835
|
{ id: "gas-station", label: "Gas Station", category: "urban", description: "Lonely highway gas station at night", promptHint: "set at a lonely highway gas station at night with a fluorescent canopy, bug-swarmed sodium lamps and cracked asphalt" },
|
|
1836
|
+
{ id: "open-air-market", label: "Open-Air Market", category: "urban", description: "Bustling market of vendor stalls under canopies", term: "open-air market", promptHint: "set in a bustling open-air market \u2014 rows of vendor stalls under thatched and canvas canopies, produce piled high, warm dusty light and crowds moving between the stalls" },
|
|
1835
1837
|
// -------------------- Nature --------------------
|
|
1836
1838
|
{ id: "forest", label: "Forest Clearing", category: "nature", description: "Sunlit mossy clearing", promptHint: "set in a sunlit forest clearing with moss-covered stones, dappled light through tall trees and a soft carpet of fallen leaves" },
|
|
1837
1839
|
{ id: "beach", label: "Beach", category: "nature", description: "Wide sandy beach with surf", promptHint: "set on a wide sandy beach with gentle breaking surf, footprints in wet sand and a pastel horizon" },
|
|
@@ -2958,6 +2960,9 @@ var PEOPLE = [
|
|
|
2958
2960
|
{ id: "mumbai-bollywood", label: "Mumbai Bollywood", group: "Asia", dimension: "regional-aesthetic", description: "Mumbai Indian film-industry aesthetic", promptHint: "a Mumbai Bollywood aesthetic \u2014 Indian film-industry vibe, vibrant statement-glamour", term: "mumbai bollywood aesthetic" },
|
|
2959
2961
|
{ id: "south-india-traditional", label: "South India Traditional", group: "Asia", dimension: "regional-aesthetic", description: "Tamil / Kerala temple-town classical aesthetic", promptHint: "a South Indian traditional aesthetic \u2014 Tamil / Kerala temple-town vibe, classical refinement", term: "south indian traditional aesthetic" },
|
|
2960
2962
|
{ id: "bangkok-street", label: "Bangkok Street", group: "Asia", dimension: "regional-aesthetic", description: "Bangkok Thai night-market neon-urban aesthetic", promptHint: "a Bangkok street aesthetic \u2014 Thai night-market energy, neon-and-warmth urban vibe", term: "bangkok street aesthetic" },
|
|
2963
|
+
// ----- Central Asia -----
|
|
2964
|
+
{ id: "samarkand-silk-road", label: "Samarkand Silk Road", group: "Central Asia", dimension: "regional-aesthetic", description: "Uzbek Silk Road bazaar aesthetic (Samarkand / Bukhara)", promptHint: "a Central Asian Silk Road aesthetic \u2014 Samarkand / Bukhara bazaar vibe, ikat-and-suzani textiles, sun-baked adobe and blue-tiled madrasa mood", term: "samarkand silk road aesthetic" },
|
|
2965
|
+
{ id: "tashkent-modern", label: "Tashkent Modern", group: "Central Asia", dimension: "regional-aesthetic", description: "Contemporary Uzbek metropolitan Central Asian aesthetic", promptHint: "a modern Tashkent aesthetic \u2014 contemporary Uzbek metropolitan vibe, Soviet-modern-meets-Silk-Road blend, warm steppe-city confidence", term: "tashkent modern aesthetic" },
|
|
2961
2966
|
// ----- Latin America -----
|
|
2962
2967
|
{ id: "carioca-rio", label: "Carioca (Rio)", group: "Latin America", dimension: "regional-aesthetic", description: "Rio de Janeiro beach-and-favela-music Brazilian aesthetic", promptHint: "a Carioca aesthetic \u2014 Rio de Janeiro beach-and-favela-music vibe, sun-warmed Brazilian energy", term: "carioca aesthetic" },
|
|
2963
2968
|
{ id: "paulista", label: "Paulista (S\xE3o Paulo)", group: "Latin America", dimension: "regional-aesthetic", description: "S\xE3o Paulo metropolitan Brazilian creative-class aesthetic", promptHint: "a Paulista aesthetic \u2014 S\xE3o Paulo metropolitan vibe, urban-Brazilian creative-class polish", term: "paulista aesthetic" },
|
|
@@ -3798,6 +3803,9 @@ var STYLINGS = [
|
|
|
3798
3803
|
{ id: "outfit-fairy", label: "Fairy", dimension: "outfit", description: "Fantasy fairy: gauzy wings, flower crown, ethereal dress", promptHint: "wearing a fantasy fairy costume \u2014 gauzy translucent wings, a flower crown, and an ethereal flowing dress", term: "fairy costume with wings" },
|
|
3799
3804
|
{ id: "outfit-mermaid", label: "Mermaid", dimension: "outfit", description: "Fantasy mermaid: scaled tail/skirt, shell top, flowing hair", promptHint: "wearing a fantasy mermaid costume \u2014 a scaled tail or fitted scaled skirt, a shell top, and long flowing hair", term: "mermaid costume" },
|
|
3800
3805
|
{ id: "outfit-pharaoh", label: "Pharaoh Regalia", dimension: "outfit", description: "Ancient Egyptian royalty: usekh collar, pectoral, pleated kilt", promptHint: "wearing ancient Egyptian pharaoh regalia \u2014 a broad beaded usekh collar, a jeweled falcon pectoral, and a pleated linen shendyt kilt with golden arm cuffs" },
|
|
3806
|
+
{ id: "outfit-workwear-overalls", label: "Workwear Overalls", dimension: "outfit", description: "Denim bib overalls over a plaid flannel shirt", promptHint: "dressed in a farmer's workwear outfit \u2014 denim bib overalls over a checked plaid flannel shirt, sturdy and worn-in", term: "denim overalls and plaid shirt" },
|
|
3807
|
+
{ id: "outfit-chapan", label: "Chapan Robe", dimension: "outfit", description: "Central Asian long quilted ikat robe", promptHint: "dressed in a traditional Central Asian chapan \u2014 a long quilted robe with an ikat-striped weave, tied at the waist with a sash" },
|
|
3808
|
+
{ id: "outfit-caftan", label: "Caftan", dimension: "outfit", description: "Long flowing Middle-Eastern / North-African robe", promptHint: "dressed in a long flowing caftan robe, a full-length garment worn across the Middle East and North Africa" },
|
|
3801
3809
|
// -------------------- Top (upper-body garment) --------------------
|
|
3802
3810
|
{ id: "top-tshirt", label: "T-Shirt", dimension: "top", description: "Plain crewneck t-shirt", promptHint: "wearing a fitted plain crewneck t-shirt with short sleeves" },
|
|
3803
3811
|
{ id: "top-tank", label: "Tank Top", dimension: "top", description: "Scoop-neck tank top", promptHint: "wearing a fitted scoop-neck tank top with thin shoulder straps" },
|
|
@@ -3972,6 +3980,8 @@ var STYLING_FIELD_BY_DIMENSION = {
|
|
|
3972
3980
|
"wardrobe-state": "wardrobeState"
|
|
3973
3981
|
};
|
|
3974
3982
|
var MAX_SELECTED_BY_STYLING_DIMENSION = {
|
|
3983
|
+
headwear: 2,
|
|
3984
|
+
// a hat layered over a wrap/turban
|
|
3975
3985
|
jewelry: 3,
|
|
3976
3986
|
"wardrobe-state": 3,
|
|
3977
3987
|
"hair-state": 2
|
|
@@ -6326,7 +6336,8 @@ var HELD_PROPS = [
|
|
|
6326
6336
|
{ id: "flashlight", label: "Flashlight", category: "occupational", description: "Modern flashlight cutting a beam", promptHint: "holding a modern flashlight raised forward in one hand, a sharp white beam cutting through the darkness ahead and side-lighting the face", term: "holding a flashlight raised forward" },
|
|
6327
6337
|
{ id: "compass", label: "Compass", category: "occupational", description: "Vintage handheld nautical compass", promptHint: "holding a vintage brass nautical compass open in one cupped palm at chest height, the needle clearly visible as the eyes drift down to read the bearing", term: "holding an open brass nautical compass" },
|
|
6328
6338
|
{ id: "bow-and-arrow", label: "Bow and Arrow", category: "occupational", description: "Drawn archery bow with arrow nocked", promptHint: "holding an archery bow drawn at full tension with one hand on the grip and the other pulling the string back to the cheek, an arrow nocked and aimed forward", term: "drawing an archery bow with a nocked arrow" },
|
|
6329
|
-
{ id: "shield", label: "Shield", category: "occupational", description: "Handheld medieval shield", promptHint: "holding a medieval shield raised across the body with one arm strapped through the back, the front face angled forward in a defensive stance", term: "holding a raised medieval shield" }
|
|
6339
|
+
{ id: "shield", label: "Shield", category: "occupational", description: "Handheld medieval shield", promptHint: "holding a medieval shield raised across the body with one arm strapped through the back, the front face angled forward in a defensive stance", term: "holding a raised medieval shield" },
|
|
6340
|
+
{ id: "work-gloves", label: "Work Gloves", category: "occupational", description: "Worn leather work gloves held in hand", promptHint: "holding a worn pair of tan leather work gloves in both hands at waist height, the thick weathered leather clearly visible", term: "holding a pair of leather work gloves" }
|
|
6330
6341
|
];
|
|
6331
6342
|
var heldPropById = new Map(HELD_PROPS.map((p) => [p.id, p]));
|
|
6332
6343
|
function getHeldProp(id) {
|
|
@@ -13022,10 +13033,13 @@ function resolveSeedance2Inputs(args) {
|
|
|
13022
13033
|
droppedRefImages
|
|
13023
13034
|
};
|
|
13024
13035
|
}
|
|
13025
|
-
var
|
|
13036
|
+
var DEFAULT_GEMINI_OMNI_PROVIDER = "gemini-omni-video";
|
|
13037
|
+
function geminiOmniInputSlots(provider) {
|
|
13038
|
+
return shared.VIDEO_REF_LIMITS_BY_PROVIDER[provider ?? DEFAULT_GEMINI_OMNI_PROVIDER]?.images ?? 7;
|
|
13039
|
+
}
|
|
13026
13040
|
function resolveGeminiOmniI2vInputs(args) {
|
|
13027
13041
|
const refs = (args.refImageUrls ?? []).filter((u) => typeof u === "string" && u.length > 0);
|
|
13028
|
-
const slots =
|
|
13042
|
+
const slots = geminiOmniInputSlots(args.provider) - (args.videoConnected ? 2 : 0);
|
|
13029
13043
|
const refSlots = Math.max(0, slots - 1);
|
|
13030
13044
|
const kept = refs.slice(0, refSlots);
|
|
13031
13045
|
const droppedRefImages = refs.length - kept.length;
|
|
@@ -27864,6 +27878,23 @@ var GAPS_SCHEMA = external_exports.object({
|
|
|
27864
27878
|
).max(8).default([])
|
|
27865
27879
|
}).default({ missingItems: [], missingCategories: [] });
|
|
27866
27880
|
var MULTI_CACHE = /* @__PURE__ */ new Map();
|
|
27881
|
+
function pickerDisplayName(type) {
|
|
27882
|
+
return type.split("-").map((w) => w.length > 0 ? w[0].toUpperCase() + w.slice(1) : w).join(" ");
|
|
27883
|
+
}
|
|
27884
|
+
function buildOtherPickersLegend(sorted) {
|
|
27885
|
+
const otherTypes = PICKER_TYPES.filter((t) => !sorted.includes(t));
|
|
27886
|
+
if (otherTypes.length === 0) return "";
|
|
27887
|
+
const lines = otherTypes.map((type) => {
|
|
27888
|
+
const descriptor = PICKER_ANALYZER_REGISTRY[type];
|
|
27889
|
+
if (descriptor.kind === "flat") {
|
|
27890
|
+
return `- ${type}: ${descriptor.label}`;
|
|
27891
|
+
}
|
|
27892
|
+
const dims = descriptor.order.map((k) => descriptor.labels[k]).filter(Boolean).join(", ");
|
|
27893
|
+
return `- ${type}: ${pickerDisplayName(type)}${dims ? ` \u2014 ${dims}` : ""}`;
|
|
27894
|
+
});
|
|
27895
|
+
return `Non-wired pickers \u2014 use one of these keys in a gap's \`picker\` when an attribute belongs to it:
|
|
27896
|
+
${lines.join("\n")}`;
|
|
27897
|
+
}
|
|
27867
27898
|
function buildMultiPickerAnalyzerSpec(types) {
|
|
27868
27899
|
const sorted = [...new Set(types)].sort();
|
|
27869
27900
|
const key = sorted.join(",");
|
|
@@ -27881,7 +27912,8 @@ ${buildPickerLegend(spec)}`);
|
|
|
27881
27912
|
const result = {
|
|
27882
27913
|
schema: external_exports.object(shape).strict(),
|
|
27883
27914
|
toolName: "emit_pickers",
|
|
27884
|
-
legend: legendParts.join("\n\n")
|
|
27915
|
+
legend: legendParts.join("\n\n"),
|
|
27916
|
+
otherPickersLegend: buildOtherPickersLegend(sorted)
|
|
27885
27917
|
};
|
|
27886
27918
|
MULTI_CACHE.set(key, result);
|
|
27887
27919
|
return result;
|
|
@@ -28287,8 +28319,8 @@ Sources: Google Cloud "Ultimate prompting guide for Veo 3.1"
|
|
|
28287
28319
|
KIE VEO API docs (docs.kie.ai/veo3-api/generate-veo-3-video). Captured 2026-08-09.`
|
|
28288
28320
|
};
|
|
28289
28321
|
var GEMINI_OMNI_DOCTRINE = {
|
|
28290
|
-
providers: ["gemini-omni-video"],
|
|
28291
|
-
heading: "Gemini Omni
|
|
28322
|
+
providers: ["gemini-omni-video", "gemini-omni-flash"],
|
|
28323
|
+
heading: "Gemini Omni (gemini-omni-video, gemini-omni-flash)",
|
|
28292
28324
|
tips: [
|
|
28293
28325
|
"Multimodal Google video with native audio: text-to-video, image-to-video, and video-edit through the same prompt surface. 4/6/8/10s; 720p/1080p or 4K tier.",
|
|
28294
28326
|
"Structure like the platform default: subject \u2192 action \u2192 scene \u2192 lighting \u2192 camera \u2192 style. Quote dialogue lines to have them spoken; describe SFX/ambience plainly in the prompt.",
|
|
@@ -28310,6 +28342,7 @@ subject \u2192 action \u2192 scene/environment \u2192 lighting \u2192 camera mov
|
|
|
28310
28342
|
|
|
28311
28343
|
**Duration & tiers**
|
|
28312
28344
|
- 4 / 6 / 8 / 10 seconds. 720p/1080p tier or the pricier 4K tier \u2014 pick 4K only when the deliverable needs it (nearly 2\xD7 the credits).
|
|
28345
|
+
- gemini-omni-flash is the faster/cheaper tier with the identical request surface \u2014 same 4/6/8/10s, same 720p/1080p and 4K tiers, same video-edit path. Everything above applies verbatim.
|
|
28313
28346
|
|
|
28314
28347
|
Source: KIE gemini-omni-video market contract (parameters + live behavior probed for the
|
|
28315
28348
|
aspect-ratio hard-reject, see providers/kie/video.ts). Captured 2026-08-09.`
|
|
@@ -28379,6 +28412,45 @@ push-in (intimacy/tension), pull-out (scale/isolation), tracking shot, orbit, fi
|
|
|
28379
28412
|
Source: Alibaba Cloud Model Studio \u2014 "Text-to-video / image-to-video prompt guide"
|
|
28380
28413
|
(alibabacloud.com/help/en/model-studio/text-to-video-prompt). Captured 2026-08-09.`
|
|
28381
28414
|
};
|
|
28415
|
+
var WAN_3_DOCTRINE = {
|
|
28416
|
+
providers: ["wan-3", "wan-3-prime"],
|
|
28417
|
+
heading: "Wan 3.0 (wan-3, wan-3-prime)",
|
|
28418
|
+
tips: [
|
|
28419
|
+
"Two INPUT MODES, exclusive on the wire: first/last frame, OR reference mode (images + videos + audio). With any reference wired the platform folds the frame into the references and names it in the prompt.",
|
|
28420
|
+
`References bind by ordinal token in array order: Image1, Image2, Video1, Audio1 \u2014 no space, unlike Wan 2.x's "Image 1". Name every wired asset or it may be ignored.`,
|
|
28421
|
+
"Reference caps: 10 images / 5 videos / 5 audio clips; each video and each audio clip 1-15s, with \u226415s combined per array. With reference videos, input seconds + output duration \u2264 30.",
|
|
28422
|
+
"2-30 seconds (default 5); 480p/720p/1080p; aspect adaptive (default, matches the input media) or 16:9 / 4:3 / 1:1 / 3:4 / 9:16. Prompt cap 20,000 chars \u2014 excess is truncated silently.",
|
|
28423
|
+
'`audio` is a boolean, ON by default: the clip comes back with an ambient/SFX track. Cue the sound you want in the prompt, or state the exclusion ("no music") \u2014 it is not a dialogue guarantee.',
|
|
28424
|
+
"wan-3-prime is the HIGH-SPEED tier: identical surface and limits, faster turnaround at a higher per-second rate. It is not a quality upgrade \u2014 choose it for latency, not for looks."
|
|
28425
|
+
],
|
|
28426
|
+
doctrine: `Prompt structure (no public Wan 3.0 prompt guide exists \u2014 the KIE API contract is the
|
|
28427
|
+
doctrine source, like MiniMax H3 and HappyHorse; platform-standard structure applies):
|
|
28428
|
+
subject \u2192 action \u2192 scene/environment \u2192 lighting \u2192 camera movement \u2192 style \u2192 constraints.
|
|
28429
|
+
|
|
28430
|
+
**Modes (mutually exclusive at the provider)**
|
|
28431
|
+
- Frame mode: first_frame_url, optionally with last_frame_url, and NO references \u2014 the frames anchor the shot exactly, so describe MOTION and camera, not the still.
|
|
28432
|
+
- Reference mode: image / video / audio reference arrays. The provider CANNOT take these together with the first/last frame parameters, so when both are wired the platform folds \u2014 the frame is appended to the reference images (after the caller's own, ordinals unchanged) and bound in the prompt as the opening/closing frame. Write for reference mode whenever a reference is attached.
|
|
28433
|
+
- Text-only runs are supported and are the model's default mode.
|
|
28434
|
+
|
|
28435
|
+
**Reference binding**
|
|
28436
|
+
- Assets bind by ORDINAL TOKEN in array order: Image1, Image2, \u2026, Video1, \u2026, Audio1, \u2026. Note the format has NO space \u2014 Wan 2.x's "Image 1" is a different generation and does not apply here.
|
|
28437
|
+
- Write the binding into the prompt explicitly ("Image1 walks into the room described in Image2"); an unnamed reference may simply be ignored.
|
|
28438
|
+
- Caps: up to 10 images, 5 videos, 5 audio clips. Each video and each audio clip must be 1-15s with \u226415s combined per array. Audio should not be the only media input \u2014 pair it with an image or a video.
|
|
28439
|
+
|
|
28440
|
+
**Duration, resolution, aspect**
|
|
28441
|
+
- 2-30 seconds (provider default 5). With reference videos there is an extra ceiling: input video duration + output duration \u2264 30 seconds.
|
|
28442
|
+
- 480p / 720p / 1080p. Aspect "adaptive" (the default \u2014 the model selects the ratio from the input media and intent) or 16:9 / 4:3 / 1:1 / 3:4 / 9:16. There is no 21:9.
|
|
28443
|
+
- Prompts accept Chinese and English, up to 20,000 characters; anything beyond is truncated silently, so front-load the load-bearing content.
|
|
28444
|
+
|
|
28445
|
+
**Audio**
|
|
28446
|
+
- The "audio" boolean defaults ON and produces an ambient/SFX track with the clip. Describe the soundscape you want plainly ("rain on glass, distant traffic"), or state the exclusion, or turn the toggle off. The contract documents no lip-synced dialogue guarantee \u2014 plan spoken lines as a separate TTS + lip-sync pass.
|
|
28447
|
+
|
|
28448
|
+
**Tiers**
|
|
28449
|
+
- wan-3 and wan-3-prime take identical inputs. Prime trades a higher per-second rate for faster turnaround; it is not documented as a quality tier.
|
|
28450
|
+
|
|
28451
|
+
Source: KIE Wan 3.0 market contract (docs.kie.ai/market/wan/3-0-video,
|
|
28452
|
+
docs.kie.ai/market/wan/3-0-video-prime). Captured 2026-09-01.`
|
|
28453
|
+
};
|
|
28382
28454
|
var HAPPYHORSE_DOCTRINE = {
|
|
28383
28455
|
providers: ["happyhorse", "happyhorse-i2v", "happyhorse-ref2v", "happyhorse-edit"],
|
|
28384
28456
|
heading: "HappyHorse 1.1 (happyhorse, happyhorse-i2v, happyhorse-ref2v)",
|
|
@@ -28434,6 +28506,7 @@ var PROVIDER_PROMPT_DOCTRINES = [
|
|
|
28434
28506
|
GEMINI_OMNI_DOCTRINE,
|
|
28435
28507
|
GROK_IMAGINE_DOCTRINE,
|
|
28436
28508
|
WAN_DOCTRINE,
|
|
28509
|
+
WAN_3_DOCTRINE,
|
|
28437
28510
|
HAPPYHORSE_DOCTRINE,
|
|
28438
28511
|
RUNWAY_KIE_DOCTRINE
|
|
28439
28512
|
];
|
|
@@ -28658,6 +28731,9 @@ var PROVIDER_CAPABILITIES = {
|
|
|
28658
28731
|
"ltx-2.3-pro": "Lightricks LTX 2.3 Pro \u2014 text/image/audio\u2192video, 6\u201310s, up to 4K",
|
|
28659
28732
|
"ltx-2.3-fast": "Lightricks LTX 2.3 Fast \u2014 text/image\u2192video, 6\u201320s, up to 4K",
|
|
28660
28733
|
"gemini-omni-video": "Google Gemini Omni \u2014 multimodal video with native audio, 4\u201310s, up to 4K.",
|
|
28734
|
+
"gemini-omni-flash": "Google Gemini Omni Flash \u2014 faster, cheaper Omni tier; multimodal video with native audio, 4\u201310s, up to 4K.",
|
|
28735
|
+
"wan-3": "Wan 3.0 \u2014 multimodal refs (10 images / 5 videos / 5 audio) or first+last frame, native audio, 2\u201330s, 480p/720p/1080p",
|
|
28736
|
+
"wan-3-prime": "Wan 3.0 Prime \u2014 high-speed Wan 3.0 tier; same surface, faster turnaround at a higher rate",
|
|
28661
28737
|
"grok-imagine-video-1.5": "Grok Imagine 1.5 \u2014 image-to-video only; requires an input image"
|
|
28662
28738
|
},
|
|
28663
28739
|
"image-to-video": {
|
|
@@ -28691,6 +28767,9 @@ var PROVIDER_CAPABILITIES = {
|
|
|
28691
28767
|
"ltx-2.3-pro": "Lightricks LTX 2.3 Pro \u2014 start/end frame i2v + audio\u2192video, 6\u201310s, up to 4K",
|
|
28692
28768
|
"ltx-2.3-fast": "Lightricks LTX 2.3 Fast \u2014 start/end frame i2v, 6\u201320s, up to 4K",
|
|
28693
28769
|
"gemini-omni-video": "Google Gemini Omni \u2014 multimodal video with native audio, 4\u201310s, up to 4K.",
|
|
28770
|
+
"gemini-omni-flash": "Google Gemini Omni Flash \u2014 faster, cheaper Omni tier; multimodal video with native audio, 4\u201310s, up to 4K.",
|
|
28771
|
+
"wan-3": "Wan 3.0 \u2014 multimodal refs (10 images / 5 videos / 5 audio) or first+last frame, native audio, 2\u201330s, 480p/720p/1080p",
|
|
28772
|
+
"wan-3-prime": "Wan 3.0 Prime \u2014 high-speed Wan 3.0 tier; same surface, faster turnaround at a higher rate",
|
|
28694
28773
|
"grok-imagine-video-1.5": "Grok Imagine 1.5 \u2014 stylized animation, 1\u201315s, 480p/720p (image required)"
|
|
28695
28774
|
},
|
|
28696
28775
|
"video-to-video": {
|