From f7e7c132bcb7bf225e79aca7bc464f70034f17e6 Mon Sep 17 00:00:00 2001 From: bflatastic Date: Tue, 10 Mar 2026 02:19:59 +0700 Subject: [PATCH] cost estimates for splats in frontend ui --- .../experiences/ImageTo3DExperience.tsx | 46 +++++++++---- .../src/lib/cost-breakdown-modal-store.ts | 1 + .../src/lib/cost-breakdown-modal.tsx | 25 ++++++- .../src/lib/useSplatCostEstimate.ts | 65 +++++++++++++++++++ frontend/libs/tauri-api/src/index.ts | 1 + .../lib/cost_estimate/EstimateSplatCost.ts | 53 +++++++++++++++ 6 files changed, 176 insertions(+), 15 deletions(-) create mode 100644 frontend/libs/components/pricing-modal/src/lib/useSplatCostEstimate.ts create mode 100644 frontend/libs/tauri-api/src/lib/cost_estimate/EstimateSplatCost.ts diff --git a/frontend/apps/artcraft/app/src/components/experiences/ImageTo3DExperience.tsx b/frontend/apps/artcraft/app/src/components/experiences/ImageTo3DExperience.tsx index 47356cbe8c..0b673db92d 100644 --- a/frontend/apps/artcraft/app/src/components/experiences/ImageTo3DExperience.tsx +++ b/frontend/apps/artcraft/app/src/components/experiences/ImageTo3DExperience.tsx @@ -37,6 +37,11 @@ import { useSelectedModel, useSelectedProviderForModel, } from "@storyteller/ui-model-selector"; +import { + CostCalculatorButton, + useCostBreakdownModalStore, +} from "@storyteller/ui-pricing-modal"; +import { HelpMenuButton } from "@storyteller/ui-help-menu"; type Mode = "image" | "text"; type Variant = "object" | "world"; @@ -92,7 +97,13 @@ export const ImageTo3DExperience = ({ EnqueueImageTo3dObjectModel.Hunyuan3d3, ); const selectedWorldModel = useSelectedModel(WORLD_MODEL_PAGE); - const selectedWorldProvider = useSelectedProviderForModel(WORLD_MODEL_PAGE, selectedWorldModel?.id); + const selectedWorldProvider = useSelectedProviderForModel( + WORLD_MODEL_PAGE, + selectedWorldModel?.id, + ); + const worldCredits = useCostBreakdownModalStore( + (s) => s.estimatedCreditsByPage[WORLD_MODEL_PAGE], + ); const [uploadedPreview, setUploadedPreview] = useState(null); const [uploadedName, setUploadedName] = useState(null); const [prompt, setPrompt] = useState(""); @@ -709,7 +720,7 @@ export const ImageTo3DExperience = ({