From aebdda3063f578a9225aeaafd9541ef12a5b4f53 Mon Sep 17 00:00:00 2001 From: Alexander Piskun <13381981+bigcat88@users.noreply.github.com> Date: Fri, 22 Aug 2025 21:05:25 +0300 Subject: [PATCH] api_nodes: added prices for ByteDance Image nodes (#5152) --- src/composables/node/useNodePricing.ts | 37 ++++++++++++++++++- .../composables/node/useNodePricing.test.ts | 24 ++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/composables/node/useNodePricing.ts b/src/composables/node/useNodePricing.ts index 523154b32..53155bbba 100644 --- a/src/composables/node/useNodePricing.ts +++ b/src/composables/node/useNodePricing.ts @@ -1383,6 +1383,38 @@ const apiNodeCosts: Record = }, ViduStartEndToVideoNode: { displayPrice: '$0.4/Run' + }, + ByteDanceImageNode: { + displayPrice: (node: LGraphNode): string => { + const modelWidget = node.widgets?.find( + (w) => w.name === 'model' + ) as IComboWidget + + if (!modelWidget) return 'Token-based' + + const model = String(modelWidget.value) + + if (model.includes('seedream-3-0-t2i')) { + return '$0.03/Run' + } + return 'Token-based' + } + }, + ByteDanceImageEditNode: { + displayPrice: (node: LGraphNode): string => { + const modelWidget = node.widgets?.find( + (w) => w.name === 'model' + ) as IComboWidget + + if (!modelWidget) return 'Token-based' + + const model = String(modelWidget.value) + + if (model.includes('seededit-3-0-i2i')) { + return '$0.03/Run' + } + return 'Token-based' + } } } @@ -1470,7 +1502,10 @@ export const useNodePricing = () => { // Google/Gemini nodes GeminiNode: ['model'], // OpenAI nodes - OpenAIChatNode: ['model'] + OpenAIChatNode: ['model'], + // ByteDance + ByteDanceImageNode: ['model'], + ByteDanceImageEditNode: ['model'] } return widgetMap[nodeType] || [] } diff --git a/tests-ui/tests/composables/node/useNodePricing.test.ts b/tests-ui/tests/composables/node/useNodePricing.test.ts index f2a150fdb..2ee95ab71 100644 --- a/tests-ui/tests/composables/node/useNodePricing.test.ts +++ b/tests-ui/tests/composables/node/useNodePricing.test.ts @@ -1694,6 +1694,30 @@ describe('useNodePricing', () => { '$0.1-0.4/Run (varies with quad, style, texture & quality)' ) }) + + it('should return correct pricing for exposed ByteDance models', () => { + const { getNodeDisplayPrice } = useNodePricing() + + const testCases = [ + { + node_name: 'ByteDanceImageNode', + model: 'seedream-3-0-t2i-250415', + expected: '$0.03/Run' + }, + { + node_name: 'ByteDanceImageEditNode', + model: 'seededit-3-0-i2i-250628', + expected: '$0.03/Run' + } + ] + + testCases.forEach(({ node_name, model, expected }) => { + const node = createMockNode(node_name, [ + { name: 'model', value: model } + ]) + expect(getNodeDisplayPrice(node)).toBe(expected) + }) + }) }) }) })