@sogni-ai/sogni-intelligence-client 3.2.3 → 3.4.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 (139) hide show
  1. package/dist/client/SogniClientWrapper.d.ts +1 -0
  2. package/dist/client/SogniClientWrapper.d.ts.map +1 -1
  3. package/dist/client/SogniClientWrapper.js +13 -5
  4. package/dist/client/SogniClientWrapper.js.map +1 -1
  5. package/dist/contracts/imagePrompt.d.ts +1 -1
  6. package/dist/contracts/imagePrompt.d.ts.map +1 -1
  7. package/dist/contracts/imagePrompt.js +7 -0
  8. package/dist/contracts/imagePrompt.js.map +1 -1
  9. package/dist/contracts/index.d.ts +1 -1
  10. package/dist/contracts/index.d.ts.map +1 -1
  11. package/dist/contracts/index.js +3 -1
  12. package/dist/contracts/index.js.map +1 -1
  13. package/dist/contracts/toolPromptMarkers.d.ts +2 -0
  14. package/dist/contracts/toolPromptMarkers.d.ts.map +1 -1
  15. package/dist/contracts/toolPromptMarkers.js +4 -1
  16. package/dist/contracts/toolPromptMarkers.js.map +1 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/media/vendorModelPremium.d.ts +1 -1
  22. package/dist/media/vendorModelPremium.d.ts.map +1 -1
  23. package/dist/media/vendorModelPremium.js +3 -1
  24. package/dist/media/vendorModelPremium.js.map +1 -1
  25. package/dist/media/videoSettings.d.ts +22 -1
  26. package/dist/media/videoSettings.d.ts.map +1 -1
  27. package/dist/media/videoSettings.js +99 -1
  28. package/dist/media/videoSettings.js.map +1 -1
  29. package/dist/openai-tools/_manifests.generated.d.ts.map +1 -1
  30. package/dist/openai-tools/_manifests.generated.js +20 -14
  31. package/dist/openai-tools/_manifests.generated.js.map +1 -1
  32. package/dist/openai-tools/generation-tools.json +20 -14
  33. package/dist/public-skill-runtime/index.d.ts +9 -1
  34. package/dist/public-skill-runtime/index.d.ts.map +1 -1
  35. package/dist/public-skill-runtime/index.js +25 -4
  36. package/dist/public-skill-runtime/index.js.map +1 -1
  37. package/dist/schemas/billing/spend-gate.schema.json +58 -37
  38. package/dist/schemas/events/run-event.schema.json +17 -6
  39. package/dist/schemas/tools/animate_photo.schema.json +3 -3
  40. package/dist/schemas/tools/extend_video.schema.json +1 -0
  41. package/dist/schemas/tools/generate_image.schema.json +1 -0
  42. package/dist/schemas/tools/generate_video.schema.json +6 -5
  43. package/dist/schemas/tools/replace_video_segment.schema.json +1 -0
  44. package/dist/schemas/tools/sound_to_video.schema.json +4 -3
  45. package/dist/schemas/tools/video_to_video.schema.json +4 -3
  46. package/dist/skills/asset_reference_management/modelRefRegistry.d.ts.map +1 -1
  47. package/dist/skills/asset_reference_management/modelRefRegistry.js +24 -0
  48. package/dist/skills/asset_reference_management/modelRefRegistry.js.map +1 -1
  49. package/dist/skills/asset_reference_management/types.d.ts +1 -1
  50. package/dist/skills/asset_reference_management/types.d.ts.map +1 -1
  51. package/dist/tools/definitions/animate-photo/definition.js +2 -2
  52. package/dist/tools/definitions/animate-photo/definition.js.map +1 -1
  53. package/dist/tools/definitions/extend-video/definition.js +1 -1
  54. package/dist/tools/definitions/extend-video/definition.js.map +1 -1
  55. package/dist/tools/definitions/generate-image/definition.js +1 -1
  56. package/dist/tools/definitions/generate-image/definition.js.map +1 -1
  57. package/dist/tools/definitions/generate-video/definition.d.ts.map +1 -1
  58. package/dist/tools/definitions/generate-video/definition.js +18 -7
  59. package/dist/tools/definitions/generate-video/definition.js.map +1 -1
  60. package/dist/tools/definitions/replace-video-segment/definition.js +1 -1
  61. package/dist/tools/definitions/replace-video-segment/definition.js.map +1 -1
  62. package/dist/tools/definitions/sound-to-video/definition.js +3 -3
  63. package/dist/tools/definitions/sound-to-video/definition.js.map +1 -1
  64. package/dist/tools/definitions/video-to-video/definition.js +4 -4
  65. package/dist/tools/definitions/video-to-video/definition.js.map +1 -1
  66. package/dist/tools/index.d.ts +4 -0
  67. package/dist/tools/index.d.ts.map +1 -1
  68. package/dist/tools/index.js +11 -2
  69. package/dist/tools/index.js.map +1 -1
  70. package/dist/tools/shared/happyhorsePolicyErrors.d.ts +30 -0
  71. package/dist/tools/shared/happyhorsePolicyErrors.d.ts.map +1 -0
  72. package/dist/tools/shared/happyhorsePolicyErrors.js +175 -0
  73. package/dist/tools/shared/happyhorsePolicyErrors.js.map +1 -0
  74. package/dist/tools/shared/happyhorseReferences.d.ts +24 -0
  75. package/dist/tools/shared/happyhorseReferences.d.ts.map +1 -0
  76. package/dist/tools/shared/happyhorseReferences.js +52 -0
  77. package/dist/tools/shared/happyhorseReferences.js.map +1 -0
  78. package/dist/tools/shared/modelRegistry.d.ts.map +1 -1
  79. package/dist/tools/shared/modelRegistry.js +6 -0
  80. package/dist/tools/shared/modelRegistry.js.map +1 -1
  81. package/dist/utils/helpers.d.ts +1 -0
  82. package/dist/utils/helpers.d.ts.map +1 -1
  83. package/dist/utils/helpers.js +30 -0
  84. package/dist/utils/helpers.js.map +1 -1
  85. package/dist-esm/client/SogniClientWrapper.js +13 -5
  86. package/dist-esm/client/SogniClientWrapper.js.map +1 -1
  87. package/dist-esm/contracts/imagePrompt.js +7 -0
  88. package/dist-esm/contracts/imagePrompt.js.map +1 -1
  89. package/dist-esm/contracts/index.js +1 -1
  90. package/dist-esm/contracts/index.js.map +1 -1
  91. package/dist-esm/contracts/toolPromptMarkers.js +3 -0
  92. package/dist-esm/contracts/toolPromptMarkers.js.map +1 -1
  93. package/dist-esm/index.js +1 -1
  94. package/dist-esm/index.js.map +1 -1
  95. package/dist-esm/media/vendorModelPremium.js +3 -1
  96. package/dist-esm/media/vendorModelPremium.js.map +1 -1
  97. package/dist-esm/media/videoSettings.js +97 -0
  98. package/dist-esm/media/videoSettings.js.map +1 -1
  99. package/dist-esm/openai-tools/_manifests.generated.js +20 -14
  100. package/dist-esm/openai-tools/_manifests.generated.js.map +1 -1
  101. package/dist-esm/openai-tools/generation-tools.json +20 -14
  102. package/dist-esm/public-skill-runtime/index.js +22 -3
  103. package/dist-esm/public-skill-runtime/index.js.map +1 -1
  104. package/dist-esm/schemas/billing/spend-gate.schema.json +58 -37
  105. package/dist-esm/schemas/events/run-event.schema.json +17 -6
  106. package/dist-esm/schemas/tools/animate_photo.schema.json +3 -3
  107. package/dist-esm/schemas/tools/extend_video.schema.json +1 -0
  108. package/dist-esm/schemas/tools/generate_image.schema.json +1 -0
  109. package/dist-esm/schemas/tools/generate_video.schema.json +6 -5
  110. package/dist-esm/schemas/tools/replace_video_segment.schema.json +1 -0
  111. package/dist-esm/schemas/tools/sound_to_video.schema.json +4 -3
  112. package/dist-esm/schemas/tools/video_to_video.schema.json +4 -3
  113. package/dist-esm/skills/asset_reference_management/modelRefRegistry.js +24 -0
  114. package/dist-esm/skills/asset_reference_management/modelRefRegistry.js.map +1 -1
  115. package/dist-esm/tools/definitions/animate-photo/definition.js +2 -2
  116. package/dist-esm/tools/definitions/animate-photo/definition.js.map +1 -1
  117. package/dist-esm/tools/definitions/extend-video/definition.js +1 -1
  118. package/dist-esm/tools/definitions/extend-video/definition.js.map +1 -1
  119. package/dist-esm/tools/definitions/generate-image/definition.js +1 -1
  120. package/dist-esm/tools/definitions/generate-image/definition.js.map +1 -1
  121. package/dist-esm/tools/definitions/generate-video/definition.js +19 -8
  122. package/dist-esm/tools/definitions/generate-video/definition.js.map +1 -1
  123. package/dist-esm/tools/definitions/replace-video-segment/definition.js +1 -1
  124. package/dist-esm/tools/definitions/replace-video-segment/definition.js.map +1 -1
  125. package/dist-esm/tools/definitions/sound-to-video/definition.js +3 -3
  126. package/dist-esm/tools/definitions/sound-to-video/definition.js.map +1 -1
  127. package/dist-esm/tools/definitions/video-to-video/definition.js +4 -4
  128. package/dist-esm/tools/definitions/video-to-video/definition.js.map +1 -1
  129. package/dist-esm/tools/index.js +3 -0
  130. package/dist-esm/tools/index.js.map +1 -1
  131. package/dist-esm/tools/shared/happyhorsePolicyErrors.js +168 -0
  132. package/dist-esm/tools/shared/happyhorsePolicyErrors.js.map +1 -0
  133. package/dist-esm/tools/shared/happyhorseReferences.js +46 -0
  134. package/dist-esm/tools/shared/happyhorseReferences.js.map +1 -0
  135. package/dist-esm/tools/shared/modelRegistry.js +6 -0
  136. package/dist-esm/tools/shared/modelRegistry.js.map +1 -1
  137. package/dist-esm/utils/helpers.js +29 -0
  138. package/dist-esm/utils/helpers.js.map +1 -1
  139. package/package.json +3 -3
@@ -32,7 +32,7 @@ export const definition = {
32
32
  },
33
33
  videoModel: {
34
34
  type: 'string',
35
- enum: ['auto', 'ltx23', 'seedance2', 'seedance2-fast'],
35
+ enum: ['auto', 'ltx23', 'seedance2', 'seedance2-mini', 'seedance2-fast'],
36
36
  description: 'Which model to use for the new segment. Default: "auto" — detect from the base video\'s producer (Seedance base → Seedance, otherwise LTX-2.3). ' +
37
37
  'Override only when the user explicitly requests a different model.',
38
38
  },
@@ -1 +1 @@
1
- {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/extend-video/definition.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,gVAAgV;YAChV,uGAAuG;YACvG,qHAAqH;YACrH,uFAAuF;YACvF,wJAAwJ;YACxJ,qMAAqM;YACrM,4GAA4G;YAC5G,6GAA6G;QAC/G,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,yIAAyI;wBACzI,uLAAuL;wBACvL,2KAA2K;iBAC9K;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,8GAA8G;oBAChH,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,iFAAiF;wBACjF,6LAA6L;iBAChM;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,CAAC;oBACtD,WAAW,EACT,kJAAkJ;wBAClJ,oEAAoE;iBACvE;gBACD,iBAAiB,EAAE;oBACjB,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,4OAA4O;iBAC/O;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/extend-video/definition.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,gVAAgV;YAChV,uGAAuG;YACvG,qHAAqH;YACrH,uFAAuF;YACvF,wJAAwJ;YACxJ,qMAAqM;YACrM,4GAA4G;YAC5G,6GAA6G;QAC/G,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,yIAAyI;wBACzI,uLAAuL;wBACvL,2KAA2K;iBAC9K;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,8GAA8G;oBAChH,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,iFAAiF;wBACjF,6LAA6L;iBAChM;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;oBACxE,WAAW,EACT,kJAAkJ;wBAClJ,oEAAoE;iBACvE;gBACD,iBAAiB,EAAE;oBACjB,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,4OAA4O;iBAC/O;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB;KACF;CACF,CAAC"}
@@ -40,7 +40,7 @@ VIDEO KEYFRAMES: When generating images intended as first+last frames for video
40
40
  type: 'string',
41
41
  enum: [
42
42
  'gpt-image-2',
43
- 'z-turbo', 'z-image', 'chroma-v46-flash', 'chroma-detail', 'flux1-krea', 'flux2', 'pony-v7',
43
+ 'z-turbo', 'z-image', 'krea-2-turbo', 'chroma-v46-flash', 'chroma-detail', 'flux1-krea', 'flux2', 'pony-v7',
44
44
  'qwen-2512', 'qwen-2512-lightning',
45
45
  'albedo-xl', 'animagine-xl', 'anima-pencil-xl', 'art-universe-xl', 'hyphoria-real',
46
46
  'analog-madness-xl', 'cyberrealistic-xl', 'real-dream-xl', 'faetastic-xl',
@@ -1 +1 @@
1
- {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/generate-image/definition.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,ywBAAywB;QAC3wB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;;EAErB,uBAAuB;;;;;;;;;;;;;;;;;;;;;;siBAsB6gB;iBAC7hB;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE;wBACJ,aAAa;wBACb,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS;wBAC3F,WAAW,EAAE,qBAAqB;wBAClC,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe;wBAClF,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc;wBACzE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB;qBACpD;oBACD,WAAW,EACT,ouCAAouC;iBACvuC;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,2yBAA2yB;iBAC9yB;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4yBAA4yB;iBAC/yB;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,s9CAAs9C;oBACx9C,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,oJAAoJ;iBACvJ;gBACD,uBAAuB,EAAE;oBACvB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,uXAAuX;iBAC1X;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,sLAAsL;iBACzL;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,uIAAuI;iBAC1I;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,2KAA2K;iBAC9K;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;oBAC/B,WAAW,EACT,4QAA4Q;iBAC/Q;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;oBACpC,WAAW,EACT,uLAAuL;iBAC1L;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,GAAG,wBAAwB,glBAAglB;iBAC9mB;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/generate-image/definition.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,ywBAAywB;QAC3wB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;;EAErB,uBAAuB;;;;;;;;;;;;;;;;;;;;;;siBAsB6gB;iBAC7hB;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE;wBACJ,aAAa;wBACb,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS;wBAC3G,WAAW,EAAE,qBAAqB;wBAClC,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe;wBAClF,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc;wBACzE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB;qBACpD;oBACD,WAAW,EACT,ouCAAouC;iBACvuC;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,2yBAA2yB;iBAC9yB;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4yBAA4yB;iBAC/yB;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,s9CAAs9C;oBACx9C,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,oJAAoJ;iBACvJ;gBACD,uBAAuB,EAAE;oBACvB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,uXAAuX;iBAC1X;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,sLAAsL;iBACzL;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,uIAAuI;iBAC1I;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,2KAA2K;iBAC9K;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;oBAC/B,WAAW,EACT,4QAA4Q;iBAC/Q;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;oBACpC,WAAW,EACT,uLAAuL;iBAC1L;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,GAAG,wBAAwB,glBAAglB;iBAC9mB;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}
@@ -1,10 +1,10 @@
1
- import { GENERATE_VIDEO_SKIP_PROMPT_PROCESSING_DESCRIPTION, LITERAL_VIDEO_PROMPT_OVERRIDE, SEEDANCE_EXPAND_PROMPT_DESCRIPTION, SEEDANCE_TOOL_MULTIMODAL_REFERENCE_GUIDANCE, } from '../../../contracts/toolPromptMarkers.js';
1
+ import { GENERATE_VIDEO_SKIP_PROMPT_PROCESSING_DESCRIPTION, LITERAL_VIDEO_PROMPT_OVERRIDE, SEEDANCE_EXPAND_PROMPT_DESCRIPTION, SEEDANCE_TOOL_MULTIMODAL_REFERENCE_GUIDANCE, HAPPYHORSE_GENERATE_VIDEO_MODEL_DESCRIPTION, } from '../../../contracts/toolPromptMarkers.js';
2
2
  import { ASPECT_RATIO_DESCRIPTION } from '../../../media/index.js';
3
3
  export const definition = {
4
4
  type: "function",
5
5
  function: {
6
6
  name: "generate_video",
7
- description: 'Generate a video from text or Seedance multimodal references. LTX 2.3 generates audio natively (dialogue, sounds, ambient music) — describe audio in the prompt. If the user provides exact speech, include it in double quotes; if they only imply speech, describe the performance and voice without inventing quoted words. Never use placeholders such as "while speaking", "dialogue begins", "explaining", or "final line lands". PERSONA VOICE: Only when the user explicitly asks to use/clone a registered persona voice clip, call resolve_personas first, then set voicePersonaName to select which persona\'s voice clip to use. Do not set voicePersonaName for ordinary character dialogue or inferred voices; describe those voices in the prompt for native LTX audio. For cross-persona narration (e.g. David narrates a video of Aleyna), resolve both personas and set voicePersonaName to the narrator only if that registered voice was requested. Persona voice requires ltx23 (WAN 2.2 does not support voice identity). For non-Seedance syncing to a specific song or audio track, use sound_to_video instead. For non-Seedance animation from a locked source photo, use animate_photo. Do NOT use for My Personas unless generating a Seedance reference-based video — standard persona videos use resolve_personas → edit_image → animate_photo. SEEDANCE DEFAULT: For seedance2 or seedance2-fast, default to exactly one 4-15s video unless the user explicitly asks for multiple separate outputs. Multiple beats, shots, or scene descriptions in one up-to-15s Seedance prompt are still one video. If the user requests one continuous Seedance video longer than 15s, preserve the requested total duration in the prompt/context; chat orchestration should split it into supported segment renders and stitch them instead of clamping it to a 15s excerpt. Uploaded/generated storyboard, shot-sheet, or trailer-concept images used as Seedance references should become one Seedance generate_video call by default; do not extract panels with edit_image and do not animate the storyboard sheet with LTX unless the user explicitly asks for separate non-Seedance clips. Seedance loose image, video, and audio references go through this tool; do not use animate_photo sourceImageIndex/frameRole/endImageIndex for Seedance. If an uploaded video is the source clip to transform, upscale, enhance, restyle, or remaster, use video_to_video with controlMode="seedance-v2v" instead of generate_video referenceVideoIndices. If the uploaded audio is the primary sync target, lip-sync target, or requested as sound-to-video/audio-sync, use sound_to_video with videoModel="seedance2" instead of this tool. Use referenceAudioIndices here only when audio is a loose reference under an image/video-anchored Seedance shot. For Seedance, every image — first frame, last frame, or loose reference — is passed through referenceImageIndices (auto-uploaded as referenceImageUrls). Anchor frame intent in the prompt with @Image tags such as "Use @Image1 as the opening shot reference. Begin the video with a composition, subject placement, lighting, mood, and camera framing that closely match @Image1." (or @Image2 as the final shot reference). For seamless-loop or "first frame and last frame identical" requests with a single uploaded image, anchor it explicitly as both: "Use @Image1 as both the first frame and last frame so the video loops cleanly back to the opening composition." Assign each useful @Image/@Video/@Audio tag a role. APPROVED STORYBOARD PRODUCTION: When the user asks for a production workflow from an approved storyboard, the chat orchestrator should use the durable CampaignStoryboard contract: render the composite board, audit it, generate per-scene GPT Image 2 keyframes, then render Seedance scene clips and stitch them. Do not replace that with a generic storyboard-reference video unless the user asks for a fast draft. PARTIAL VIDEO EDITS: Do NOT call generate_video to re-render an existing rendered/uploaded video just to change part of it (the bumper, the intro, the end card, a single scene, the last few seconds, etc.). Use replace_video_segment for that — it preserves the unchanged portion, keeps the original audio outside the replaced window, and costs far less. Likewise use extend_video to add new time to the end without rewriting the rest. If the request is vague, ask about vision/mood/style first. Only call once you have clear creative intent.',
7
+ description: 'Generate a video from text or Seedance multimodal references. LTX 2.3 generates audio natively (dialogue, sounds, ambient music) — describe audio in the prompt. If the user provides exact speech, include it in double quotes; if they only imply speech, describe the performance and voice without inventing quoted words. Never use placeholders such as "while speaking", "dialogue begins", "explaining", or "final line lands". PERSONA VOICE: Only when the user explicitly asks to use/clone a registered persona voice clip, call resolve_personas first, then set voicePersonaName to select which persona\'s voice clip to use. Do not set voicePersonaName for ordinary character dialogue or inferred voices; describe those voices in the prompt for native LTX audio. For cross-persona narration (e.g. David narrates a video of Aleyna), resolve both personas and set voicePersonaName to the narrator only if that registered voice was requested. Persona voice requires ltx23 (WAN 2.2 does not support voice identity). For non-Seedance syncing to a specific song or audio track, use sound_to_video instead. For non-Seedance animation from a locked source photo, use animate_photo. Do NOT use for My Personas unless generating a Seedance reference-based video — standard persona videos use resolve_personas → edit_image → animate_photo. SEEDANCE DEFAULT: For seedance2, seedance2-mini, or seedance2-fast, default to exactly one 4-15s video unless the user explicitly asks for multiple separate outputs. Multiple beats, shots, or scene descriptions in one up-to-15s Seedance prompt are still one video. If the user requests one continuous Seedance video longer than 15s, preserve the requested total duration in the prompt/context; chat orchestration should split it into supported segment renders and stitch them instead of clamping it to a 15s excerpt. Uploaded/generated storyboard, shot-sheet, or trailer-concept images used as Seedance references should become one Seedance generate_video call by default; do not extract panels with edit_image and do not animate the storyboard sheet with LTX unless the user explicitly asks for separate non-Seedance clips. Seedance loose image, video, and audio references go through this tool; do not use animate_photo sourceImageIndex/frameRole/endImageIndex for Seedance. If an uploaded video is the source clip to transform, upscale, enhance, restyle, or remaster, use video_to_video with controlMode="seedance-v2v" instead of generate_video referenceVideoIndices. If the uploaded audio is the primary sync target, lip-sync target, or requested as sound-to-video/audio-sync, use sound_to_video with videoModel="seedance2-mini" instead of this tool unless the user asks for full Seedance. Use referenceAudioIndices here only when audio is a loose reference under an image/video-anchored Seedance shot. For Seedance, every image — first frame, last frame, or loose reference — is passed through referenceImageIndices (auto-uploaded as referenceImageUrls). Anchor frame intent in the prompt with @Image tags such as "Use @Image1 as the opening shot reference. Begin the video with a composition, subject placement, lighting, mood, and camera framing that closely match @Image1." (or @Image2 as the final shot reference). For seamless-loop or "first frame and last frame identical" requests with a single uploaded image, anchor it explicitly as both: "Use @Image1 as both the first frame and last frame so the video loops cleanly back to the opening composition." Assign each useful @Image/@Video/@Audio tag a role. APPROVED STORYBOARD PRODUCTION: When the user asks for a production workflow from an approved storyboard, the chat orchestrator should use the durable CampaignStoryboard contract: render the composite board, audit it, generate per-scene GPT Image 2 keyframes, then render Seedance scene clips and stitch them. Do not replace that with a generic storyboard-reference video unless the user asks for a fast draft. PARTIAL VIDEO EDITS: Do NOT call generate_video to re-render an existing rendered/uploaded video just to change part of it (the bumper, the intro, the end card, a single scene, the last few seconds, etc.). Use replace_video_segment for that — it preserves the unchanged portion, keeps the original audio outside the replaced window, and costs far less. Likewise use extend_video to add new time to the end without rewriting the rest. If the request is vague, ask about vision/mood/style first. Only call once you have clear creative intent.',
8
8
  parameters: {
9
9
  type: "object",
10
10
  properties: {
@@ -58,13 +58,24 @@ BATCH VARIATIONS: When numberOfVariations > 1, use Dynamic Prompt syntax. This i
58
58
  },
59
59
  negativePrompt: {
60
60
  type: "string",
61
- description: "Advanced non-Seedance only. Use this field only when the user explicitly asks to set a separate negative prompt. For ordinary avoid/no/don't constraints on LTX 2.3 or WAN 2.2, translate them into affirmative production constraints inside prompt instead; do not move them here. Do not set for seedance2 or seedance2-fast.",
61
+ description: "Advanced non-Seedance only. Use this field only when the user explicitly asks to set a separate negative prompt. For ordinary avoid/no/don't constraints on LTX 2.3 or WAN 2.2, translate them into affirmative production constraints inside prompt instead; do not move them here. Do not set for seedance2, seedance2-mini, or seedance2-fast.",
62
62
  },
63
63
  videoModel: {
64
64
  type: "string",
65
- enum: ["ltx23", "wan22", "seedance2", "seedance2-fast"],
66
- description: 'Video model. "ltx23" (default): LTX 2.3 with native audio; Fast/HQ use the distilled 8-step worker and Default Media Quality Pro uses the non-distilled dev worker. "wan22": Fast 4-step, simple motion, no audio. Default: "ltx23". Seedance quality is selected only by model: use "seedance2-fast" when the user asks for Seedance Fast / seedance-fast / faster draft iteration, and use "seedance2" for the full Seedance 2.0 model, explicit non-fast/full-quality requests, 1080p requests, or generated/uploaded storyboard images unless the user explicitly asks for a draft or the fast model. Do not use Default Media Quality Fast/HQ/Pro or targetResolution to represent Seedance quality. ' +
67
- SEEDANCE_TOOL_MULTIMODAL_REFERENCE_GUIDANCE,
65
+ enum: [
66
+ "ltx23",
67
+ "wan22",
68
+ "seedance2",
69
+ "seedance2-mini",
70
+ "seedance2-fast",
71
+ "happyhorse-1.1-t2v",
72
+ "happyhorse-1.1-i2v",
73
+ "happyhorse-1.1-r2v",
74
+ ],
75
+ description: 'Video model. "ltx23" (default): LTX 2.3 with native audio; Fast/HQ use the distilled 8-step worker and Default Media Quality Pro uses the non-distilled dev worker. "wan22": Fast 4-step, simple motion, no audio. Default: "ltx23". Seedance quality is selected only by model: use "seedance2-mini" for Seedance 2.0 Mini or faster/lower-cost 720p iteration, use "seedance2-fast" only when the user explicitly asks for Seedance Fast / seedance-fast, and use "seedance2" for the full Seedance 2.0 model, explicit non-fast/full-quality requests, 1080p/4K requests, or generated/uploaded storyboard images unless the user explicitly asks for a draft, Mini, or the fast model. Do not use Default Media Quality Fast/HQ/Pro or targetResolution to represent Seedance quality. ' +
76
+ SEEDANCE_TOOL_MULTIMODAL_REFERENCE_GUIDANCE +
77
+ ' ' +
78
+ HAPPYHORSE_GENERATE_VIDEO_MODEL_DESCRIPTION,
68
79
  },
69
80
  generateAudio: {
70
81
  type: "boolean",
@@ -83,7 +94,7 @@ BATCH VARIATIONS: When numberOfVariations > 1, use Dynamic Prompt syntax. This i
83
94
  referenceAudioIndices: {
84
95
  type: "array",
85
96
  items: { type: "number" },
86
- description: 'Seedance only. Optional loose audio references. Use negative indices for uploaded audio files (-1 first uploaded audio, -2 second uploaded audio) and non-negative indices for generated audio results. Omit by default: uploaded audio is auto-forwarded as @Audio references when the Seedance request also has an image or video reference. Use this only for loose background, mood, timing, or style references under an image/video-anchored Seedance shot. If the uploaded audio is the primary sync target, lip-sync target, or requested as sound-to-video/audio-sync, use sound_to_video with videoModel="seedance2" instead. Audio-only Seedance requests are unsupported; use sound_to_video for uploaded-audio-only workflows.',
97
+ description: 'Seedance only. Optional loose audio references. Use negative indices for uploaded audio files (-1 first uploaded audio, -2 second uploaded audio) and non-negative indices for generated audio results. Omit by default: uploaded audio is auto-forwarded as @Audio references when the Seedance request also has an image or video reference. Use this only for loose background, mood, timing, or style references under an image/video-anchored Seedance shot. If the uploaded audio is the primary sync target, lip-sync target, or requested as sound-to-video/audio-sync, use sound_to_video with videoModel="seedance2-mini" instead unless the user asks for full Seedance. Audio-only Seedance requests are unsupported; use sound_to_video for uploaded-audio-only workflows.',
87
98
  },
88
99
  width: {
89
100
  type: "number",
@@ -95,7 +106,7 @@ BATCH VARIATIONS: When numberOfVariations > 1, use Dynamic Prompt syntax. This i
95
106
  },
96
107
  targetResolution: {
97
108
  type: "number",
98
- description: 'Short-side video resolution target in pixels. Use when the user asks for a bare named resolution such as "480p", "720p", or "1080p" without exact pixels or an output orientation. This is resolution only, not a Seedance quality tier: Seedance quality is selected by videoModel ("seedance2" vs "seedance2-fast"). Do not set targetResolution from Default Media Quality Fast/HQ/Pro. If omitted for Seedance, the host uses the selected model default. This preserves/inherits the current video shape instead of forcing landscape. Do NOT set width, height, or exact-pixel aspectRatio for bare named resolution requests. If the user says "720p portrait" or "720p landscape", use exact width/height/aspectRatio instead.',
109
+ description: 'Short-side video resolution target in pixels. Use when the user asks for a bare named resolution such as "480p", "720p", "1080p", "2160p", or "4K" without exact pixels or an output orientation. This is resolution only, not a Seedance quality tier: Seedance quality is selected by videoModel ("seedance2", "seedance2-mini", or "seedance2-fast"). Seedance 2.0 full supports 4K; Seedance Mini/Fast support 480p/720p only. Do not set targetResolution from Default Media Quality Fast/HQ/Pro. If omitted for Seedance, the host uses the selected model default. This preserves/inherits the current video shape instead of forcing landscape. Do NOT set width, height, or exact-pixel aspectRatio for bare named resolution requests. If the user says "720p portrait", "720p landscape", "4K portrait", or "4K landscape", use exact width/height/aspectRatio instead.',
99
110
  },
100
111
  numberOfVariations: {
101
112
  type: "number",
@@ -1 +1 @@
1
- {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/generate-video/definition.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,iDAAiD,EACjD,6BAA6B,EAC7B,kCAAkC,EAClC,2CAA2C,GAC5C,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,m1IAAm1I;QACr1I,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;;EAErB,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;kcA4Bma;iBACzb;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,kCAAkC;iBAChD;gBACD,oBAAoB,EAAE;oBACpB,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,iDAAiD;iBAC/D;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,8GAA8G;oBAChH,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,kUAAkU;iBACrU;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,CAAC;oBACvD,WAAW,EACT,4qBAA4qB;wBAC5qB,2CAA2C;iBAC9C;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,oKAAoK;iBACvK;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EACT,w0BAAw0B;iBAC30B;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EACT,mfAAmf;iBACtf;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EACT,6sBAA6sB;iBAChtB;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,i/BAAi/B;iBACp/B;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,urBAAurB;iBAC1rB;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,wsBAAwsB;iBAC3sB;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4XAA4X;oBAC9X,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wBAAwB;iBACtC;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,8jBAA8jB;iBACjkB;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/generate-video/definition.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,iDAAiD,EACjD,6BAA6B,EAC7B,kCAAkC,EAClC,2CAA2C,EAC3C,2CAA2C,GAC5C,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,g5IAAg5I;QACl5I,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;;EAErB,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;kcA4Bma;iBACzb;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,kCAAkC;iBAChD;gBACD,oBAAoB,EAAE;oBACpB,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,iDAAiD;iBAC/D;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,8GAA8G;oBAChH,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,mVAAmV;iBACtV;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE;wBACJ,OAAO;wBACP,OAAO;wBACP,WAAW;wBACX,gBAAgB;wBAChB,gBAAgB;wBAChB,oBAAoB;wBACpB,oBAAoB;wBACpB,oBAAoB;qBACrB;oBACD,WAAW,EACT,6vBAA6vB;wBAC7vB,2CAA2C;wBAC3C,GAAG;wBACH,2CAA2C;iBAC9C;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,oKAAoK;iBACvK;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EACT,w0BAAw0B;iBAC30B;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EACT,mfAAmf;iBACtf;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EACT,yvBAAyvB;iBAC5vB;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,i/BAAi/B;iBACp/B;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,urBAAurB;iBAC1rB;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,o1BAAo1B;iBACv1B;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4XAA4X;oBAC9X,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wBAAwB;iBACtC;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,8jBAA8jB;iBACjkB;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}
@@ -48,7 +48,7 @@ export const definition = {
48
48
  },
49
49
  videoModel: {
50
50
  type: 'string',
51
- enum: ['auto', 'ltx23', 'wan22', 'seedance2', 'seedance2-fast'],
51
+ enum: ['auto', 'ltx23', 'wan22', 'seedance2', 'seedance2-mini', 'seedance2-fast'],
52
52
  description: 'Which model to use for the new segment. Default: "auto" — detect from the base video\'s producer (Seedance base → Seedance, Wan base → Wan 2.2, otherwise LTX-2.3). Override only when the user explicitly requests a different model.',
53
53
  },
54
54
  keepOriginalAudio: {
@@ -1 +1 @@
1
- {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/replace-video-segment/definition.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,scAAsc;YACtc,6uBAA6uB;YAC7uB,mNAAmN;YACnN,yTAAyT;YACzT,+lBAA+lB;YAC/lB,oOAAoO;YACpO,wYAAwY;YACxY,0EAA0E;YAC1E,mHAAmH;YACnH,iVAAiV;YACjV,g1BAAg1B;QACl1B,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,mWAAmW;iBACtW;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,qtBAAqtB;iBACxtB;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,iSAAiS;iBACpS;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4UAA4U;iBAC/U;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,qiBAAqiB;iBACxiB;gBACD,uBAAuB,EAAE;oBACvB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,WAAW,EACT,wdAAwd;iBAC3d;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,WAAW,EACT,mbAAmb;iBACtb;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,CAAC;oBAC/D,WAAW,EACT,wOAAwO;iBAC3O;gBACD,iBAAiB,EAAE;oBACjB,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,ieAAie;iBACpe;aACF;YACD,QAAQ,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;SACzC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/replace-video-segment/definition.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,scAAsc;YACtc,6uBAA6uB;YAC7uB,mNAAmN;YACnN,yTAAyT;YACzT,+lBAA+lB;YAC/lB,oOAAoO;YACpO,wYAAwY;YACxY,0EAA0E;YAC1E,mHAAmH;YACnH,iVAAiV;YACjV,g1BAAg1B;QACl1B,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,mWAAmW;iBACtW;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,qtBAAqtB;iBACxtB;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,iSAAiS;iBACpS;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4UAA4U;iBAC/U;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,qiBAAqiB;iBACxiB;gBACD,uBAAuB,EAAE;oBACvB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,WAAW,EACT,wdAAwd;iBAC3d;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,WAAW,EACT,mbAAmb;iBACtb;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;oBACjF,WAAW,EACT,wOAAwO;iBAC3O;gBACD,iBAAiB,EAAE;oBACjB,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,ieAAie;iBACpe;aACF;YACD,QAAQ,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;SACzC;KACF;CACF,CAAC"}
@@ -4,7 +4,7 @@ export const definition = {
4
4
  type: "function",
5
5
  function: {
6
6
  name: "sound_to_video",
7
- description: 'Generate video synchronized to audio. Use when the user has uploaded an audio file (mp3, wav, m4a, flac) and the audio is the primary sync target, especially uploaded-audio-only workflows. Also use after generate_music ("turn that song into a video", "make a music video from that"). Auto-detects generated audio from generate_music if no audio file is uploaded. Seedance animate_photo/generate_video can also attach uploaded audio as a loose @Audio reference when an image or video reference anchors the request; use this tool instead when the soundtrack itself should drive the video. If the user provides a reference image, use ltx23-ia2v; for lip-sync with a face image, use wan-s2v; if no image, use ltx23-a2v. If the user wants dialogue/audio WITHOUT pre-existing audio, use animate_photo instead (LTX 2.3 generates audio natively). Note: Persona voice clips from resolve_personas are NOT used by this tool — for persona voice identity in video, use animate_photo or generate_video instead. LONG AUDIO ON SEEDANCE: Seedance caps each clip at 15s. When the user uploads audio longer than 15s and Seedance is selected (seedance2 or seedance2-fast), do NOT clamp to 15s and drop the rest — split the run into multiple sound_to_video calls in the same turn (one per 15s segment, so a 20s audio becomes two clips: audioStart=0 duration=15, then audioStart=15 duration=5) and finish with a single stitch_video call referencing the resulting clip indices in order with audioIndex pointing at the same uploaded audio so the stitched output carries the full original soundtrack. LTX/WAN models accept up to 20s per clip, so single-call is fine for them.',
7
+ description: 'Generate video synchronized to audio. Use when the user has uploaded an audio file (mp3, wav, m4a, flac) and the audio is the primary sync target, especially uploaded-audio-only workflows. Also use after generate_music ("turn that song into a video", "make a music video from that"). Auto-detects generated audio from generate_music if no audio file is uploaded. Seedance animate_photo/generate_video can also attach uploaded audio as a loose @Audio reference when an image or video reference anchors the request; use this tool instead when the soundtrack itself should drive the video. If the user provides a reference image, use ltx23-ia2v; for lip-sync with a face image, use wan-s2v; if no image, use ltx23-a2v. If the user wants dialogue/audio WITHOUT pre-existing audio, use animate_photo instead (LTX 2.3 generates audio natively). Note: Persona voice clips from resolve_personas are NOT used by this tool — for persona voice identity in video, use animate_photo or generate_video instead. LONG AUDIO ON SEEDANCE: Seedance caps each clip at 15s. When the user uploads audio longer than 15s and Seedance is selected (seedance2, seedance2-mini, or seedance2-fast), do NOT clamp to 15s and drop the rest — split the run into multiple sound_to_video calls in the same turn (one per 15s segment, so a 20s audio becomes two clips: audioStart=0 duration=15, then audioStart=15 duration=5) and finish with a single stitch_video call referencing the resulting clip indices in order with audioIndex pointing at the same uploaded audio so the stitched output carries the full original soundtrack. LTX/WAN models accept up to 20s per clip, so single-call is fine for them.',
8
8
  parameters: {
9
9
  type: "object",
10
10
  properties: {
@@ -59,8 +59,8 @@ BATCH VARIATIONS: When numberOfVariations > 1, use Dynamic Prompt syntax to vary
59
59
  },
60
60
  videoModel: {
61
61
  type: "string",
62
- enum: ["wan-s2v", "seedance2", "seedance2-fast", "ltx23-ia2v", "ltx23-a2v"],
63
- description: 'Video model. "ltx23-ia2v" (default when image available): LTX 2.3 image+audio to video, audio-reactive with a reference image; Fast/HQ use the distilled 8-step worker and Default Media Quality Pro uses the non-distilled dev worker. "ltx23-a2v" (default when no image): LTX 2.3 audio-only to video, no image needed, creates video purely from text prompt + audio with the same quality-tier routing. "wan-s2v": WAN 2.2 sound-to-video, best for lip-sync with a face image, fast 4-step. "seedance2": full Seedance 2.0 audio-reference video, 4-15s; this tool supplies the audio plus a required reference image because Seedance text+audio without image/video is unsupported. "seedance2-fast": Seedance 2.0 Fast for faster/lower-cost iteration. Seedance quality is selected only by this model value: pick "seedance2-fast" when the user says Seedance Fast / seedance-fast / faster draft, and pick "seedance2" for full/non-fast Seedance or 1080p. Do not infer the Seedance model from Default Media Quality Fast/HQ/Pro. ' +
62
+ enum: ["wan-s2v", "seedance2", "seedance2-mini", "seedance2-fast", "ltx23-ia2v", "ltx23-a2v"],
63
+ description: 'Video model. "ltx23-ia2v" (default when image available): LTX 2.3 image+audio to video, audio-reactive with a reference image; Fast/HQ use the distilled 8-step worker and Default Media Quality Pro uses the non-distilled dev worker. "ltx23-a2v" (default when no image): LTX 2.3 audio-only to video, no image needed, creates video purely from text prompt + audio with the same quality-tier routing. "wan-s2v": WAN 2.2 sound-to-video, best for lip-sync with a face image, fast 4-step. "seedance2": full Seedance 2.0 audio-reference video, 4-15s. "seedance2-mini": Seedance 2.0 Mini, 720p cap, fastest/lower-cost Seedance option. "seedance2-fast": Seedance 2.0 Fast legacy option. Seedance quality is selected only by this model value: pick "seedance2-mini" for faster/lower-cost drafts or explicit Mini requests, pick "seedance2-fast" only when the user says Seedance Fast / seedance-fast, and pick "seedance2" for full/non-fast Seedance or 1080p/4K. Do not infer the Seedance model from Default Media Quality Fast/HQ/Pro. ' +
64
64
  SEEDANCE_TOOL_AUDIO_REFERENCE_GUIDANCE +
65
65
  ' Omit to auto-select based on whether an image is present.',
66
66
  },
@@ -1 +1 @@
1
- {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/sound-to-video/definition.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gCAAgC,EAChC,kCAAkC,EAClC,sCAAsC,GACvC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,onDAAonD;QACtnD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;;EAErB,gCAAgC;;;;;;;;;;;;;;;;;;;;kdAoBgb;iBACzc;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,kCAAkC;iBAChD;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,yPAAyP;iBAC5P;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,0OAA0O;iBAC7O;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,+OAA+O;oBACjP,OAAO,EAAE,CAAC;iBACX;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,qNAAqN;oBACvN,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,CAAC;oBAC3E,WAAW,EACT,m/BAAm/B;wBACn/B,sCAAsC;wBACtC,4DAA4D;iBAC/D;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,wMAAwM;iBAC3M;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,iSAAiS;oBACnS,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,6YAA6Y;iBAChZ;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wBAAwB;iBACtC;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/sound-to-video/definition.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gCAAgC,EAChC,kCAAkC,EAClC,sCAAsC,GACvC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,qoDAAqoD;QACvoD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;;EAErB,gCAAgC;;;;;;;;;;;;;;;;;;;;kdAoBgb;iBACzc;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,kCAAkC;iBAChD;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,yPAAyP;iBAC5P;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,0OAA0O;iBAC7O;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,+OAA+O;oBACjP,OAAO,EAAE,CAAC;iBACX;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,qNAAqN;oBACvN,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,CAAC;oBAC7F,WAAW,EACT,8/BAA8/B;wBAC9/B,sCAAsC;wBACtC,4DAA4D;iBAC/D;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,wMAAwM;iBAC3M;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,iSAAiS;oBACnS,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,6YAA6Y;iBAChZ;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wBAAwB;iBACtC;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}
@@ -67,12 +67,12 @@ BATCH VARIATIONS: When numberOfVariations > 1, use Dynamic Prompt syntax to vary
67
67
  },
68
68
  negativePrompt: {
69
69
  type: "string",
70
- description: "Advanced non-Seedance only. Use this field only when the user explicitly asks to set a separate negative prompt. For ordinary avoid/no/don't constraints on LTX 2.3 or WAN 2.2, translate them into affirmative production constraints inside prompt instead; do not move them here. Do not set when controlMode is seedance-v2v or videoModel is seedance2/seedance2-fast.",
70
+ description: "Advanced non-Seedance only. Use this field only when the user explicitly asks to set a separate negative prompt. For ordinary avoid/no/don't constraints on LTX 2.3 or WAN 2.2, translate them into affirmative production constraints inside prompt instead; do not move them here. Do not set when controlMode is seedance-v2v or videoModel is seedance2/seedance2-mini/seedance2-fast.",
71
71
  },
72
72
  videoModel: {
73
73
  type: "string",
74
- enum: ["ltx23-v2v", "wan22-animate", "seedance2", "seedance2-fast"],
75
- description: 'Model selector for this video-to-video request. Usually omit; controlMode chooses the non-Seedance model. For controlMode="seedance-v2v", Seedance quality is selected only by model: use "seedance2-fast" when the user asks for Seedance Fast / seedance-fast / faster draft iteration, and use "seedance2" for full/non-fast Seedance or 1080p. Do not infer the Seedance model from Default Media Quality Fast/HQ/Pro or from 480p/720p resolution requests alone.',
74
+ enum: ["ltx23-v2v", "wan22-animate", "seedance2", "seedance2-mini", "seedance2-fast"],
75
+ description: 'Model selector for this video-to-video request. Usually omit; controlMode chooses the non-Seedance model. For controlMode="seedance-v2v", Seedance quality is selected only by model: use "seedance2-mini" for faster/lower-cost drafts or explicit Mini requests, use "seedance2-fast" only when the user asks for Seedance Fast / seedance-fast, and use "seedance2" for full/non-fast Seedance or 1080p/4K. Do not infer the Seedance model from Default Media Quality Fast/HQ/Pro or from 480p/720p resolution requests alone.',
76
76
  },
77
77
  generateAudio: {
78
78
  type: "boolean",
@@ -80,7 +80,7 @@ BATCH VARIATIONS: When numberOfVariations > 1, use Dynamic Prompt syntax to vary
80
80
  },
81
81
  targetResolution: {
82
82
  type: "number",
83
- description: 'Seedance V2V only. Short-side output resolution target in pixels. Use when the user asks for a bare named resolution such as "480p", "720p", or "1080p" without exact dimensions. For Seedance V2V fast, 480p and 720p are supported; preserve the source video shape instead of forcing landscape pixels.',
83
+ description: 'Seedance V2V only. Short-side output resolution target in pixels. Use when the user asks for a bare named resolution such as "480p", "720p", or "1080p" without exact dimensions. For Seedance V2V Mini/Fast, 480p and 720p are supported; preserve the source video shape instead of forcing landscape pixels.',
84
84
  },
85
85
  sourceImageIndex: {
86
86
  type: "number",
@@ -1 +1 @@
1
- {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/video-to-video/definition.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gCAAgC,EAChC,kCAAkC,EAClC,oCAAoC,GACrC,MAAM,yCAAyC,CAAC;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,4vBAA4vB;QAC9vB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;;EAErB,gCAAgC;;;;;;;;;;;;;;;;;;;uRAmBqP;iBAC9Q;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,kCAAkC;iBAChD;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,qYAAqY;iBACxY;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE;wBACJ,cAAc;wBACd,iBAAiB;wBACjB,OAAO;wBACP,MAAM;wBACN,OAAO;wBACP,UAAU;wBACV,UAAU;wBACV,SAAS;wBACT,cAAc;qBACf;oBACD,WAAW,EACT,sFAAsF;wBACtF,kMAAkM;wBAClM,sNAAsN;wBACtN,mSAAmS;wBACnS,mQAAmQ;wBACnQ,iRAAiR;wBACjR,yXAAyX;wBACzX,sbAAsb;wBACtb,4cAA4c;wBAC5c,+RAA+R,oCAAoC,yHAAyH;wBAC5b,2QAA2Q;iBAC9Q;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,6WAA6W;iBAChX;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,CAAC;oBACnE,WAAW,EACT,wcAAwc;iBAC3c;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,yNAAyN;iBAC5N;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4SAA4S;iBAC/S;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,8NAA8N;iBACjO;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;oBAClD,WAAW,EACT,2cAA2c;iBAC9c;gBACD,mBAAmB,EAAE;oBACnB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;oBACnD,WAAW,EACT,4VAA4V;iBAC/V;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4SAA4S;iBAC/S;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,wgBAAwgB;oBAC1gB,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4DAA4D;oBAC9D,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../src/tools/definitions/video-to-video/definition.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gCAAgC,EAChC,kCAAkC,EAClC,oCAAoC,GACrC,MAAM,yCAAyC,CAAC;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,4vBAA4vB;QAC9vB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;;EAErB,gCAAgC;;;;;;;;;;;;;;;;;;;uRAmBqP;iBAC9Q;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,kCAAkC;iBAChD;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,qYAAqY;iBACxY;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE;wBACJ,cAAc;wBACd,iBAAiB;wBACjB,OAAO;wBACP,MAAM;wBACN,OAAO;wBACP,UAAU;wBACV,UAAU;wBACV,SAAS;wBACT,cAAc;qBACf;oBACD,WAAW,EACT,sFAAsF;wBACtF,kMAAkM;wBAClM,sNAAsN;wBACtN,mSAAmS;wBACnS,mQAAmQ;wBACnQ,iRAAiR;wBACjR,yXAAyX;wBACzX,sbAAsb;wBACtb,4cAA4c;wBAC5c,+RAA+R,oCAAoC,yHAAyH;wBAC5b,2QAA2Q;iBAC9Q;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4XAA4X;iBAC/X;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;oBACrF,WAAW,EACT,ogBAAogB;iBACvgB;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,yNAAyN;iBAC5N;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,iTAAiT;iBACpT;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,8NAA8N;iBACjO;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;oBAClD,WAAW,EACT,2cAA2c;iBAC9c;gBACD,mBAAmB,EAAE;oBACnB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;oBACnD,WAAW,EACT,4VAA4V;iBAC/V;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4SAA4S;iBAC/S;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,wgBAAwgB;oBAC1gB,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,4DAA4D;oBAC9D,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}
@@ -3,7 +3,10 @@ export { classifyError, parseResultForError, } from './shared/errorClassificatio
3
3
  export { MODELS_BY_TOOL, getAlternativeModels, getModelArgKey, getModelOptions, isQualityTierTool, } from './shared/modelRegistry.js';
4
4
  export * from './shared/policyChecks.js';
5
5
  export * from './shared/seedancePolicyErrors.js';
6
+ export * from './shared/happyhorsePolicyErrors.js';
6
7
  export { SEEDANCE_REFERENCE_LIMITS, SeedanceReferenceLimitError, validateSeedanceReferenceCounts, } from './shared/seedanceReferences.js';
8
+ export { HAPPYHORSE_REFERENCE_LIMITS, HappyHorseReferenceLimitError, getHappyHorseReferenceLimits, validateHappyHorseReferenceCounts, } from './shared/happyhorseReferences.js';
9
+ export { HAPPYHORSE_GENERATE_VIDEO_MODEL_DESCRIPTION, HAPPYHORSE_TOOL_REFERENCE_GUIDANCE, } from '../contracts/toolPromptMarkers.js';
7
10
  export * from './shared/llmHelpers.js';
8
11
  export * from './shared/promptRefinementCache.js';
9
12
  export * from './shared/imageEncoding.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,gCAAgC,CAAC;AAMxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,aAAa,EACb,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,OAAO,EACP,MAAM,GACP,MAAM,aAAa,CAAC;AAUrB,OAAO,EACL,mDAAmD,EACnD,yCAAyC,GAC1C,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,+BAA+B,EAC/B,iCAAiC,EACjC,gCAAgC,EAChC,mCAAmC,EACnC,+BAA+B,GAChC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,0CAA0C,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,gDAAgD,EAAE,MAAM,yCAAyC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,gCAAgC,CAAC;AAMxC,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,4BAA4B,EAC5B,iCAAiC,GAClC,MAAM,kCAAkC,CAAC;AAS1C,OAAO,EACL,2CAA2C,EAC3C,kCAAkC,GACnC,MAAM,mCAAmC,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,aAAa,EACb,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,OAAO,EACP,MAAM,GACP,MAAM,aAAa,CAAC;AAUrB,OAAO,EACL,mDAAmD,EACnD,yCAAyC,GAC1C,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,+BAA+B,EAC/B,iCAAiC,EACjC,gCAAgC,EAChC,mCAAmC,EACnC,+BAA+B,GAChC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,0CAA0C,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,gDAAgD,EAAE,MAAM,yCAAyC,CAAC"}
@@ -0,0 +1,168 @@
1
+ import { vendorModelPremiumPayloadFromError, } from '../../media/index.js';
2
+ export const HAPPYHORSE_PROVIDER_CONTENT_POLICY_MESSAGE = "HappyHorse's content check didn't pass this one, so no video came back this time. We can adjust the prompt or try a different look and give it another go.";
3
+ export const HAPPYHORSE_VENDOR_GENERATION_FAILED_MESSAGE = "HappyHorse hit a snag partway through this one, so no media was generated. The provider did not return a specific reason — a quick retry usually clears it up. If it happens again, you can report the issue right from this message.";
4
+ export const HAPPYHORSE_VENDOR_TIMEOUT_MESSAGE = "HappyHorse took a bit too long on this one and timed out, so no media was generated. A quick retry usually does the trick; if it times out again, you can report the issue right from this message.";
5
+ export const HAPPYHORSE_INPUT_DOWNLOAD_FAILED_MESSAGE = "HappyHorse couldn't fetch one of the images for this video, so no media was generated. Make sure each reference image is a publicly reachable URL (or send it inline) and we'll try again.";
6
+ export class HappyHorseTerminalPolicyError extends Error {
7
+ constructor(payload) {
8
+ super(payload.message);
9
+ this.name = 'HappyHorseTerminalPolicyError';
10
+ this.payload = payload;
11
+ }
12
+ }
13
+ function collectErrorText(value, seen = new WeakSet()) {
14
+ if (value === null || value === undefined)
15
+ return '';
16
+ if (typeof value === 'string')
17
+ return value;
18
+ if (typeof value === 'number' || typeof value === 'boolean') {
19
+ return String(value);
20
+ }
21
+ if (value instanceof Error) {
22
+ const cause = value.cause;
23
+ return [
24
+ value.name,
25
+ value.message,
26
+ cause ? collectErrorText(cause, seen) : '',
27
+ ].filter(Boolean).join(' ');
28
+ }
29
+ if (typeof value !== 'object')
30
+ return String(value);
31
+ if (seen.has(value))
32
+ return '';
33
+ seen.add(value);
34
+ const record = value;
35
+ const nested = Object.values(record)
36
+ .map((nestedValue) => collectErrorText(nestedValue, seen))
37
+ .filter(Boolean)
38
+ .join(' ');
39
+ try {
40
+ return `${JSON.stringify(value)} ${nested}`.trim();
41
+ }
42
+ catch {
43
+ return nested;
44
+ }
45
+ }
46
+ function extractHappyHorseFailureFields(value, seen = new WeakSet()) {
47
+ if (value && typeof value === 'object' && !seen.has(value)) {
48
+ seen.add(value);
49
+ const record = value;
50
+ const output = record.output;
51
+ if (output && typeof output === 'object') {
52
+ const out = output;
53
+ const code = typeof out.code === 'string' ? out.code : null;
54
+ const message = typeof out.message === 'string' ? out.message : null;
55
+ if (code || message)
56
+ return { code, message };
57
+ }
58
+ for (const nested of Object.values(record)) {
59
+ if (nested && typeof nested === 'object') {
60
+ const found = extractHappyHorseFailureFields(nested, seen);
61
+ if (found.code || found.message)
62
+ return found;
63
+ }
64
+ }
65
+ }
66
+ const text = collectErrorText(value);
67
+ const code = text.match(/"code"\s*:\s*"([^"]+)"/i)?.[1] ?? null;
68
+ const messageRaw = text.match(/"(?:message|Message)"\s*:\s*"((?:[^"\\]|\\.)*)"/)?.[1] ?? null;
69
+ let message = null;
70
+ if (messageRaw) {
71
+ let parsed = messageRaw;
72
+ try {
73
+ parsed = JSON.parse(`"${messageRaw}"`);
74
+ }
75
+ catch {
76
+ }
77
+ message = parsed.replace(/\s*Request id:\s*[A-Za-z0-9._-]+/i, '').trim() || null;
78
+ }
79
+ return { code, message };
80
+ }
81
+ function textHasHappyHorseContentPolicySignal(text) {
82
+ return (/\bcontent[_\s-]?policy\b/i.test(text) ||
83
+ /\bmoderation\b/i.test(text) ||
84
+ /\bsafety\s+(?:system|review|violation|violations)\b/i.test(text) ||
85
+ /\bsafety[_\s-]?violations?\b/i.test(text) ||
86
+ /\bSensitiveContentDetected\b/i.test(text) ||
87
+ /\bsensitive\s+content\b/i.test(text) ||
88
+ /\bnsfw\b/i.test(text) ||
89
+ /\bDataInspection(?:Failed|Exception)?\b/i.test(text));
90
+ }
91
+ export function happyhorseTerminalPolicyPayloadFromError(error) {
92
+ if (error instanceof HappyHorseTerminalPolicyError)
93
+ return error.payload;
94
+ const text = collectErrorText(error);
95
+ if (!textHasHappyHorseContentPolicySignal(text))
96
+ return null;
97
+ if (!/\bhappy\s*horse\b/i.test(text) && !/\bhappyhorse\b/i.test(text))
98
+ return null;
99
+ const { code } = extractHappyHorseFailureFields(error);
100
+ return {
101
+ error: 'happyhorse_content_policy',
102
+ message: HAPPYHORSE_PROVIDER_CONTENT_POLICY_MESSAGE,
103
+ retryPolicy: 'manual_user_confirmation',
104
+ nextAction: 'wait_for_user',
105
+ vendorErrorCode: code ?? 'HAPPYHORSE_CONTENT_POLICY',
106
+ };
107
+ }
108
+ export function happyhorseTerminalPolicyErrorFromError(error) {
109
+ const payload = happyhorseTerminalPolicyPayloadFromError(error);
110
+ return payload ? new HappyHorseTerminalPolicyError(payload) : null;
111
+ }
112
+ export function happyhorseTerminalGenerationFailurePayloadFromError(error) {
113
+ const premiumPayload = vendorModelPremiumPayloadFromError(error);
114
+ if (premiumPayload)
115
+ return premiumPayload;
116
+ const text = collectErrorText(error);
117
+ if (!/\bAll\s+\d+\s+(?:video generation|sound-to-video|video-to-video)\s+jobs failed\b/i.test(text)
118
+ && !/\bVendor task\b[\s\S]{0,140}\bstatus=failed\b/i.test(text)
119
+ && !/\bVendor (?:job|dispatch) failed\b/i.test(text)
120
+ && !/\bhappyhorse\b/i.test(text)
121
+ && !/\bhappy\s*horse\b/i.test(text)) {
122
+ return null;
123
+ }
124
+ const { code, message } = extractHappyHorseFailureFields(error);
125
+ if (message && /\bfailed to download\b/i.test(message)) {
126
+ return {
127
+ error: 'happyhorse_input_download_failed',
128
+ message: HAPPYHORSE_INPUT_DOWNLOAD_FAILED_MESSAGE,
129
+ retryPolicy: 'manual_user_confirmation',
130
+ nextAction: 'wait_for_user',
131
+ vendorErrorCode: code ?? 'InvalidParameter',
132
+ vendorError: message.slice(0, 500),
133
+ };
134
+ }
135
+ if (/\b(?:timed?\s*out|timeout|deadline\s+exceeded)\b/i.test(text)) {
136
+ return {
137
+ error: 'happyhorse_generation_failed',
138
+ message: HAPPYHORSE_VENDOR_TIMEOUT_MESSAGE,
139
+ retryPolicy: 'manual_user_confirmation',
140
+ nextAction: 'wait_for_user',
141
+ reportIssue: true,
142
+ reportIssueReason: 'HappyHorse provider job timed out after starting.',
143
+ vendorErrorCode: code ?? 'PROVIDER_TIMEOUT',
144
+ ...(text ? { vendorError: text.slice(0, 500) } : {}),
145
+ };
146
+ }
147
+ if (message) {
148
+ return {
149
+ error: 'happyhorse_generation_failed',
150
+ message: `HappyHorse rejected the request: ${message}`,
151
+ retryPolicy: 'manual_user_confirmation',
152
+ nextAction: 'wait_for_user',
153
+ ...(code ? { vendorErrorCode: code } : {}),
154
+ vendorError: message.slice(0, 500),
155
+ };
156
+ }
157
+ return {
158
+ error: 'happyhorse_generation_failed',
159
+ message: HAPPYHORSE_VENDOR_GENERATION_FAILED_MESSAGE,
160
+ retryPolicy: 'manual_user_confirmation',
161
+ nextAction: 'wait_for_user',
162
+ reportIssue: true,
163
+ reportIssueReason: 'HappyHorse provider job failed after starting without a specific provider reason.',
164
+ ...(code ? { vendorErrorCode: code } : {}),
165
+ ...(text ? { vendorError: text.slice(0, 500) } : {}),
166
+ };
167
+ }
168
+ //# sourceMappingURL=happyhorsePolicyErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"happyhorsePolicyErrors.js","sourceRoot":"","sources":["../../../src/tools/shared/happyhorsePolicyErrors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ export const HAPPYHORSE_REFERENCE_LIMITS = Object.freeze({
2
+ 'happyhorse-1.1-t2v': Object.freeze({ images: 0, videos: 0, audios: 0, assets: 0 }),
3
+ 'happyhorse-1.1-i2v': Object.freeze({ images: 1, videos: 0, audios: 0, assets: 1 }),
4
+ 'happyhorse-1.1-r2v': Object.freeze({ images: 9, videos: 0, audios: 0, assets: 9 }),
5
+ });
6
+ export function getHappyHorseReferenceLimits(modelId) {
7
+ if (!modelId)
8
+ return null;
9
+ return HAPPYHORSE_REFERENCE_LIMITS[modelId] ?? null;
10
+ }
11
+ export class HappyHorseReferenceLimitError extends Error {
12
+ constructor(modelId, limitKind, requestedCount, maxCount) {
13
+ const label = limitKind === 'assets' ? 'total references' : `${limitKind.slice(0, -1)} references`;
14
+ super(`HappyHorse (${modelId}) can use up to ${maxCount} ${label} per video; this request included ${requestedCount}. ` +
15
+ 'No media was generated. Please choose fewer references or split the story into multiple clips.');
16
+ this.code = 'happyhorse_reference_limit_exceeded';
17
+ this.name = 'HappyHorseReferenceLimitError';
18
+ this.modelId = modelId;
19
+ this.limitKind = limitKind;
20
+ this.requestedCount = requestedCount;
21
+ this.maxCount = maxCount;
22
+ }
23
+ }
24
+ export function validateHappyHorseReferenceCounts(modelId, counts) {
25
+ const limits = HAPPYHORSE_REFERENCE_LIMITS[modelId];
26
+ if (!limits) {
27
+ throw new HappyHorseReferenceLimitError(modelId, 'assets', 0, 0);
28
+ }
29
+ const images = Math.max(0, Math.floor(counts.images));
30
+ const videos = Math.max(0, Math.floor(counts.videos));
31
+ const audios = Math.max(0, Math.floor(counts.audios));
32
+ if (images > limits.images) {
33
+ throw new HappyHorseReferenceLimitError(modelId, 'images', images, limits.images);
34
+ }
35
+ if (videos > limits.videos) {
36
+ throw new HappyHorseReferenceLimitError(modelId, 'videos', videos, limits.videos);
37
+ }
38
+ if (audios > limits.audios) {
39
+ throw new HappyHorseReferenceLimitError(modelId, 'audios', audios, limits.audios);
40
+ }
41
+ const total = images + videos + audios;
42
+ if (total > limits.assets) {
43
+ throw new HappyHorseReferenceLimitError(modelId, 'assets', total, limits.assets);
44
+ }
45
+ }
46
+ //# sourceMappingURL=happyhorseReferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"happyhorseReferences.js","sourceRoot":"","sources":["../../../src/tools/shared/happyhorseReferences.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ export const MODELS_BY_TOOL = {
12
12
  { key: 'gpt-image-2', displayName: 'GPT Image 2' },
13
13
  { key: 'z-turbo', displayName: 'Z-Image Turbo' },
14
14
  { key: 'z-image', displayName: 'Z-Image' },
15
+ { key: 'krea-2-turbo', displayName: 'Krea 2 Turbo' },
15
16
  { key: 'chroma-v46-flash', displayName: 'Chroma v.46 Flash' },
16
17
  { key: 'chroma-detail', displayName: 'Chroma Detail' },
17
18
  { key: 'flux1-krea', displayName: 'Flux.1 Krea' },
@@ -46,7 +47,11 @@ export const MODELS_BY_TOOL = {
46
47
  { key: 'ltx23', displayName: 'LTX 2.3 22B' },
47
48
  { key: 'wan22', displayName: 'WAN 2.2 14B' },
48
49
  { key: 'seedance2', displayName: 'Seedance 2.0' },
50
+ { key: 'seedance2-mini', displayName: 'Seedance 2.0 Mini' },
49
51
  { key: 'seedance2-fast', displayName: 'Seedance 2.0 Fast' },
52
+ { key: 'happyhorse-1.1-t2v', displayName: 'HappyHorse 1.1 (Text to Video)' },
53
+ { key: 'happyhorse-1.1-i2v', displayName: 'HappyHorse 1.1 (Image to Video)' },
54
+ { key: 'happyhorse-1.1-r2v', displayName: 'HappyHorse 1.1 (Reference to Video)' },
50
55
  ],
51
56
  animate_photo: [
52
57
  { key: 'ltx23', displayName: 'LTX 2.3 22B' },
@@ -55,6 +60,7 @@ export const MODELS_BY_TOOL = {
55
60
  sound_to_video: [
56
61
  { key: 'wan-s2v', displayName: 'WAN 2.2 S2V' },
57
62
  { key: 'seedance2', displayName: 'Seedance 2.0 Image+Audio' },
63
+ { key: 'seedance2-mini', displayName: 'Seedance 2.0 Mini Image+Audio' },
58
64
  { key: 'seedance2-fast', displayName: 'Seedance 2.0 Fast Image+Audio' },
59
65
  { key: 'ltx23-ia2v', displayName: 'LTX 2.3 Image+Audio' },
60
66
  { key: 'ltx23-a2v', displayName: 'LTX 2.3 Audio Only' },
@@ -1 +1 @@
1
- {"version":3,"file":"modelRegistry.js","sourceRoot":"","sources":["../../../src/tools/shared/modelRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modelRegistry.js","sourceRoot":"","sources":["../../../src/tools/shared/modelRegistry.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,9 @@ export function isLtxVideoModel(modelId) {
23
23
  export function isSeedanceVideoModel(modelId) {
24
24
  return modelId.startsWith('seedance-2-0');
25
25
  }
26
+ export function isHappyHorseVideoModel(modelId) {
27
+ return modelId.startsWith('happyhorse-1.1');
28
+ }
26
29
  export function getMaxContextImages(modelId) {
27
30
  if (modelId.includes('qwen_image_edit')) {
28
31
  return 3;
@@ -270,6 +273,32 @@ export function validateProjectConfig(config) {
270
273
  throw new SogniValidationError('Seedance audio URL references require at least one image or video reference');
271
274
  }
272
275
  }
276
+ if (isHappyHorseVideoModel(config.modelId)) {
277
+ if (config.fps !== undefined && config.fps !== 24) {
278
+ throw new SogniValidationError('HappyHorse video models require fps to be 24');
279
+ }
280
+ if (config.duration !== undefined) {
281
+ if (typeof config.duration !== 'number' || config.duration < 3 || config.duration > 15) {
282
+ throw new SogniValidationError('HappyHorse video duration must be between 3 and 15 seconds');
283
+ }
284
+ }
285
+ const imageAssetCount = (config.referenceImage ? 1 : 0) +
286
+ (config.referenceImageEnd ? 1 : 0) +
287
+ referenceImageUrls.length;
288
+ const videoAssetCount = (config.referenceVideo ? 1 : 0) + referenceVideoUrls.length;
289
+ const audioAssetCount = (config.referenceAudio ? 1 : 0) +
290
+ (config.referenceAudioIdentity ? 1 : 0) +
291
+ referenceAudioUrls.length;
292
+ if (imageAssetCount > 9) {
293
+ throw new SogniValidationError('HappyHorse supports at most 9 image references per request');
294
+ }
295
+ if (videoAssetCount > 0) {
296
+ throw new SogniValidationError('HappyHorse does not support reference videos');
297
+ }
298
+ if (audioAssetCount > 0) {
299
+ throw new SogniValidationError('HappyHorse does not support reference audios; audio is generated natively');
300
+ }
301
+ }
273
302
  }
274
303
  if (isAudioProjectConfig(config)) {
275
304
  if (config.outputFormat && !['mp3', 'flac', 'wav'].includes(config.outputFormat)) {