From 00b6019e6a5676119549fb1185395e09f63aa5b4 Mon Sep 17 00:00:00 2001 From: Alexander Piskun <13381981+bigcat88@users.noreply.github.com> Date: Mon, 1 Dec 2025 21:02:34 +0200 Subject: [PATCH] feat(api-nodes-pricing): add prices for Kling O1 video model (#7077) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Add price badges for the upcoming API nodes. ## Screenshots (if applicable) Screenshot From 2025-12-01
14-03-22 ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7077-feat-api-nodes-pricing-add-prices-for-Kling-O1-video-model-2bc6d73d36508152843ff96196317ff8) by [Unito](https://www.unito.io) --- src/composables/node/useNodePricing.ts | 34 ++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/composables/node/useNodePricing.ts b/src/composables/node/useNodePricing.ts index 7e4992edd9..b8c4da046d 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' @@ -706,6 +721,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 @@ -1880,6 +1910,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'],