@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
@@ -932,6 +932,29 @@ const PUBLIC_GPT_IMAGE_2_ADAPTER = {
932
932
  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.';
933
933
  },
934
934
  };
935
+ const PUBLIC_LTX25_ADAPTER = {
936
+ modelId: 'ltx25',
937
+ name: 'LTX 2.5',
938
+ supportedStages: ['scene_clip'],
939
+ compile(storyboard, input) {
940
+ if (input.stage !== 'scene_clip')
941
+ throw new StoryboardAdapterUnsupportedStageError('ltx25', input.stage);
942
+ const scene = requireStoryboardScene('LTX25_ADAPTER', input);
943
+ const referenceTag = input.primaryReferenceTag ?? 'context_image_0';
944
+ return {
945
+ stage: 'scene_clip',
946
+ prompt: compactSceneVideoPrompt(storyboard, scene, referenceTag),
947
+ args: {
948
+ videoModel: 'ltx25',
949
+ duration: clampSeedanceStoryboardDuration(scene.durationSec ?? 5),
950
+ aspectRatio: storyboard.targetVideoAspectRatio,
951
+ },
952
+ };
953
+ },
954
+ getSystemPromptGuidance() {
955
+ 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.';
956
+ },
957
+ };
935
958
  const PUBLIC_LTX23_ADAPTER = {
936
959
  modelId: 'ltx23',
937
960
  name: 'LTX-2.3',
@@ -983,6 +1006,7 @@ const PUBLIC_WAN_ADAPTER = {
983
1006
  const PUBLIC_STORYBOARD_ADAPTERS = [
984
1007
  PUBLIC_SEEDANCE_ADAPTER,
985
1008
  PUBLIC_GPT_IMAGE_2_ADAPTER,
1009
+ PUBLIC_LTX25_ADAPTER,
986
1010
  PUBLIC_LTX23_ADAPTER,
987
1011
  PUBLIC_WAN_ADAPTER,
988
1012
  ];
@@ -1040,8 +1064,12 @@ export const storyboardAdapterRegistry = {
1040
1064
  return PUBLIC_SEEDANCE_ADAPTER;
1041
1065
  if (trimmed.startsWith('gpt-image'))
1042
1066
  return PUBLIC_GPT_IMAGE_2_ADAPTER;
1043
- if (trimmed.startsWith('ltx'))
1067
+ if (trimmed.startsWith('ltx25'))
1068
+ return PUBLIC_LTX25_ADAPTER;
1069
+ if (trimmed.startsWith('ltx23') || trimmed.startsWith('ltx2-'))
1044
1070
  return PUBLIC_LTX23_ADAPTER;
1071
+ if (trimmed.startsWith('ltx'))
1072
+ return PUBLIC_LTX25_ADAPTER;
1045
1073
  if (trimmed.startsWith('wan'))
1046
1074
  return PUBLIC_WAN_ADAPTER;
1047
1075
  return null;
@@ -1134,6 +1162,25 @@ export const LTX23_DEV_WORKFLOW_MODELS = Object.freeze({
1134
1162
  ia2v: 'ltx23-22b-fp8_ia2v_dev',
1135
1163
  a2v: 'ltx23-22b-fp8_a2v_dev'
1136
1164
  });
1165
+ export const LTX25_WORKFLOW_MODELS = Object.freeze({
1166
+ t2v: 'ltx25-22b-int8_t2v_distilled',
1167
+ i2v: 'ltx25-22b-int8_i2v_distilled',
1168
+ ia2v: 'ltx25-22b-int8_ia2v_distilled',
1169
+ a2v: 'ltx25-22b-int8_a2v_distilled',
1170
+ v2v: 'ltx25-22b-int8_v2v_distilled'
1171
+ });
1172
+ export const LTX25_DEV_WORKFLOW_MODELS = Object.freeze({
1173
+ t2v: 'ltx25-22b-int8_t2v_dev',
1174
+ i2v: 'ltx25-22b-int8_i2v_dev',
1175
+ ia2v: 'ltx25-22b-int8_ia2v_dev',
1176
+ a2v: 'ltx25-22b-int8_a2v_dev',
1177
+ v2v: 'ltx25-22b-int8_v2v_dev'
1178
+ });
1179
+ export function resolveLtx25WorkflowModelForQuality(workflow, qualityTier) {
1180
+ return qualityTier === 'pro'
1181
+ ? LTX25_DEV_WORKFLOW_MODELS[workflow]
1182
+ : LTX25_WORKFLOW_MODELS[workflow];
1183
+ }
1137
1184
  export function resolveLtx23WorkflowModelForQuality(workflow, qualityTier) {
1138
1185
  if (qualityTier === 'pro' && workflow !== 'v2v') {
1139
1186
  return LTX23_DEV_WORKFLOW_MODELS[workflow];
@@ -1401,6 +1448,30 @@ export const VIDEO_MODEL_REGISTRY = Object.freeze({
1401
1448
  });
1402
1449
  export const EXPANDED_VIDEO_MODEL_REGISTRY = (() => {
1403
1450
  const registry = { ...VIDEO_MODEL_REGISTRY };
1451
+ for (const workflow of ['t2v', 'i2v', 'ia2v', 'a2v', 'v2v']) {
1452
+ const base = registry[LTX23_WORKFLOW_MODELS[workflow]];
1453
+ if (!base)
1454
+ continue;
1455
+ const ltx25Base = {
1456
+ ...base,
1457
+ family: 'ltx25',
1458
+ maxDimension: 3840,
1459
+ fps: 24,
1460
+ sampler: 'euler_ancestral',
1461
+ scheduler: 'manual_sigmas',
1462
+ supportsNativeAudio: true
1463
+ };
1464
+ registry[LTX25_WORKFLOW_MODELS[workflow]] = {
1465
+ ...ltx25Base,
1466
+ steps: 8,
1467
+ guidance: 1.0
1468
+ };
1469
+ registry[LTX25_DEV_WORKFLOW_MODELS[workflow]] = {
1470
+ ...ltx25Base,
1471
+ steps: 30,
1472
+ guidance: 3.0
1473
+ };
1474
+ }
1404
1475
  for (const workflow of ['t2v', 'i2v', 'ia2v', 'a2v']) {
1405
1476
  const base = registry[LTX23_WORKFLOW_MODELS[workflow]];
1406
1477
  if (!base)
@@ -1434,16 +1505,22 @@ export const EXPANDED_VIDEO_MODEL_REGISTRY = (() => {
1434
1505
  return Object.freeze(registry);
1435
1506
  })();
1436
1507
  export const VIDEO_WORKFLOW_DEFAULT_MODELS = Object.freeze({
1437
- t2v: LTX23_WORKFLOW_MODELS.t2v,
1438
- i2v: 'wan_v2.2-14b-fp8_i2v_lightx2v',
1508
+ t2v: LTX25_WORKFLOW_MODELS.t2v,
1509
+ i2v: LTX25_WORKFLOW_MODELS.i2v,
1439
1510
  s2v: 'wan_v2.2-14b-fp8_s2v_lightx2v',
1440
- ia2v: LTX23_WORKFLOW_MODELS.ia2v,
1441
- a2v: LTX23_WORKFLOW_MODELS.a2v,
1511
+ ia2v: LTX25_WORKFLOW_MODELS.ia2v,
1512
+ a2v: LTX25_WORKFLOW_MODELS.a2v,
1442
1513
  'animate-move': 'wan_v2.2-14b-fp8_animate-move_lightx2v',
1443
1514
  'animate-replace': 'wan_v2.2-14b-fp8_animate-replace_lightx2v',
1444
- v2v: LTX23_WORKFLOW_MODELS.v2v
1515
+ v2v: LTX25_WORKFLOW_MODELS.v2v
1445
1516
  });
1446
1517
  export const VIDEO_MODEL_ALIASES = Object.freeze({
1518
+ ltx25: LTX25_WORKFLOW_MODELS.t2v,
1519
+ 'ltx25-t2v': LTX25_WORKFLOW_MODELS.t2v,
1520
+ 'ltx25-i2v': LTX25_WORKFLOW_MODELS.i2v,
1521
+ 'ltx25-ia2v': LTX25_WORKFLOW_MODELS.ia2v,
1522
+ 'ltx25-a2v': LTX25_WORKFLOW_MODELS.a2v,
1523
+ 'ltx25-v2v': LTX25_WORKFLOW_MODELS.v2v,
1447
1524
  ltx23: LTX23_WORKFLOW_MODELS.t2v,
1448
1525
  'ltx23-t2v': LTX23_WORKFLOW_MODELS.t2v,
1449
1526
  'ltx23-i2v': LTX23_WORKFLOW_MODELS.i2v,
@@ -1533,7 +1610,7 @@ export const IMAGE_MODEL_ALIASES = Object.freeze({
1533
1610
  'dark-beast-krea-2-identity-edit-lora-v1-2': 'dark_beast_krea2_identity_edit_v1_2'
1534
1611
  });
1535
1612
  export function isLtx2Model(modelId) {
1536
- return modelId?.startsWith('ltx2-') || modelId?.startsWith('ltx23-') || false;
1613
+ return modelId?.startsWith('ltx2-') || modelId?.startsWith('ltx23-') || modelId?.startsWith('ltx25-') || false;
1537
1614
  }
1538
1615
  export function isWanModel(modelId) {
1539
1616
  return modelId?.startsWith('wan_') || false;
@@ -1553,6 +1630,11 @@ export function resolveVideoModelAlias(modelId, workflow) {
1553
1630
  if (!modelId)
1554
1631
  return modelId;
1555
1632
  const key = String(modelId).trim().toLowerCase();
1633
+ if (key === 'ltx25') {
1634
+ if (workflow && isLtxWorkflow(workflow)) {
1635
+ return LTX25_WORKFLOW_MODELS[workflow];
1636
+ }
1637
+ }
1556
1638
  if (key === 'ltx23' && isLtxWorkflow(workflow)) {
1557
1639
  return LTX23_WORKFLOW_MODELS[workflow];
1558
1640
  }
@@ -1588,6 +1670,9 @@ export function getBuiltinVideoModelConfig(modelId) {
1588
1670
  if (id.startsWith('ltx23-') && isLtxWorkflow(workflow)) {
1589
1671
  return EXPANDED_VIDEO_MODEL_REGISTRY[LTX23_WORKFLOW_MODELS[workflow]] || null;
1590
1672
  }
1673
+ if (id.startsWith('ltx25-') && isLtxWorkflow(workflow)) {
1674
+ return EXPANDED_VIDEO_MODEL_REGISTRY[LTX25_WORKFLOW_MODELS[workflow]] || null;
1675
+ }
1591
1676
  if (id.startsWith('ltx2-')) {
1592
1677
  return {
1593
1678
  workflow,
@@ -1853,15 +1938,15 @@ export function selectDefaultVideoModel(workflow, opts = {}, config) {
1853
1938
  if (configured)
1854
1939
  return resolveVideoModelAlias(configured, workflow) || null;
1855
1940
  if (workflow === 'ia2v')
1856
- return resolveLtx23WorkflowModelForQuality('ia2v', opts.quality);
1941
+ return resolveLtx25WorkflowModelForQuality('ia2v', opts.quality);
1857
1942
  if (workflow === 'a2v')
1858
- return resolveLtx23WorkflowModelForQuality('a2v', opts.quality);
1943
+ return resolveLtx25WorkflowModelForQuality('a2v', opts.quality);
1859
1944
  if (workflow === 'v2v')
1860
- return LTX23_WORKFLOW_MODELS.v2v;
1945
+ return resolveLtx25WorkflowModelForQuality('v2v', opts.quality);
1861
1946
  if (workflow === 't2v')
1862
- return resolveLtx23WorkflowModelForQuality('t2v', opts.quality);
1947
+ return resolveLtx25WorkflowModelForQuality('t2v', opts.quality);
1863
1948
  if (workflow === 'i2v' && (opts.referenceAudioIdentity || promptNeedsLtxNativeAudio(opts.prompt) || opts.quality === 'hq' || opts.quality === 'pro')) {
1864
- return resolveLtx23WorkflowModelForQuality('i2v', opts.quality);
1949
+ return resolveLtx25WorkflowModelForQuality('i2v', opts.quality);
1865
1950
  }
1866
1951
  return VIDEO_WORKFLOW_DEFAULT_MODELS[workflow] || null;
1867
1952
  }
@@ -4013,7 +4098,7 @@ function extractStoryboardRequiredText(text) {
4013
4098
  }
4014
4099
  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;
4015
4100
  for (const match of text.matchAll(labeledTextPattern)) {
4016
- const value = match[1] || '';
4101
+ const value = (match[1] || '').split('|')[0];
4017
4102
  const matchStartInText = match.index ?? 0;
4018
4103
  const lineStart = text.lastIndexOf('\n', matchStartInText) + 1;
4019
4104
  const valueStartInMatch = match[0].indexOf(value);
@@ -4716,7 +4801,7 @@ function splitStoryboardTableSections(text) {
4716
4801
  return sections;
4717
4802
  }
4718
4803
  function splitStoryboardSceneSections(text) {
4719
- 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));
4804
+ 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));
4720
4805
  if (matches.length === 0)
4721
4806
  return [];
4722
4807
  return matches.map((match, index) => {
@@ -4782,7 +4867,7 @@ function splitStoryboardNumberedListSceneSections(text) {
4782
4867
  return [];
4783
4868
  }
4784
4869
  function splitStoryboardInlineSceneSections(text) {
4785
- 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;
4870
+ 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;
4786
4871
  const matches = Array.from(text.matchAll(markerPattern))
4787
4872
  .map(match => {
4788
4873
  const leading = match[1] || '';
@@ -5840,7 +5925,7 @@ export function buildStoryboardProject(options) {
5840
5925
  if (Number.isInteger(value) && value >= 1 && value <= 64)
5841
5926
  numbersSeen.add(value);
5842
5927
  }
5843
- for (const match of text.matchAll(/^\s*(?:[-*+>#_]{1,6}\s*)*(?:[*_]{1,3})?\s*(?:Scene|Shot|Beat|Panel|Frame)\s*(\d{1,2})\b/gim)) {
5928
+ 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)) {
5844
5929
  const value = Number(match[1]);
5845
5930
  if (Number.isInteger(value) && value >= 1 && value <= 64)
5846
5931
  numbersSeen.add(value);