Skip to content

Commit e9316bc

Browse files
committed
bug fixes
1 parent 40a2e8a commit e9316bc

12 files changed

Lines changed: 64 additions & 47 deletions

File tree

frontend/apps/artcraft/app/src/components/experiences/ImageTo3DExperience.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,15 +152,17 @@ export const ImageTo3DExperience = ({
152152
);
153153

154154
useEffect(() => {
155-
if (variant === "world" && pendingExternalImage) {
155+
// Read from store directly to avoid Strict Mode double-execution adding the image twice
156+
const pending = useImageTo3DWorldStore.getState().pendingExternalImage;
157+
if (variant === "world" && pending) {
156158
setWorldImages((prev) => {
157159
if (prev.length >= MAX_WORLD_IMAGES) return prev;
158160
return [
159161
...prev,
160162
{
161163
id: generateId(),
162-
preview: pendingExternalImage.url,
163-
mediaToken: pendingExternalImage.mediaToken,
164+
preview: pending.url,
165+
mediaToken: pending.mediaToken,
164166
name: "Library Image",
165167
isUploading: false,
166168
},
@@ -400,9 +402,6 @@ export const ImageTo3DExperience = ({
400402
if ("error_type" in result) {
401403
throw new Error(result.error_message || result.error_type);
402404
}
403-
404-
setWorldImages([]);
405-
setWorldPrompt("");
406405
} else {
407406
const snapshotPrompt = prompt.trim();
408407
const snapshotPreview = uploadedPreview || undefined;
@@ -735,7 +734,7 @@ export const ImageTo3DExperience = ({
735734
key={img.id}
736735
className={twMerge(
737736
"glass group relative aspect-square overflow-hidden rounded-lg border-2 border-white/30 transition-all",
738-
hasResults ? "w-10" : "w-14",
737+
hasResults ? "w-10" : "w-auto",
739738
img.isUploading
740739
? "cursor-default"
741740
: "cursor-pointer hover:cursor-zoom-in hover:border-white/80",

frontend/apps/artcraft/app/src/components/signaled/TopBar/TaskQueue.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -412,13 +412,21 @@ export const TaskQueue = () => {
412412
? getProviderDisplayName(String(t.provider).toLowerCase())
413413
: undefined;
414414
const taskTypeStr = t.task_type ? String(t.task_type).toLowerCase() : "";
415+
const modelTypeStr = t.model_type ? String(t.model_type).toLowerCase() : "";
416+
const isSplatModel =
417+
taskTypeStr.includes("gaussian") ||
418+
modelTypeStr.includes("marble") ||
419+
modelTypeStr.includes("worldlabs");
415420
const is3DModel =
416421
taskTypeStr.includes("3d") ||
417422
taskTypeStr.includes("object") ||
418-
taskTypeStr.includes("dimensional");
423+
taskTypeStr.includes("dimensional") ||
424+
isSplatModel;
419425

420426
let kind = undefined;
421-
if (taskTypeStr.includes("image") && is3DModel) {
427+
if (isSplatModel) {
428+
kind = "3D World";
429+
} else if (taskTypeStr.includes("image") && is3DModel) {
422430
kind = "Image to 3D";
423431
} else if (is3DModel) {
424432
kind = "3D Model";

frontend/apps/artcraft/app/src/pages/PageAngles/Angles.tsx

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import { OrbitSphere, snapToNearest } from "./OrbitSphere";
2626
import { twMerge } from "tailwind-merge";
2727
import { LoadingSpinner } from "@storyteller/ui-loading-spinner";
2828
import { SliderV2 } from "@storyteller/ui-sliderv2";
29-
import { Switch } from "@headlessui/react";
29+
// import { Switch } from "@headlessui/react";
3030
import { EnqueueEditImage } from "@storyteller/tauri-api";
3131
import { listen } from "@tauri-apps/api/event";
3232
import {
@@ -41,10 +41,7 @@ import {
4141
useCostBreakdownModalStore,
4242
} from "@storyteller/ui-pricing-modal";
4343
import { HelpMenuButton } from "@storyteller/ui-help-menu";
44-
import {
45-
HistoryStack,
46-
ImageBundle,
47-
} from "../PageEdit/HistoryStack";
44+
import { HistoryStack, ImageBundle } from "../PageEdit/HistoryStack";
4845
import type { BaseSelectorImage } from "../PageEdit/BaseImageSelector";
4946

5047
const ANGLES_MODEL_PAGE = ModelPage.Angles;
@@ -84,9 +81,9 @@ export const Angles = () => {
8481
const sourceMediaToken = useAnglesStore((s) => s.sourceMediaToken);
8582
const imageDimensions = useAnglesStore((s) => s.imageDimensions);
8683
const angleConfig = useAnglesStore((s) => s.angleConfig);
87-
const generateFromBestAngles = useAnglesStore(
88-
(s) => s.generateFromBestAngles,
89-
);
84+
// const generateFromBestAngles = useAnglesStore(
85+
// (s) => s.generateFromBestAngles,
86+
// );
9087
const generatedAngles = useAnglesStore((s) => s.generatedAngles);
9188
const activeAngleId = useAnglesStore((s) => s.activeAngleId);
9289
const isProcessing = useAnglesStore((s) => s.isProcessing);
@@ -98,9 +95,9 @@ export const Angles = () => {
9895
const setRotation = useAnglesStore((s) => s.setRotation);
9996
const setTilt = useAnglesStore((s) => s.setTilt);
10097
const setZoom = useAnglesStore((s) => s.setZoom);
101-
const setGenerateFromBestAngles = useAnglesStore(
102-
(s) => s.setGenerateFromBestAngles,
103-
);
98+
// const setGenerateFromBestAngles = useAnglesStore(
99+
// (s) => s.setGenerateFromBestAngles,
100+
// );
104101
const setActiveAngle = useAnglesStore((s) => s.setActiveAngle);
105102
const setIsLoadingImage = useAnglesStore((s) => s.setIsLoadingImage);
106103
const resetSource = useAnglesStore((s) => s.resetSource);
@@ -160,9 +157,7 @@ export const Angles = () => {
160157
// Resolve pending placeholder
161158
const resolveId =
162159
event.maybe_frontend_subscriber_id ?? state.pendingSubscriberId;
163-
setPendingGenerations((prev) =>
164-
prev.filter((p) => p.id !== resolveId),
165-
);
160+
setPendingGenerations((prev) => prev.filter((p) => p.id !== resolveId));
166161
});
167162

168163
return () => {
@@ -469,21 +464,18 @@ export const Angles = () => {
469464
[setActiveAngle],
470465
);
471466

472-
const handleHistoryImageRemove = useCallback(
473-
(image: BaseSelectorImage) => {
474-
setHistoryBundles((prev) =>
475-
prev
476-
.map((bundle) => ({
477-
...bundle,
478-
images: bundle.images.filter(
479-
(img) => img.mediaToken !== image.mediaToken,
480-
),
481-
}))
482-
.filter((bundle) => bundle.images.length > 0),
483-
);
484-
},
485-
[],
486-
);
467+
const handleHistoryImageRemove = useCallback((image: BaseSelectorImage) => {
468+
setHistoryBundles((prev) =>
469+
prev
470+
.map((bundle) => ({
471+
...bundle,
472+
images: bundle.images.filter(
473+
(img) => img.mediaToken !== image.mediaToken,
474+
),
475+
}))
476+
.filter((bundle) => bundle.images.length > 0),
477+
);
478+
}, []);
487479

488480
const handleHistoryClear = useCallback(() => {
489481
setHistoryBundles([]);
@@ -738,7 +730,7 @@ export const Angles = () => {
738730

739731
{/* Toggle + Generate */}
740732
<div className="flex shrink-0 flex-col items-end gap-2.5">
741-
<Switch.Group>
733+
{/* <Switch.Group>
742734
<div className="flex items-center gap-2">
743735
<Switch.Label className="cursor-pointer whitespace-nowrap text-xs text-base-fg/50">
744736
Best 12 angles
@@ -761,11 +753,10 @@ export const Angles = () => {
761753
/>
762754
</Switch>
763755
</div>
764-
</Switch.Group>
756+
</Switch.Group> */}
765757

766758
<GenerateButton
767759
variant="primary"
768-
icon={faCrosshairs}
769760
onClick={handleGenerate}
770761
disabled={isProcessing || !sourceMediaToken}
771762
loading={isProcessing}

frontend/apps/artcraft/app/src/pages/PageEnigma/PageEditor.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ export const PageEditor = () => {
516516
onClick={handleOverlayClick}
517517
>
518518
<div
519-
className="absolute bottom-14 mb-4 ml-4 flex origin-bottom-left flex-col gap-2"
519+
className="absolute bottom-20 mb-4 ml-4 flex origin-bottom-left flex-col gap-2"
520520
style={{ transform: `scale(${getScale()})` }}
521521
>
522522
<Outliner />

frontend/apps/artcraft/app/src/pages/PageEnigma/comps/ControlPanelSceneObject/ControlPanelSceneObject.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ export const ControlPanelSceneObject = () => {
186186
as="div"
187187
show={isShowing.value}
188188
className={twMerge(
189-
"glass absolute bottom-0 right-0 mb-4 mr-4 flex h-fit w-56 origin-bottom-right flex-col gap-2 rounded-lg border border-ui-panel-border p-3.5 text-white shadow-lg",
189+
"glass absolute bottom-16 right-0 mb-4 mr-4 flex h-fit w-56 origin-bottom-right flex-col gap-2 rounded-lg border border-ui-panel-border p-3.5 text-white shadow-lg",
190190
)}
191191
enter="transition-opacity duration-150"
192192
enterFrom="opacity-0"

frontend/libs/api-enums/src/lib/tauri/tasks/task_type.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ export enum TaskType {
66
ImageInpaintEdit = "image_inpaint_edit",
77
VideoGeneration = "video_generation",
88
ObjectGeneration = "object_generation",
9+
SplatGeneration = "gaussian_generation",
910
BackgroundRemoval = "background_removal",
1011
}

frontend/libs/model-list/src/lib/classes/metadata/ModelMapping.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,14 @@ export const MODEL_TYPE_TO_CREATOR: Record<string, ModelCreator> = {
5151
hunyuan_3d: ModelCreator.Tencent,
5252
hunyuan_3d_2p0: ModelCreator.Tencent,
5353
hunyuan_3d_2p1: ModelCreator.Tencent,
54+
hunyuan_3d_2: ModelCreator.Tencent,
55+
hunyuan_3d_3: ModelCreator.Tencent,
5456
// Hunyuan — dot-normalized aliases
5557
hunyuan_3d_2_0: ModelCreator.Tencent,
5658
hunyuan_3d_2_1: ModelCreator.Tencent,
5759
worldlabs_gaussian: ModelCreator.WorldLabs,
60+
marble_0p1_mini: ModelCreator.WorldLabs,
61+
marble_0p1_plus: ModelCreator.WorldLabs,
5862
grok_image: ModelCreator.Grok,
5963
grok_video: ModelCreator.Grok,
6064
midjourney: ModelCreator.Midjourney,
@@ -195,14 +199,18 @@ export const getModelDisplayName = (modelType: string): string => {
195199

196200
// Hunyuan (Tencent) — p-style IDs
197201
hunyuan_3d: "Hunyuan 3D",
202+
hunyuan_3d_2: "Hunyuan 3D 2.0",
198203
hunyuan_3d_2p0: "Hunyuan 3D 2.0",
199204
hunyuan_3d_2p1: "Hunyuan 3D 2.1",
205+
hunyuan_3d_3: "Hunyuan 3D 3.0",
200206
// Hunyuan — dot-normalized aliases
201207
hunyuan_3d_2_0: "Hunyuan 3D 2.0",
202208
hunyuan_3d_2_1: "Hunyuan 3D 2.1",
203209

204210
// World Labs
205211
worldlabs_gaussian: "World Labs Marble",
212+
marble_0p1_mini: "Marble Mini",
213+
marble_0p1_plus: "Marble Plus",
206214

207215
// Catch-all bucket for Midjourney.
208216
midjourney: "Midjourney",

frontend/libs/tauri-events/src/lib/events/generation/common.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ export enum GenerationAction {
1515
GenerateVideo = "generate_video",
1616
RemoveBackground = "remove_background",
1717
ImageTo3d = "image_to_3d",
18+
GenerateGaussian = "generate_gaussian",
19+
ImageInpaintEdit = "image_inpaint_edit",
1820
}

frontend/libs/tauri-events/src/lib/events/generation/useGenerationCompleteEvent.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ const makeMessage = (event: GenerationCompleteEvent) => {
5757
case GenerationAction.RemoveBackground:
5858
return "Background removal complete!";
5959
case GenerationAction.ImageTo3d:
60-
return "Image to 3D complete!";
60+
return "3D model generation complete!";
61+
case GenerationAction.GenerateGaussian:
62+
return "3D world generation complete!";
6163
default:
6264
return "Generation complete!";
6365
}

frontend/libs/tauri-events/src/lib/events/generation/useGenerationEnqueueFailureEvent.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ const makeMessage = (event: GenerationEnqueueFailureEvent) => {
5858
case GenerationAction.RemoveBackground:
5959
return "Couldn't enqueue background removal!";
6060
case GenerationAction.ImageTo3d:
61-
return "Couldn't enqueue image to 3D!";
61+
return "Couldn't enqueue 3D model generation!";
62+
case GenerationAction.GenerateGaussian:
63+
return "Couldn't enqueue 3D world generation!";
6264
default:
6365
return "Couldn't enqueue generation!";
6466
}

0 commit comments

Comments
 (0)