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)
┆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'],