diff --git a/src/composables/node/useNodePricing.ts b/src/composables/node/useNodePricing.ts index ba6c6f934c..6a6bf08130 100644 --- a/src/composables/node/useNodePricing.ts +++ b/src/composables/node/useNodePricing.ts @@ -49,6 +49,21 @@ const calculateRunwayDurationPrice = (node: LGraphNode): string => { return `$${cost}/Run` } +const makeOmniProDurationCalculator = + (pricePerSecond: number): PricingFunction => + (node: LGraphNode): string => { + const durationWidget = node.widgets?.find( + (w) => w.name === 'duration' + ) as IComboWidget + if (!durationWidget) return `$${pricePerSecond.toFixed(3)}/second` + + const seconds = parseFloat(String(durationWidget.value)) + if (!Number.isFinite(seconds)) return `$${pricePerSecond.toFixed(3)}/second` + + const cost = pricePerSecond * seconds + return `$${cost.toFixed(2)}/Run` + } + const pixversePricingCalculator = (node: LGraphNode): string => { const durationWidget = node.widgets?.find( (w) => w.name === 'duration_seconds' @@ -711,6 +726,21 @@ const apiNodeCosts: Record = KlingVirtualTryOnNode: { displayPrice: '$0.07/Run' }, + KlingOmniProTextToVideoNode: { + displayPrice: makeOmniProDurationCalculator(0.112) + }, + KlingOmniProFirstLastFrameNode: { + displayPrice: makeOmniProDurationCalculator(0.112) + }, + KlingOmniProImageToVideoNode: { + displayPrice: makeOmniProDurationCalculator(0.112) + }, + KlingOmniProVideoToVideoNode: { + displayPrice: makeOmniProDurationCalculator(0.168) + }, + KlingOmniProEditVideoNode: { + displayPrice: '$0.168/second' + }, LumaImageToVideoNode: { displayPrice: (node: LGraphNode): string => { // Same pricing as LumaVideoNode per CSV @@ -1885,6 +1915,10 @@ export const useNodePricing = () => { KlingDualCharacterVideoEffectNode: ['mode', 'model_name', 'duration'], KlingSingleImageVideoEffectNode: ['effect_scene'], KlingStartEndFrameNode: ['mode', 'model_name', 'duration'], + KlingOmniProTextToVideoNode: ['duration'], + KlingOmniProFirstLastFrameNode: ['duration'], + KlingOmniProImageToVideoNode: ['duration'], + KlingOmniProVideoToVideoNode: ['duration'], MinimaxHailuoVideoNode: ['resolution', 'duration'], OpenAIDalle3: ['size', 'quality'], OpenAIDalle2: ['size', 'n'],