@sogni-ai/sogni-intelligence-client 3.14.4 → 3.15.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.
Files changed (77) hide show
  1. package/dist/client/SogniClientWrapper.js +1 -1
  2. package/dist/client/SogniClientWrapper.js.map +1 -1
  3. package/dist/contracts/data/promptContracts.d.ts.map +1 -1
  4. package/dist/contracts/data/promptContracts.js +12 -11
  5. package/dist/contracts/data/promptContracts.js.map +1 -1
  6. package/dist/contracts/hostedToolValidation.d.ts.map +1 -1
  7. package/dist/contracts/hostedToolValidation.js +7 -2
  8. package/dist/contracts/hostedToolValidation.js.map +1 -1
  9. package/dist/media/videoAppSettings.d.ts +10 -10
  10. package/dist/media/videoAppSettings.d.ts.map +1 -1
  11. package/dist/media/videoAppSettings.js +10 -10
  12. package/dist/media/videoAppSettings.js.map +1 -1
  13. package/dist/media/videoSettings.d.ts +8 -1
  14. package/dist/media/videoSettings.d.ts.map +1 -1
  15. package/dist/media/videoSettings.js +223 -2
  16. package/dist/media/videoSettings.js.map +1 -1
  17. package/dist/public-skill-runtime/index.d.ts +18 -2
  18. package/dist/public-skill-runtime/index.d.ts.map +1 -1
  19. package/dist/public-skill-runtime/index.js +103 -17
  20. package/dist/public-skill-runtime/index.js.map +1 -1
  21. package/dist/skills/asset_reference_management/modelRefRegistry.d.ts.map +1 -1
  22. package/dist/skills/asset_reference_management/modelRefRegistry.js +3 -0
  23. package/dist/skills/asset_reference_management/modelRefRegistry.js.map +1 -1
  24. package/dist/skills/asset_reference_management/types.d.ts +1 -1
  25. package/dist/skills/asset_reference_management/types.d.ts.map +1 -1
  26. package/dist/tools/definitions/animate-photo/definition.d.ts.map +1 -1
  27. package/dist/tools/definitions/animate-photo/definition.js +10 -6
  28. package/dist/tools/definitions/animate-photo/definition.js.map +1 -1
  29. package/dist/tools/definitions/extend-video/definition.d.ts.map +1 -1
  30. package/dist/tools/definitions/extend-video/definition.js +3 -4
  31. package/dist/tools/definitions/extend-video/definition.js.map +1 -1
  32. package/dist/tools/definitions/generate-video/definition.d.ts.map +1 -1
  33. package/dist/tools/definitions/generate-video/definition.js +6 -4
  34. package/dist/tools/definitions/generate-video/definition.js.map +1 -1
  35. package/dist/tools/definitions/replace-video-segment/definition.js +3 -3
  36. package/dist/tools/definitions/replace-video-segment/definition.js.map +1 -1
  37. package/dist/tools/definitions/sound-to-video/definition.d.ts.map +1 -1
  38. package/dist/tools/definitions/sound-to-video/definition.js +9 -4
  39. package/dist/tools/definitions/sound-to-video/definition.js.map +1 -1
  40. package/dist/tools/definitions/video-to-video/definition.js +14 -14
  41. package/dist/tools/definitions/video-to-video/definition.js.map +1 -1
  42. package/dist/tools/shared/modelRegistry.d.ts.map +1 -1
  43. package/dist/tools/shared/modelRegistry.js +14 -1
  44. package/dist/tools/shared/modelRegistry.js.map +1 -1
  45. package/dist/utils/helpers.js +1 -1
  46. package/dist/utils/helpers.js.map +1 -1
  47. package/dist-esm/client/SogniClientWrapper.js +1 -1
  48. package/dist-esm/client/SogniClientWrapper.js.map +1 -1
  49. package/dist-esm/contracts/data/promptContracts.js +12 -11
  50. package/dist-esm/contracts/data/promptContracts.js.map +1 -1
  51. package/dist-esm/contracts/hostedToolValidation.js +7 -2
  52. package/dist-esm/contracts/hostedToolValidation.js.map +1 -1
  53. package/dist-esm/media/videoAppSettings.js +11 -11
  54. package/dist-esm/media/videoAppSettings.js.map +1 -1
  55. package/dist-esm/media/videoSettings.js +219 -1
  56. package/dist-esm/media/videoSettings.js.map +1 -1
  57. package/dist-esm/public-skill-runtime/index.js +101 -16
  58. package/dist-esm/public-skill-runtime/index.js.map +1 -1
  59. package/dist-esm/skills/asset_reference_management/modelRefRegistry.js +3 -0
  60. package/dist-esm/skills/asset_reference_management/modelRefRegistry.js.map +1 -1
  61. package/dist-esm/tools/definitions/animate-photo/definition.js +10 -6
  62. package/dist-esm/tools/definitions/animate-photo/definition.js.map +1 -1
  63. package/dist-esm/tools/definitions/extend-video/definition.js +3 -4
  64. package/dist-esm/tools/definitions/extend-video/definition.js.map +1 -1
  65. package/dist-esm/tools/definitions/generate-video/definition.js +6 -4
  66. package/dist-esm/tools/definitions/generate-video/definition.js.map +1 -1
  67. package/dist-esm/tools/definitions/replace-video-segment/definition.js +3 -3
  68. package/dist-esm/tools/definitions/replace-video-segment/definition.js.map +1 -1
  69. package/dist-esm/tools/definitions/sound-to-video/definition.js +9 -4
  70. package/dist-esm/tools/definitions/sound-to-video/definition.js.map +1 -1
  71. package/dist-esm/tools/definitions/video-to-video/definition.js +14 -14
  72. package/dist-esm/tools/definitions/video-to-video/definition.js.map +1 -1
  73. package/dist-esm/tools/shared/modelRegistry.js +14 -1
  74. package/dist-esm/tools/shared/modelRegistry.js.map +1 -1
  75. package/dist-esm/utils/helpers.js +1 -1
  76. package/dist-esm/utils/helpers.js.map +1 -1
  77. package/package.json +3 -3
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.STORYBOARD_DEFAULT_MAX_FRAMES = exports.STORYBOARD_DEFAULT_MIN_FRAMES = exports.STORYBOARD_PLANNING_CONTRACT_JSON_SCHEMA = exports.STORYBOARD_PLANNING_CONTRACT_SCHEMA_VERSION = exports.IMAGE_MODEL_ALIASES = exports.IMAGE_MODEL_DEFAULTS = exports.QUALITY_TIERS = exports.VIDEO_MODEL_ALIASES = exports.VIDEO_WORKFLOW_DEFAULT_MODELS = exports.EXPANDED_VIDEO_MODEL_REGISTRY = exports.VIDEO_MODEL_REGISTRY = exports.HAPPYHORSE_WORKFLOW_MODELS = exports.SEEDANCE_WORKFLOW_MODELS = exports.LTX23_DEV_WORKFLOW_MODELS = exports.LTX23_EROS_MODEL_ID = exports.LTX23_WORKFLOW_MODELS = exports.DEFAULT_STORYBOARD_CANVAS_HINT_MARKER = exports.GPT_IMAGE_STORYBOARD_DEFAULTS = exports.SEEDANCE_V2V_REFERENCE_MAX_DURATION_SECONDS = exports.SEEDANCE_STORYBOARD_REFERENCE_PROMPT = exports.storyboardAdapterRegistry = exports.SkillRegistry = exports.StoryboardAdapterUnsupportedStageError = exports.ALL_BUILT_IN_SKILLS = exports.COMPOSITION_PLANNING_SKILL = exports.APP_SETTINGS_SKILL = exports.PERSONA_MANAGEMENT_SKILL = exports.MEDIA_ANALYSIS_SKILL = exports.MUSIC_GENERATION_SKILL = exports.VIDEO_EDITING_SKILL = exports.VIDEO_GENERATION_SKILL = exports.IMAGE_EDITING_SKILL = exports.IMAGE_GENERATION_SKILL = exports.QUALITY_AUDIT_SKILL = exports.ASSET_REFERENCE_MANAGEMENT_SKILL = exports.SESSION_CONTROL_SKILL = exports.TOOL_RESULT_DELIMITERS = exports.PUBLIC_SKILL_DEFAULT_TOOL_DEFINITIONS = exports.PUBLIC_SKILL_DEFAULT_TOOL_NAMES = exports.PUBLIC_SKILL_DEFAULT_REPAIR_RECIPES = exports.PUBLIC_SKILL_DEFAULT_PROMPT_CONTRACTS = exports.PUBLIC_SKILL_DEFAULT_POLICIES = exports.SKILL_RUNTIME_VERSION = void 0;
3
+ exports.STORYBOARD_DEFAULT_MAX_FRAMES = exports.STORYBOARD_DEFAULT_MIN_FRAMES = exports.STORYBOARD_PLANNING_CONTRACT_JSON_SCHEMA = exports.STORYBOARD_PLANNING_CONTRACT_SCHEMA_VERSION = exports.IMAGE_MODEL_ALIASES = exports.IMAGE_MODEL_DEFAULTS = exports.QUALITY_TIERS = exports.VIDEO_MODEL_ALIASES = exports.VIDEO_WORKFLOW_DEFAULT_MODELS = exports.EXPANDED_VIDEO_MODEL_REGISTRY = exports.VIDEO_MODEL_REGISTRY = exports.HAPPYHORSE_WORKFLOW_MODELS = exports.SEEDANCE_WORKFLOW_MODELS = exports.LTX25_DEV_WORKFLOW_MODELS = exports.LTX25_WORKFLOW_MODELS = exports.LTX23_DEV_WORKFLOW_MODELS = exports.LTX23_EROS_MODEL_ID = exports.LTX23_WORKFLOW_MODELS = exports.DEFAULT_STORYBOARD_CANVAS_HINT_MARKER = exports.GPT_IMAGE_STORYBOARD_DEFAULTS = exports.SEEDANCE_V2V_REFERENCE_MAX_DURATION_SECONDS = exports.SEEDANCE_STORYBOARD_REFERENCE_PROMPT = exports.storyboardAdapterRegistry = exports.SkillRegistry = exports.StoryboardAdapterUnsupportedStageError = exports.ALL_BUILT_IN_SKILLS = exports.COMPOSITION_PLANNING_SKILL = exports.APP_SETTINGS_SKILL = exports.PERSONA_MANAGEMENT_SKILL = exports.MEDIA_ANALYSIS_SKILL = exports.MUSIC_GENERATION_SKILL = exports.VIDEO_EDITING_SKILL = exports.VIDEO_GENERATION_SKILL = exports.IMAGE_EDITING_SKILL = exports.IMAGE_GENERATION_SKILL = exports.QUALITY_AUDIT_SKILL = exports.ASSET_REFERENCE_MANAGEMENT_SKILL = exports.SESSION_CONTROL_SKILL = exports.TOOL_RESULT_DELIMITERS = exports.PUBLIC_SKILL_DEFAULT_TOOL_DEFINITIONS = exports.PUBLIC_SKILL_DEFAULT_TOOL_NAMES = exports.PUBLIC_SKILL_DEFAULT_REPAIR_RECIPES = exports.PUBLIC_SKILL_DEFAULT_PROMPT_CONTRACTS = exports.PUBLIC_SKILL_DEFAULT_POLICIES = exports.SKILL_RUNTIME_VERSION = void 0;
4
4
  exports.createPublicSkillContractRuntime = createPublicSkillContractRuntime;
5
5
  exports.createPublicSkillDefaultContractRuntime = createPublicSkillDefaultContractRuntime;
6
6
  exports.classifyPublicSkillTurn = classifyPublicSkillTurn;
@@ -21,6 +21,7 @@ exports.compileForModel = compileForModel;
21
21
  exports.normalizeReferenceAudioMimeType = normalizeReferenceAudioMimeType;
22
22
  exports.detectReferenceAudioFormat = detectReferenceAudioFormat;
23
23
  exports.shouldTrimSeedanceV2VSourceVideo = shouldTrimSeedanceV2VSourceVideo;
24
+ exports.resolveLtx25WorkflowModelForQuality = resolveLtx25WorkflowModelForQuality;
24
25
  exports.resolveLtx23WorkflowModelForQuality = resolveLtx23WorkflowModelForQuality;
25
26
  exports.isLtx2Model = isLtx2Model;
26
27
  exports.isWanModel = isWanModel;
@@ -1037,6 +1038,29 @@ const PUBLIC_GPT_IMAGE_2_ADAPTER = {
1037
1038
  return 'GPT IMAGE 2 ROUTING: When the user asks for a ChatGPT, OpenAI, GPT, GPT-2, GPT Image, or gpt-image-2 image/model, use model="gpt-image-2". Use generate_image for text-to-image requests. If uploaded/reference/persona images must guide identity, likeness, composition, style, or objects, use edit_image with model="gpt-image-2" instead of forcing generate_image.';
1038
1039
  },
1039
1040
  };
1041
+ const PUBLIC_LTX25_ADAPTER = {
1042
+ modelId: 'ltx25',
1043
+ name: 'LTX 2.5',
1044
+ supportedStages: ['scene_clip'],
1045
+ compile(storyboard, input) {
1046
+ if (input.stage !== 'scene_clip')
1047
+ throw new StoryboardAdapterUnsupportedStageError('ltx25', input.stage);
1048
+ const scene = requireStoryboardScene('LTX25_ADAPTER', input);
1049
+ const referenceTag = input.primaryReferenceTag ?? 'context_image_0';
1050
+ return {
1051
+ stage: 'scene_clip',
1052
+ prompt: compactSceneVideoPrompt(storyboard, scene, referenceTag),
1053
+ args: {
1054
+ videoModel: 'ltx25',
1055
+ duration: clampSeedanceStoryboardDuration(scene.durationSec ?? 5),
1056
+ aspectRatio: storyboard.targetVideoAspectRatio,
1057
+ },
1058
+ };
1059
+ },
1060
+ getSystemPromptGuidance() {
1061
+ return 'LTX 2.5 VIDEO PROMPTING: For image-to-video, describe motion, action, camera, dialogue, and sound not already obvious in the reference frame. Keep recurring character names and visual anchors stable across scenes. Use LTX 2.3 only for explicit rollback or its ID-LoRA/transition/10Eros-only paths.';
1062
+ },
1063
+ };
1040
1064
  const PUBLIC_LTX23_ADAPTER = {
1041
1065
  modelId: 'ltx23',
1042
1066
  name: 'LTX-2.3',
@@ -1088,6 +1112,7 @@ const PUBLIC_WAN_ADAPTER = {
1088
1112
  const PUBLIC_STORYBOARD_ADAPTERS = [
1089
1113
  PUBLIC_SEEDANCE_ADAPTER,
1090
1114
  PUBLIC_GPT_IMAGE_2_ADAPTER,
1115
+ PUBLIC_LTX25_ADAPTER,
1091
1116
  PUBLIC_LTX23_ADAPTER,
1092
1117
  PUBLIC_WAN_ADAPTER,
1093
1118
  ];
@@ -1146,8 +1171,12 @@ exports.storyboardAdapterRegistry = {
1146
1171
  return PUBLIC_SEEDANCE_ADAPTER;
1147
1172
  if (trimmed.startsWith('gpt-image'))
1148
1173
  return PUBLIC_GPT_IMAGE_2_ADAPTER;
1149
- if (trimmed.startsWith('ltx'))
1174
+ if (trimmed.startsWith('ltx25'))
1175
+ return PUBLIC_LTX25_ADAPTER;
1176
+ if (trimmed.startsWith('ltx23') || trimmed.startsWith('ltx2-'))
1150
1177
  return PUBLIC_LTX23_ADAPTER;
1178
+ if (trimmed.startsWith('ltx'))
1179
+ return PUBLIC_LTX25_ADAPTER;
1151
1180
  if (trimmed.startsWith('wan'))
1152
1181
  return PUBLIC_WAN_ADAPTER;
1153
1182
  return null;
@@ -1240,6 +1269,25 @@ exports.LTX23_DEV_WORKFLOW_MODELS = Object.freeze({
1240
1269
  ia2v: 'ltx23-22b-fp8_ia2v_dev',
1241
1270
  a2v: 'ltx23-22b-fp8_a2v_dev'
1242
1271
  });
1272
+ exports.LTX25_WORKFLOW_MODELS = Object.freeze({
1273
+ t2v: 'ltx25-22b-int8_t2v_distilled',
1274
+ i2v: 'ltx25-22b-int8_i2v_distilled',
1275
+ ia2v: 'ltx25-22b-int8_ia2v_distilled',
1276
+ a2v: 'ltx25-22b-int8_a2v_distilled',
1277
+ v2v: 'ltx25-22b-int8_v2v_distilled'
1278
+ });
1279
+ exports.LTX25_DEV_WORKFLOW_MODELS = Object.freeze({
1280
+ t2v: 'ltx25-22b-int8_t2v_dev',
1281
+ i2v: 'ltx25-22b-int8_i2v_dev',
1282
+ ia2v: 'ltx25-22b-int8_ia2v_dev',
1283
+ a2v: 'ltx25-22b-int8_a2v_dev',
1284
+ v2v: 'ltx25-22b-int8_v2v_dev'
1285
+ });
1286
+ function resolveLtx25WorkflowModelForQuality(workflow, qualityTier) {
1287
+ return qualityTier === 'pro'
1288
+ ? exports.LTX25_DEV_WORKFLOW_MODELS[workflow]
1289
+ : exports.LTX25_WORKFLOW_MODELS[workflow];
1290
+ }
1243
1291
  function resolveLtx23WorkflowModelForQuality(workflow, qualityTier) {
1244
1292
  if (qualityTier === 'pro' && workflow !== 'v2v') {
1245
1293
  return exports.LTX23_DEV_WORKFLOW_MODELS[workflow];
@@ -1507,6 +1555,30 @@ exports.VIDEO_MODEL_REGISTRY = Object.freeze({
1507
1555
  });
1508
1556
  exports.EXPANDED_VIDEO_MODEL_REGISTRY = (() => {
1509
1557
  const registry = { ...exports.VIDEO_MODEL_REGISTRY };
1558
+ for (const workflow of ['t2v', 'i2v', 'ia2v', 'a2v', 'v2v']) {
1559
+ const base = registry[exports.LTX23_WORKFLOW_MODELS[workflow]];
1560
+ if (!base)
1561
+ continue;
1562
+ const ltx25Base = {
1563
+ ...base,
1564
+ family: 'ltx25',
1565
+ maxDimension: 3840,
1566
+ fps: 24,
1567
+ sampler: 'euler_ancestral',
1568
+ scheduler: 'manual_sigmas',
1569
+ supportsNativeAudio: true
1570
+ };
1571
+ registry[exports.LTX25_WORKFLOW_MODELS[workflow]] = {
1572
+ ...ltx25Base,
1573
+ steps: 8,
1574
+ guidance: 1.0
1575
+ };
1576
+ registry[exports.LTX25_DEV_WORKFLOW_MODELS[workflow]] = {
1577
+ ...ltx25Base,
1578
+ steps: 30,
1579
+ guidance: 3.0
1580
+ };
1581
+ }
1510
1582
  for (const workflow of ['t2v', 'i2v', 'ia2v', 'a2v']) {
1511
1583
  const base = registry[exports.LTX23_WORKFLOW_MODELS[workflow]];
1512
1584
  if (!base)
@@ -1540,16 +1612,22 @@ exports.EXPANDED_VIDEO_MODEL_REGISTRY = (() => {
1540
1612
  return Object.freeze(registry);
1541
1613
  })();
1542
1614
  exports.VIDEO_WORKFLOW_DEFAULT_MODELS = Object.freeze({
1543
- t2v: exports.LTX23_WORKFLOW_MODELS.t2v,
1544
- i2v: 'wan_v2.2-14b-fp8_i2v_lightx2v',
1615
+ t2v: exports.LTX25_WORKFLOW_MODELS.t2v,
1616
+ i2v: exports.LTX25_WORKFLOW_MODELS.i2v,
1545
1617
  s2v: 'wan_v2.2-14b-fp8_s2v_lightx2v',
1546
- ia2v: exports.LTX23_WORKFLOW_MODELS.ia2v,
1547
- a2v: exports.LTX23_WORKFLOW_MODELS.a2v,
1618
+ ia2v: exports.LTX25_WORKFLOW_MODELS.ia2v,
1619
+ a2v: exports.LTX25_WORKFLOW_MODELS.a2v,
1548
1620
  'animate-move': 'wan_v2.2-14b-fp8_animate-move_lightx2v',
1549
1621
  'animate-replace': 'wan_v2.2-14b-fp8_animate-replace_lightx2v',
1550
- v2v: exports.LTX23_WORKFLOW_MODELS.v2v
1622
+ v2v: exports.LTX25_WORKFLOW_MODELS.v2v
1551
1623
  });
1552
1624
  exports.VIDEO_MODEL_ALIASES = Object.freeze({
1625
+ ltx25: exports.LTX25_WORKFLOW_MODELS.t2v,
1626
+ 'ltx25-t2v': exports.LTX25_WORKFLOW_MODELS.t2v,
1627
+ 'ltx25-i2v': exports.LTX25_WORKFLOW_MODELS.i2v,
1628
+ 'ltx25-ia2v': exports.LTX25_WORKFLOW_MODELS.ia2v,
1629
+ 'ltx25-a2v': exports.LTX25_WORKFLOW_MODELS.a2v,
1630
+ 'ltx25-v2v': exports.LTX25_WORKFLOW_MODELS.v2v,
1553
1631
  ltx23: exports.LTX23_WORKFLOW_MODELS.t2v,
1554
1632
  'ltx23-t2v': exports.LTX23_WORKFLOW_MODELS.t2v,
1555
1633
  'ltx23-i2v': exports.LTX23_WORKFLOW_MODELS.i2v,
@@ -1639,7 +1717,7 @@ exports.IMAGE_MODEL_ALIASES = Object.freeze({
1639
1717
  'dark-beast-krea-2-identity-edit-lora-v1-2': 'dark_beast_krea2_identity_edit_v1_2'
1640
1718
  });
1641
1719
  function isLtx2Model(modelId) {
1642
- return modelId?.startsWith('ltx2-') || modelId?.startsWith('ltx23-') || false;
1720
+ return modelId?.startsWith('ltx2-') || modelId?.startsWith('ltx23-') || modelId?.startsWith('ltx25-') || false;
1643
1721
  }
1644
1722
  function isWanModel(modelId) {
1645
1723
  return modelId?.startsWith('wan_') || false;
@@ -1659,6 +1737,11 @@ function resolveVideoModelAlias(modelId, workflow) {
1659
1737
  if (!modelId)
1660
1738
  return modelId;
1661
1739
  const key = String(modelId).trim().toLowerCase();
1740
+ if (key === 'ltx25') {
1741
+ if (workflow && isLtxWorkflow(workflow)) {
1742
+ return exports.LTX25_WORKFLOW_MODELS[workflow];
1743
+ }
1744
+ }
1662
1745
  if (key === 'ltx23' && isLtxWorkflow(workflow)) {
1663
1746
  return exports.LTX23_WORKFLOW_MODELS[workflow];
1664
1747
  }
@@ -1694,6 +1777,9 @@ function getBuiltinVideoModelConfig(modelId) {
1694
1777
  if (id.startsWith('ltx23-') && isLtxWorkflow(workflow)) {
1695
1778
  return exports.EXPANDED_VIDEO_MODEL_REGISTRY[exports.LTX23_WORKFLOW_MODELS[workflow]] || null;
1696
1779
  }
1780
+ if (id.startsWith('ltx25-') && isLtxWorkflow(workflow)) {
1781
+ return exports.EXPANDED_VIDEO_MODEL_REGISTRY[exports.LTX25_WORKFLOW_MODELS[workflow]] || null;
1782
+ }
1697
1783
  if (id.startsWith('ltx2-')) {
1698
1784
  return {
1699
1785
  workflow,
@@ -1959,15 +2045,15 @@ function selectDefaultVideoModel(workflow, opts = {}, config) {
1959
2045
  if (configured)
1960
2046
  return resolveVideoModelAlias(configured, workflow) || null;
1961
2047
  if (workflow === 'ia2v')
1962
- return resolveLtx23WorkflowModelForQuality('ia2v', opts.quality);
2048
+ return resolveLtx25WorkflowModelForQuality('ia2v', opts.quality);
1963
2049
  if (workflow === 'a2v')
1964
- return resolveLtx23WorkflowModelForQuality('a2v', opts.quality);
2050
+ return resolveLtx25WorkflowModelForQuality('a2v', opts.quality);
1965
2051
  if (workflow === 'v2v')
1966
- return exports.LTX23_WORKFLOW_MODELS.v2v;
2052
+ return resolveLtx25WorkflowModelForQuality('v2v', opts.quality);
1967
2053
  if (workflow === 't2v')
1968
- return resolveLtx23WorkflowModelForQuality('t2v', opts.quality);
2054
+ return resolveLtx25WorkflowModelForQuality('t2v', opts.quality);
1969
2055
  if (workflow === 'i2v' && (opts.referenceAudioIdentity || promptNeedsLtxNativeAudio(opts.prompt) || opts.quality === 'hq' || opts.quality === 'pro')) {
1970
- return resolveLtx23WorkflowModelForQuality('i2v', opts.quality);
2056
+ return resolveLtx25WorkflowModelForQuality('i2v', opts.quality);
1971
2057
  }
1972
2058
  return exports.VIDEO_WORKFLOW_DEFAULT_MODELS[workflow] || null;
1973
2059
  }
@@ -4119,7 +4205,7 @@ function extractStoryboardRequiredText(text) {
4119
4205
  }
4120
4206
  const labeledTextPattern = /\b(?:on[-\s]?screen\s+text|visible\s+text|text\s+only|text|end\s+card\s+text|final\s+text|tagline|cta|headline|title\s+card|copy)\s*:\s*([^\n]{1,260})/gi;
4121
4207
  for (const match of text.matchAll(labeledTextPattern)) {
4122
- const value = match[1] || '';
4208
+ const value = (match[1] || '').split('|')[0];
4123
4209
  const matchStartInText = match.index ?? 0;
4124
4210
  const lineStart = text.lastIndexOf('\n', matchStartInText) + 1;
4125
4211
  const valueStartInMatch = match[0].indexOf(value);
@@ -4822,7 +4908,7 @@ function splitStoryboardTableSections(text) {
4822
4908
  return sections;
4823
4909
  }
4824
4910
  function splitStoryboardSceneSections(text) {
4825
- const matches = Array.from(text.matchAll(/^\s*(?:[-*+>#_]{1,6}\s*)*(?:[*_]{1,3})?\s*(?:Scene|Shot|Beat|Panel|Frame)\s*(\d{1,2})\b\s*(?:[-:.)|]\s*)?([^\n]*)/gim));
4911
+ const matches = Array.from(text.matchAll(/^\s*(?:[-*+>#_]{1,6}\s*)*(?:[*_]{1,3})?\s*(?:Scene|Shot|Beat|Panel|Frame)\s*_?\s*(\d{1,2})\b\s*(?:[-:.)|]\s*)?([^\n]*)/gim));
4826
4912
  if (matches.length === 0)
4827
4913
  return [];
4828
4914
  return matches.map((match, index) => {
@@ -4888,7 +4974,7 @@ function splitStoryboardNumberedListSceneSections(text) {
4888
4974
  return [];
4889
4975
  }
4890
4976
  function splitStoryboardInlineSceneSections(text) {
4891
- const markerPattern = /(^|[\s.;])((?:Scene|Shot|Beat|Panel|Frame)\s*(\d{1,2})(?:\s*,\s*(?:Scene|Shot|Beat|Panel|Frame)\s*\d{1,2})?\s*(?:\([^)]{0,120}\))?\s*(?:[:\-–—]\s*)?)/gi;
4977
+ const markerPattern = /(^|[\s.;])((?:Scene|Shot|Beat|Panel|Frame)\s*_?\s*(\d{1,2})(?:\s*,\s*(?:Scene|Shot|Beat|Panel|Frame)\s*_?\s*\d{1,2})?\s*(?:\([^)]{0,120}\))?\s*(?:[:\-–—]\s*)?)/gi;
4892
4978
  const matches = Array.from(text.matchAll(markerPattern))
4893
4979
  .map(match => {
4894
4980
  const leading = match[1] || '';
@@ -5946,7 +6032,7 @@ function buildStoryboardProject(options) {
5946
6032
  if (Number.isInteger(value) && value >= 1 && value <= 64)
5947
6033
  numbersSeen.add(value);
5948
6034
  }
5949
- for (const match of text.matchAll(/^\s*(?:[-*+>#_]{1,6}\s*)*(?:[*_]{1,3})?\s*(?:Scene|Shot|Beat|Panel|Frame)\s*(\d{1,2})\b/gim)) {
6035
+ for (const match of text.matchAll(/^\s*(?:[-*+>#_]{1,6}\s*)*(?:[*_]{1,3})?\s*(?:Scene|Shot|Beat|Panel|Frame)\s*_?\s*(\d{1,2})\b/gim)) {
5950
6036
  const value = Number(match[1]);
5951
6037
  if (Number.isInteger(value) && value >= 1 && value <= 64)
5952
6038
  numbersSeen.add(value);