@nodaro/prompts 1.40.0 → 1.41.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 CHANGED
@@ -10,7 +10,7 @@ require('./chunk-4GKTOVFM.cjs');
10
10
  var chunkXUZXBY75_cjs = require('./chunk-XUZXBY75.cjs');
11
11
  var chunkUXDKZVNN_cjs = require('./chunk-UXDKZVNN.cjs');
12
12
  var chunkSZU4MZ36_cjs = require('./chunk-SZU4MZ36.cjs');
13
- var chunkDQFQJECU_cjs = require('./chunk-DQFQJECU.cjs');
13
+ var chunkXTOSNRWT_cjs = require('./chunk-XTOSNRWT.cjs');
14
14
  var chunkNAFD6MGH_cjs = require('./chunk-NAFD6MGH.cjs');
15
15
  var chunk2NJTFCKQ_cjs = require('./chunk-2NJTFCKQ.cjs');
16
16
  require('./chunk-TUHVGM6V.cjs');
@@ -558,183 +558,183 @@ Object.defineProperty(exports, "computePackSidecarCoverage", {
558
558
  });
559
559
  Object.defineProperty(exports, "AD_CREATIVE_ANALYSIS_FIELDS", {
560
560
  enumerable: true,
561
- get: function () { return chunkDQFQJECU_cjs.AD_CREATIVE_ANALYSIS_FIELDS; }
561
+ get: function () { return chunkXTOSNRWT_cjs.AD_CREATIVE_ANALYSIS_FIELDS; }
562
562
  });
563
563
  Object.defineProperty(exports, "AD_CREATIVE_ANALYSIS_SYSTEM_PROMPT", {
564
564
  enumerable: true,
565
- get: function () { return chunkDQFQJECU_cjs.AD_CREATIVE_ANALYSIS_SYSTEM_PROMPT; }
565
+ get: function () { return chunkXTOSNRWT_cjs.AD_CREATIVE_ANALYSIS_SYSTEM_PROMPT; }
566
566
  });
567
567
  Object.defineProperty(exports, "AUDIO_WIZARD_CATEGORIES", {
568
568
  enumerable: true,
569
- get: function () { return chunkDQFQJECU_cjs.AUDIO_WIZARD_CATEGORIES; }
569
+ get: function () { return chunkXTOSNRWT_cjs.AUDIO_WIZARD_CATEGORIES; }
570
570
  });
571
571
  Object.defineProperty(exports, "DEFAULT_OWN_MOTION", {
572
572
  enumerable: true,
573
- get: function () { return chunkDQFQJECU_cjs.DEFAULT_OWN_MOTION; }
573
+ get: function () { return chunkXTOSNRWT_cjs.DEFAULT_OWN_MOTION; }
574
574
  });
575
575
  Object.defineProperty(exports, "IMAGE_REFERENCE_PROMPT_DOCTRINE", {
576
576
  enumerable: true,
577
- get: function () { return chunkDQFQJECU_cjs.IMAGE_REFERENCE_PROMPT_DOCTRINE; }
577
+ get: function () { return chunkXTOSNRWT_cjs.IMAGE_REFERENCE_PROMPT_DOCTRINE; }
578
578
  });
579
579
  Object.defineProperty(exports, "IMAGE_WIZARD_CATEGORIES", {
580
580
  enumerable: true,
581
- get: function () { return chunkDQFQJECU_cjs.IMAGE_WIZARD_CATEGORIES; }
581
+ get: function () { return chunkXTOSNRWT_cjs.IMAGE_WIZARD_CATEGORIES; }
582
582
  });
583
583
  Object.defineProperty(exports, "LLM_CHAT_WIZARD_CATEGORIES", {
584
584
  enumerable: true,
585
- get: function () { return chunkDQFQJECU_cjs.LLM_CHAT_WIZARD_CATEGORIES; }
585
+ get: function () { return chunkXTOSNRWT_cjs.LLM_CHAT_WIZARD_CATEGORIES; }
586
586
  });
587
587
  Object.defineProperty(exports, "MUSIC_WIZARD_CATEGORIES", {
588
588
  enumerable: true,
589
- get: function () { return chunkDQFQJECU_cjs.MUSIC_WIZARD_CATEGORIES; }
589
+ get: function () { return chunkXTOSNRWT_cjs.MUSIC_WIZARD_CATEGORIES; }
590
590
  });
591
591
  Object.defineProperty(exports, "OWN_MOTION_NODE_TYPES", {
592
592
  enumerable: true,
593
- get: function () { return chunkDQFQJECU_cjs.OWN_MOTION_NODE_TYPES; }
593
+ get: function () { return chunkXTOSNRWT_cjs.OWN_MOTION_NODE_TYPES; }
594
594
  });
595
595
  Object.defineProperty(exports, "POST_CONTENT_ANALYSIS_SYSTEM_PROMPT", {
596
596
  enumerable: true,
597
- get: function () { return chunkDQFQJECU_cjs.POST_CONTENT_ANALYSIS_SYSTEM_PROMPT; }
597
+ get: function () { return chunkXTOSNRWT_cjs.POST_CONTENT_ANALYSIS_SYSTEM_PROMPT; }
598
598
  });
599
599
  Object.defineProperty(exports, "PROVIDER_CAPABILITIES", {
600
600
  enumerable: true,
601
- get: function () { return chunkDQFQJECU_cjs.PROVIDER_CAPABILITIES; }
601
+ get: function () { return chunkXTOSNRWT_cjs.PROVIDER_CAPABILITIES; }
602
602
  });
603
603
  Object.defineProperty(exports, "PROVIDER_PROMPT_DOCTRINES", {
604
604
  enumerable: true,
605
- get: function () { return chunkDQFQJECU_cjs.PROVIDER_PROMPT_DOCTRINES; }
605
+ get: function () { return chunkXTOSNRWT_cjs.PROVIDER_PROMPT_DOCTRINES; }
606
606
  });
607
607
  Object.defineProperty(exports, "REFERENCE_IMAGE_ROLES", {
608
608
  enumerable: true,
609
- get: function () { return chunkDQFQJECU_cjs.REFERENCE_IMAGE_ROLES; }
609
+ get: function () { return chunkXTOSNRWT_cjs.REFERENCE_IMAGE_ROLES; }
610
610
  });
611
611
  Object.defineProperty(exports, "SCENE3D_FIGURE_REFERENCE_RULE", {
612
612
  enumerable: true,
613
- get: function () { return chunkDQFQJECU_cjs.SCENE3D_FIGURE_REFERENCE_RULE; }
613
+ get: function () { return chunkXTOSNRWT_cjs.SCENE3D_FIGURE_REFERENCE_RULE; }
614
614
  });
615
615
  Object.defineProperty(exports, "SCENE3D_FREE_PLATE_SLOTS", {
616
616
  enumerable: true,
617
- get: function () { return chunkDQFQJECU_cjs.SCENE3D_FREE_PLATE_SLOTS; }
617
+ get: function () { return chunkXTOSNRWT_cjs.SCENE3D_FREE_PLATE_SLOTS; }
618
618
  });
619
619
  Object.defineProperty(exports, "SCENE3D_LAYOUT_REFERENCE_SCOPING_FIXTURE", {
620
620
  enumerable: true,
621
- get: function () { return chunkDQFQJECU_cjs.SCENE3D_LAYOUT_REFERENCE_SCOPING_FIXTURE; }
621
+ get: function () { return chunkXTOSNRWT_cjs.SCENE3D_LAYOUT_REFERENCE_SCOPING_FIXTURE; }
622
622
  });
623
623
  Object.defineProperty(exports, "SCENE3D_LAYOUT_REFERENCE_SCOPING_LINE", {
624
624
  enumerable: true,
625
- get: function () { return chunkDQFQJECU_cjs.SCENE3D_LAYOUT_REFERENCE_SCOPING_LINE; }
625
+ get: function () { return chunkXTOSNRWT_cjs.SCENE3D_LAYOUT_REFERENCE_SCOPING_LINE; }
626
626
  });
627
627
  Object.defineProperty(exports, "SCENE3D_LAYOUT_SCOPING_FOR", {
628
628
  enumerable: true,
629
- get: function () { return chunkDQFQJECU_cjs.SCENE3D_LAYOUT_SCOPING_FOR; }
629
+ get: function () { return chunkXTOSNRWT_cjs.SCENE3D_LAYOUT_SCOPING_FOR; }
630
630
  });
631
631
  Object.defineProperty(exports, "SCENE3D_LAYOUT_SCOPING_IGNORE", {
632
632
  enumerable: true,
633
- get: function () { return chunkDQFQJECU_cjs.SCENE3D_LAYOUT_SCOPING_IGNORE; }
633
+ get: function () { return chunkXTOSNRWT_cjs.SCENE3D_LAYOUT_SCOPING_IGNORE; }
634
634
  });
635
635
  Object.defineProperty(exports, "SCENE3D_LAYOUT_SCOPING_LOOK_SOURCE", {
636
636
  enumerable: true,
637
- get: function () { return chunkDQFQJECU_cjs.SCENE3D_LAYOUT_SCOPING_LOOK_SOURCE; }
637
+ get: function () { return chunkXTOSNRWT_cjs.SCENE3D_LAYOUT_SCOPING_LOOK_SOURCE; }
638
638
  });
639
639
  Object.defineProperty(exports, "SCENE3D_LAYOUT_SCOPING_MARKER", {
640
640
  enumerable: true,
641
- get: function () { return chunkDQFQJECU_cjs.SCENE3D_LAYOUT_SCOPING_MARKER; }
641
+ get: function () { return chunkXTOSNRWT_cjs.SCENE3D_LAYOUT_SCOPING_MARKER; }
642
642
  });
643
643
  Object.defineProperty(exports, "SCENE3D_UNREFERENCED_FIGURES_WARNING_CODE", {
644
644
  enumerable: true,
645
- get: function () { return chunkDQFQJECU_cjs.SCENE3D_UNREFERENCED_FIGURES_WARNING_CODE; }
645
+ get: function () { return chunkXTOSNRWT_cjs.SCENE3D_UNREFERENCED_FIGURES_WARNING_CODE; }
646
646
  });
647
647
  Object.defineProperty(exports, "TEXT_WIZARD_CATEGORIES", {
648
648
  enumerable: true,
649
- get: function () { return chunkDQFQJECU_cjs.TEXT_WIZARD_CATEGORIES; }
649
+ get: function () { return chunkXTOSNRWT_cjs.TEXT_WIZARD_CATEGORIES; }
650
650
  });
651
651
  Object.defineProperty(exports, "VIDEO_WIZARD_CATEGORIES", {
652
652
  enumerable: true,
653
- get: function () { return chunkDQFQJECU_cjs.VIDEO_WIZARD_CATEGORIES; }
653
+ get: function () { return chunkXTOSNRWT_cjs.VIDEO_WIZARD_CATEGORIES; }
654
654
  });
655
655
  Object.defineProperty(exports, "appendScene3DStillScopingLines", {
656
656
  enumerable: true,
657
- get: function () { return chunkDQFQJECU_cjs.appendScene3DStillScopingLines; }
657
+ get: function () { return chunkXTOSNRWT_cjs.appendScene3DStillScopingLines; }
658
658
  });
659
659
  Object.defineProperty(exports, "buildAdCreativeAnalysisUserText", {
660
660
  enumerable: true,
661
- get: function () { return chunkDQFQJECU_cjs.buildAdCreativeAnalysisUserText; }
661
+ get: function () { return chunkXTOSNRWT_cjs.buildAdCreativeAnalysisUserText; }
662
662
  });
663
663
  Object.defineProperty(exports, "buildCharacterPrompt", {
664
664
  enumerable: true,
665
- get: function () { return chunkDQFQJECU_cjs.buildCharacterPrompt; }
665
+ get: function () { return chunkXTOSNRWT_cjs.buildCharacterPrompt; }
666
666
  });
667
667
  Object.defineProperty(exports, "buildCreaturePrompt", {
668
668
  enumerable: true,
669
- get: function () { return chunkDQFQJECU_cjs.buildCreaturePrompt; }
669
+ get: function () { return chunkXTOSNRWT_cjs.buildCreaturePrompt; }
670
670
  });
671
671
  Object.defineProperty(exports, "buildFaceTemplateInputs", {
672
672
  enumerable: true,
673
- get: function () { return chunkDQFQJECU_cjs.buildFaceTemplateInputs; }
673
+ get: function () { return chunkXTOSNRWT_cjs.buildFaceTemplateInputs; }
674
674
  });
675
675
  Object.defineProperty(exports, "buildLocationMotionPrompt", {
676
676
  enumerable: true,
677
- get: function () { return chunkDQFQJECU_cjs.buildLocationMotionPrompt; }
677
+ get: function () { return chunkXTOSNRWT_cjs.buildLocationMotionPrompt; }
678
678
  });
679
679
  Object.defineProperty(exports, "buildLocationPrompt", {
680
680
  enumerable: true,
681
- get: function () { return chunkDQFQJECU_cjs.buildLocationPrompt; }
681
+ get: function () { return chunkXTOSNRWT_cjs.buildLocationPrompt; }
682
682
  });
683
683
  Object.defineProperty(exports, "buildLocationRefinePrompt", {
684
684
  enumerable: true,
685
- get: function () { return chunkDQFQJECU_cjs.buildLocationRefinePrompt; }
685
+ get: function () { return chunkXTOSNRWT_cjs.buildLocationRefinePrompt; }
686
686
  });
687
687
  Object.defineProperty(exports, "buildMotionPrompt", {
688
688
  enumerable: true,
689
- get: function () { return chunkDQFQJECU_cjs.buildMotionPrompt; }
689
+ get: function () { return chunkXTOSNRWT_cjs.buildMotionPrompt; }
690
690
  });
691
691
  Object.defineProperty(exports, "buildObjectMotionPrompt", {
692
692
  enumerable: true,
693
- get: function () { return chunkDQFQJECU_cjs.buildObjectMotionPrompt; }
693
+ get: function () { return chunkXTOSNRWT_cjs.buildObjectMotionPrompt; }
694
694
  });
695
695
  Object.defineProperty(exports, "buildObjectPrompt", {
696
696
  enumerable: true,
697
- get: function () { return chunkDQFQJECU_cjs.buildObjectPrompt; }
697
+ get: function () { return chunkXTOSNRWT_cjs.buildObjectPrompt; }
698
698
  });
699
699
  Object.defineProperty(exports, "buildScene3DLayoutScopingLine", {
700
700
  enumerable: true,
701
- get: function () { return chunkDQFQJECU_cjs.buildScene3DLayoutScopingLine; }
701
+ get: function () { return chunkXTOSNRWT_cjs.buildScene3DLayoutScopingLine; }
702
702
  });
703
703
  Object.defineProperty(exports, "buildScene3DUnreferencedFiguresWarning", {
704
704
  enumerable: true,
705
- get: function () { return chunkDQFQJECU_cjs.buildScene3DUnreferencedFiguresWarning; }
705
+ get: function () { return chunkXTOSNRWT_cjs.buildScene3DUnreferencedFiguresWarning; }
706
706
  });
707
707
  Object.defineProperty(exports, "getCategoriesForNodeType", {
708
708
  enumerable: true,
709
- get: function () { return chunkDQFQJECU_cjs.getCategoriesForNodeType; }
709
+ get: function () { return chunkXTOSNRWT_cjs.getCategoriesForNodeType; }
710
710
  });
711
711
  Object.defineProperty(exports, "getPromptDoctrine", {
712
712
  enumerable: true,
713
- get: function () { return chunkDQFQJECU_cjs.getPromptDoctrine; }
713
+ get: function () { return chunkXTOSNRWT_cjs.getPromptDoctrine; }
714
714
  });
715
715
  Object.defineProperty(exports, "getPromptTips", {
716
716
  enumerable: true,
717
- get: function () { return chunkDQFQJECU_cjs.getPromptTips; }
717
+ get: function () { return chunkXTOSNRWT_cjs.getPromptTips; }
718
718
  });
719
719
  Object.defineProperty(exports, "hasScene3DLayoutScopingLine", {
720
720
  enumerable: true,
721
- get: function () { return chunkDQFQJECU_cjs.hasScene3DLayoutScopingLine; }
721
+ get: function () { return chunkXTOSNRWT_cjs.hasScene3DLayoutScopingLine; }
722
722
  });
723
723
  Object.defineProperty(exports, "isWizardSupported", {
724
724
  enumerable: true,
725
- get: function () { return chunkDQFQJECU_cjs.isWizardSupported; }
725
+ get: function () { return chunkXTOSNRWT_cjs.isWizardSupported; }
726
726
  });
727
727
  Object.defineProperty(exports, "ownMotionHint", {
728
728
  enumerable: true,
729
- get: function () { return chunkDQFQJECU_cjs.ownMotionHint; }
729
+ get: function () { return chunkXTOSNRWT_cjs.ownMotionHint; }
730
730
  });
731
731
  Object.defineProperty(exports, "renderScene3DLayoutScopingLine", {
732
732
  enumerable: true,
733
- get: function () { return chunkDQFQJECU_cjs.renderScene3DLayoutScopingLine; }
733
+ get: function () { return chunkXTOSNRWT_cjs.renderScene3DLayoutScopingLine; }
734
734
  });
735
735
  Object.defineProperty(exports, "scene3DLayoutVideoCaptions", {
736
736
  enumerable: true,
737
- get: function () { return chunkDQFQJECU_cjs.scene3DLayoutVideoCaptions; }
737
+ get: function () { return chunkXTOSNRWT_cjs.scene3DLayoutVideoCaptions; }
738
738
  });
739
739
  Object.defineProperty(exports, "CINEMATIC_LOOK_TAIL", {
740
740
  enumerable: true,
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import './chunk-GILUVQQJ.js';
8
8
  export { keepableDirectionHints } from './chunk-JZOPMVGY.js';
9
9
  export { PROMPT_HINT_SEPARATOR, joinPromptHints } from './chunk-35UHMDGS.js';
10
10
  export { computePackSidecarCoverage } from './chunk-FDOG7BNB.js';
11
- export { AD_CREATIVE_ANALYSIS_FIELDS, AD_CREATIVE_ANALYSIS_SYSTEM_PROMPT, AUDIO_WIZARD_CATEGORIES, DEFAULT_OWN_MOTION, IMAGE_REFERENCE_PROMPT_DOCTRINE, IMAGE_WIZARD_CATEGORIES, LLM_CHAT_WIZARD_CATEGORIES, MUSIC_WIZARD_CATEGORIES, OWN_MOTION_NODE_TYPES, POST_CONTENT_ANALYSIS_SYSTEM_PROMPT, PROVIDER_CAPABILITIES, PROVIDER_PROMPT_DOCTRINES, REFERENCE_IMAGE_ROLES, SCENE3D_FIGURE_REFERENCE_RULE, SCENE3D_FREE_PLATE_SLOTS, SCENE3D_LAYOUT_REFERENCE_SCOPING_FIXTURE, SCENE3D_LAYOUT_REFERENCE_SCOPING_LINE, SCENE3D_LAYOUT_SCOPING_FOR, SCENE3D_LAYOUT_SCOPING_IGNORE, SCENE3D_LAYOUT_SCOPING_LOOK_SOURCE, SCENE3D_LAYOUT_SCOPING_MARKER, SCENE3D_UNREFERENCED_FIGURES_WARNING_CODE, TEXT_WIZARD_CATEGORIES, VIDEO_WIZARD_CATEGORIES, appendScene3DStillScopingLines, buildAdCreativeAnalysisUserText, buildCharacterPrompt, buildCreaturePrompt, buildFaceTemplateInputs, buildLocationMotionPrompt, buildLocationPrompt, buildLocationRefinePrompt, buildMotionPrompt, buildObjectMotionPrompt, buildObjectPrompt, buildScene3DLayoutScopingLine, buildScene3DUnreferencedFiguresWarning, getCategoriesForNodeType, getPromptDoctrine, getPromptTips, hasScene3DLayoutScopingLine, isWizardSupported, ownMotionHint, renderScene3DLayoutScopingLine, scene3DLayoutVideoCaptions } from './chunk-C46256GZ.js';
11
+ export { AD_CREATIVE_ANALYSIS_FIELDS, AD_CREATIVE_ANALYSIS_SYSTEM_PROMPT, AUDIO_WIZARD_CATEGORIES, DEFAULT_OWN_MOTION, IMAGE_REFERENCE_PROMPT_DOCTRINE, IMAGE_WIZARD_CATEGORIES, LLM_CHAT_WIZARD_CATEGORIES, MUSIC_WIZARD_CATEGORIES, OWN_MOTION_NODE_TYPES, POST_CONTENT_ANALYSIS_SYSTEM_PROMPT, PROVIDER_CAPABILITIES, PROVIDER_PROMPT_DOCTRINES, REFERENCE_IMAGE_ROLES, SCENE3D_FIGURE_REFERENCE_RULE, SCENE3D_FREE_PLATE_SLOTS, SCENE3D_LAYOUT_REFERENCE_SCOPING_FIXTURE, SCENE3D_LAYOUT_REFERENCE_SCOPING_LINE, SCENE3D_LAYOUT_SCOPING_FOR, SCENE3D_LAYOUT_SCOPING_IGNORE, SCENE3D_LAYOUT_SCOPING_LOOK_SOURCE, SCENE3D_LAYOUT_SCOPING_MARKER, SCENE3D_UNREFERENCED_FIGURES_WARNING_CODE, TEXT_WIZARD_CATEGORIES, VIDEO_WIZARD_CATEGORIES, appendScene3DStillScopingLines, buildAdCreativeAnalysisUserText, buildCharacterPrompt, buildCreaturePrompt, buildFaceTemplateInputs, buildLocationMotionPrompt, buildLocationPrompt, buildLocationRefinePrompt, buildMotionPrompt, buildObjectMotionPrompt, buildObjectPrompt, buildScene3DLayoutScopingLine, buildScene3DUnreferencedFiguresWarning, getCategoriesForNodeType, getPromptDoctrine, getPromptTips, hasScene3DLayoutScopingLine, isWizardSupported, ownMotionHint, renderScene3DLayoutScopingLine, scene3DLayoutVideoCaptions } from './chunk-QBUSJGV3.js';
12
12
  export { CINEMATIC_LOOK_TAIL, FILM_STILL_PREFIX, NEUTRAL_PERSON, REALISM_FINISH, REALISM_PASS_INSTRUCTION, REALISM_SKIN, REFERENCE_RULES, REFERENCE_RULES_MULTI_PERSON, SCENE_FRAME_RULE, filmStillPrefix, realismEmptyHands, realismViewpoint, referenceRulesBlock } from './chunk-T64D26P4.js';
13
13
  export { DEFAULT_IDENTITY_LOCK, DEFAULT_TEMPLATES, applyTemplate, buildIdentityLockLine, characterLockToRefLock, collectIdentityLockClause, getIdentityLockClause, hasUpstreamCharacter, resolveTemplate, toIdentityLockMode, withForcedIdentityLock } from './chunk-BQWIPLLR.js';
14
14
  import './chunk-ADMHDFHB.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nodaro/prompts",
3
- "version": "1.40.0",
3
+ "version": "1.41.0",
4
4
  "description": "Nodaro's prompt-engineering layer — person/picker catalogs with prompt hints, identity-lock clauses, entity prompt builders, brand presets, and prompt/reference assembly shared by the Nodaro platform and SDK.",
5
5
  "type": "module",
6
6
  "license": "FSL-1.1-Apache-2.0",
@@ -70,7 +70,7 @@
70
70
  "test": "vitest run"
71
71
  },
72
72
  "dependencies": {
73
- "@nodaro/shared": "^3.34.0"
73
+ "@nodaro/shared": "^3.40.0"
74
74
  },
75
75
  "devDependencies": {
76
76
  "tsup": "^8.5.0",
@@ -268,6 +268,8 @@ export const PROVIDER_CAPABILITIES: Record<string, Record<string, string>> = {
268
268
  "wan-3": "Wan 3.0 — multimodal refs (10 images / 5 videos / 5 audio) or first+last frame, native audio, 2–30s, 480p/720p/1080p",
269
269
  "wan-3-prime": "Wan 3.0 Prime — high-speed Wan 3.0 tier; same surface, faster turnaround at a higher rate",
270
270
  "vidu-q4": "Vidu Q4 — start frame or up to 15 reference images + 3 MP3 audio refs, native audio, 3–16s, 540p–4K (image required)",
271
+ "kling-4": "Kling 4.0 — text, or up to 10 reference images / 5 videos / 7 characters / 3 voices; native audio, 3–30s, 720p/1080p",
272
+ "kling-4-keyframes": "Kling 4.0 Keyframes — start frame, up to 8 in-between frames and an end frame; native audio, 3–30s, 720p/1080p",
271
273
  "grok-imagine-video-1.5": "Grok Imagine 1.5 — image-to-video only; requires an input image",
272
274
  },
273
275
  "image-to-video": {
@@ -305,6 +307,8 @@ export const PROVIDER_CAPABILITIES: Record<string, Record<string, string>> = {
305
307
  "wan-3": "Wan 3.0 — multimodal refs (10 images / 5 videos / 5 audio) or first+last frame, native audio, 2–30s, 480p/720p/1080p",
306
308
  "wan-3-prime": "Wan 3.0 Prime — high-speed Wan 3.0 tier; same surface, faster turnaround at a higher rate",
307
309
  "vidu-q4": "Vidu Q4 — animate a start frame, or direct up to 15 reference images + 3 MP3 audio refs; native audio, 3–16s, 540p–4K",
310
+ "kling-4": "Kling 4.0 — a start frame joins up to 10 reference images, 5 videos, 7 characters and 3 voices; native audio, 3–30s, 720p/1080p",
311
+ "kling-4-keyframes": "Kling 4.0 Keyframes — start frame, up to 8 in-between frames and an end frame; native audio, 3–30s, 720p/1080p",
308
312
  "grok-imagine-video-1.5": "Grok Imagine 1.5 — stylized animation, 1–15s, 480p/720p (image required)",
309
313
  },
310
314
  "video-to-video": {
@@ -423,6 +423,49 @@ Source: KIE Vidu Q4 market contracts (docs.kie.ai/market/vidu-q4/image-to-video,
423
423
  docs.kie.ai/market/vidu-q4/reference-to-video). Captured 2026-10-17.`,
424
424
  }
425
425
 
426
+ // Kling 4.0 — two KIE endpoints, two ids. No public Kling 4.0 prompt guide is
427
+ // captured, so like Vidu Q4 the body is KIE contract facts plus the
428
+ // platform-standard structure. The provider runner maps the platform's
429
+ // `@image_N` / `@audio_N` tokens and wired characters onto Kling's own names
430
+ // (`@image_1`, `@keyframe_1`, a subject's `@Name`, a voice's `@VoiceN`) and drops
431
+ // the `@` from any mention the request does not declare, which KIE rejects.
432
+ const KLING_4_DOCTRINE: ProviderPromptDoctrine = {
433
+ providers: ["kling-4", "kling-4-keyframes"],
434
+ heading: "Kling 4.0 (kling-4, kling-4-keyframes)",
435
+ tips: [
436
+ "kling-4: text only, or up to 10 images, 5 videos (2-30s), 7 characters and 3 voices (15 in all). Name each: @image_1, @video_1, a character's @Name, a voice clip @audio_1.",
437
+ "kling-4-keyframes: start frame, up to 8 in-between frames (Image References, in order), end frame — @first_frame, @keyframe_1 …, @last_frame. 3s takes 4 frames in all, 9s or longer 10.",
438
+ "3-30s (default 5), 720p (default) / 1080p, native audio always on. A reference video lends its camera moves and pacing; keep-original-sound keeps its own audio.",
439
+ "Prompt cap 8,000 chars. Aspect auto / 16:9 / 9:16 / 1:1 / 21:9 — Keyframes follows the start frame's shape once a frame is attached.",
440
+ ],
441
+ doctrine: `Prompt structure (no public Kling 4.0 prompt guide is captured — the KIE API contract is the
442
+ doctrine source; platform-standard structure applies):
443
+ subject → action → scene/environment → lighting → camera movement → style → constraints.
444
+
445
+ **Two models**
446
+ - Kling 4.0 (kling-4) — reference-to-video. With no materials it is plain text-to-video. Materials: up to 10 reference images, 5 reference videos (2-30 seconds each), 7 subjects (characters) and 3 voices, at most 15 together. A wired start frame cannot be a frame here, so the platform adds it to the reference images and names it as the opening frame.
447
+ - Kling 4.0 Keyframes (kling-4-keyframes) — keyframe-to-video. A start frame, up to 8 in-between frames in time order, and an end frame; the story passes through each. With no frame it is text-to-video.
448
+
449
+ **Naming materials in the prompt**
450
+ - Every material is named with "@": @image_1 … for reference images, @video_1 … for reference videos, a character by its own name (@Maya), a voice clip as @audio_1 (sent to Kling as a named voice). Keyframes: @first_frame, @keyframe_1 … @keyframe_8, @last_frame.
451
+ - Kling refuses a prompt that names a material the request does not carry; the platform removes the "@" from such a mention so the run still starts — wire the material if the mention matters.
452
+ - Write the binding explicitly: "@Maya walks through the street from @image_1 and greets the camera in the voice of @audio_1".
453
+
454
+ **Keyframe rules**
455
+ - Total frames (start + in-between + end) are capped by duration: 3s → 4, 4s → 5, 5s → 6, 6s → 7, 7s → 8, 8s → 9, 9s or longer → 10. Describe how the shot moves from one frame to the next.
456
+ - Once any frame is attached the output takes the start frame's shape; aspect ratio applies to text-only runs.
457
+
458
+ **Reference videos**
459
+ - A reference video lends its camera moves and pacing — swap the characters or products in the prompt ("recreate the camera move of @video_1 with …"). Keep original sound keeps the clip's own audio; otherwise new sound is generated.
460
+
461
+ **Duration, resolution, audio**
462
+ - 3-30 seconds (default 5); 720p (default) or 1080p; aspect auto (follows the materials, 16:9 with none) / 16:9 / 9:16 / 1:1 / 21:9. Prompts up to 8,000 characters.
463
+ - Native audio is always generated (the contract cites lip-sync and dialogue in 10+ languages); not yet verified for scripted lines here, so plan key dialogue as a TTS + lip-sync pass.
464
+
465
+ Source: KIE Kling 4.0 market contracts (docs.kie.ai/market/kling/v4-reference-to-video,
466
+ docs.kie.ai/market/kling/v4-keyframe-to-video), live-probed 2026-10-23.`,
467
+ }
468
+
426
469
  const HAPPYHORSE_DOCTRINE: ProviderPromptDoctrine = {
427
470
  providers: ["happyhorse", "happyhorse-i2v", "happyhorse-ref2v", "happyhorse-edit"],
428
471
  heading: "HappyHorse 1.1 (happyhorse, happyhorse-i2v, happyhorse-ref2v)",
@@ -482,6 +525,7 @@ export const PROVIDER_PROMPT_DOCTRINES: readonly ProviderPromptDoctrine[] = [
482
525
  WAN_DOCTRINE,
483
526
  WAN_3_DOCTRINE,
484
527
  VIDU_Q4_DOCTRINE,
528
+ KLING_4_DOCTRINE,
485
529
  HAPPYHORSE_DOCTRINE,
486
530
  RUNWAY_KIE_DOCTRINE,
487
531
  ]