Spaces:
Sleeping
Sleeping
Commit History
-
🎬 Auto-deploy GLB Studio — 9af8035 fix: keyframe animation workflow + selection drop +
Verified signatureb6aaffe -
🎬 Deploy GLB Animation Studio v2 — full feature set
Verified signature0fffd55
-
deploy: 2-stage Dockerfile, npm build on HF
Verified signature39353da
-
deploy: 2-stage Dockerfile, npm build on HF
Verified signatureafd2779
-
feat: clean render mode + scene visibility + full export overhaul
GLB Studio DeployRENDER MODE (the main fix): When rendering/exporting, setIsRenderMode(true) is called FIRST. This hides ALL of these from the canvas: ❌ Grid ❌ Gizmo helper (axis widget) ❌ Selection rings around models ❌ TransformControls (gizmo arrows) ❌ Camera marker objects (box + lens + cone) ❌ Deselect plane ❌ OrbitControls ❌ Camera view HUD / brackets / crosshair Only renders: models + lighting + environment + floor + background Render mode exits automatically on cancel or completion. useStore.js: - isRenderMode: false (separate from isExporting so UI can check it) - showGrid / showGizmo / showCameraObjects / showContactShadows toggles - setIsRenderMode / setShowGrid / setShowGizmo etc. - renderWidth / renderHeight for future offscreen rendering Scene.jsx: - Floor: Grid and ContactShadows check !isRenderMode && showGrid - CameraMarkers: hidden when isRenderMode || !showCameraObjects - EditorGizmo: hidden when isRenderMode || !showGizmo - Deselect: hidden when isRenderMode - Orbi…ad2f294
-
feat: comprehensive audit - add all missing core features
GLB Studio DeployuseStore.js (complete rewrite): - Undo/Redo: pushUndo/undo/redo with snapshot of 8 state keys - Project Save/Load: localStorage, exportProjectJSON, importProjectJSON (.glbstudio files) - Project name (editable, double-click in toolbar) - Easing on keyframes: linear/ease-in/ease-out/ease-in-out (stored per-KF) - Loop playback: loopPlayback bool, setLoopPlayback - Grid snap: snapEnabled, snapTranslate/Rotate/Scale - Material overrides: materialOverride per model {color,roughness,metalness,opacity,wireframe} - castShadow/receiveShadow per model - duplicateModel: deep clone with offset position - selectModel: now correctly updates lastSelectedModelId Toolbar.jsx (complete rewrite): Keyboard shortcuts (skip when typing in inputs): G = Move R = Rotate S = Scale Space = Play/Pause Ctrl+Z = Undo Ctrl+Y/Ctrl+Shift+Z = Redo D = Duplicate selected Delete = Remove selected Tab = Toggle snap L = Loop F12 = Screenshot Ctrl+S = Save project - Undo/Redo buttons (greyed when stack emp…72b08e2
-
fix: black screen - cameras missing from store + ErrorBoundary
GLB Studio DeployRoot cause of black screen: - Scene.jsx used cameras/activeCameraId/inCameraView from store - But the Python patch that added these to useStore.js silently FAILED - undefined.map() / undefined.find() threw uncaught React render errors - No ErrorBoundary → entire app went black with no visible error Fixes: 1. useStore.js: cameras[] with default Camera 1, activeCameraId, inCameraView all properly added (verified with grep) 2. Scene.jsx: null guards everywhere (|| [] || {} || 'studio' || false) 3. ErrorBoundary.jsx: catches any crash, shows error + Reload button 4. main.jsx: wraps <App /> with <ErrorBoundary> Scene.jsx improvements: - All useStore calls have fallbacks (|| []) to prevent undefined.map() - CamHUD corner brackets fixed (was broken JSX logic) - FlyControls useEffect properly conditioned on inView && actId - failIfMajorPerformanceCaveat: false → works on low-end mobile GPUs - All internal components safe against null/undefined state CameraMode.jsx: same as previous but n…b690ac0 -
feat: complete camera system overhaul
GLB Studio DeployScene.jsx: - Multi-camera objects rendered in scene (box + lens + FOV cone) - CameraSync component: reads activeCameraId+inCameraView, drives R3F camera - FlyCameraControls: WASD+drag FPS fly inside useFrame (actually works) - OrbitControls auto-disabled when inCameraView=true - CameraHUD overlay: corner brackets, label, crosshair, controls hint - Camera objects clickable to select them in scene CameraMode.jsx (full rebuild): - Add/rename (double-click)/delete cameras - Per-camera cards: position, target, FOV slider + presets, near/far - Enter Camera View / Exit Camera View button per card - Active camera highlighted with glow border - Camera keyframes per camera (stored as __cam_<id>__ in keyframes) - Capture PNG / Record WebM from camera POV - Status bar when in camera view mode - Tips section Timeline.jsx: - Camera keyframe tracks shown as 🎥 layers - Camera labels in left label column - Camera tracks use blue color (#4f8eff) - Only shown when camera has at least 1 keyframe useSt…5b9b5c7
-
feat: Cannon.js physics + AI controller + car/city models + UI polish
GLB Studio DeployPhysics Engine (PhysicsEngine.jsx + PhysicsPanel.jsx): - cannon-es world integrated directly in R3F useFrame loop - Auto-creates bounding-box body for every loaded GLB - Body types: Dynamic / Static / Kinematic per model - Per-model: mass, linear damping, angular damping, friction, restitution - Gravity presets: Earth / Moon / Mars / Zero-G - Action buttons: Launch (impulse up), Push (side), Stop velocity - Ground plane auto-added so models land and rest - Physics ticks at fixed 60hz with delta accumulator AI Controller (AIController.jsx): - OpenRouter stepfun/step-3.5-flash:free (free tier) - Full scene context injected into every prompt (models, transforms, keyframes) - 12 action types the AI can execute: add_keyframe, animate_sequence, set_transform, set_playing, set_frame, set_animation, set_physics, apply_impulse, set_lighting, add_model, remove_model, select_model - Multi-turn conversation with reasoning preserved - 6 quick-prompt buttons for common tasks - Thinking indica…a0e74d4
-
feat: expanded canvas, dual controls, skybox panel
GLB Studio DeployCanvas: - Full viewport canvas (flex:1, no fixed px margins) - Side panel collapsible with ◁/▷ toggle button - Canvas fills 100% of remaining space Dual Controls: - Mouse: LEFT rotate, MIDDLE dolly, RIGHT pan - Touch: ONE finger rotate, TWO fingers dolly+pan - Separate speed tuning per device type - touchAction:none on canvas for clean mobile Skybox / Background: - New SkyboxPanel component (🌐 tab) - 4 preset environments + show/hide toggle - 8 quick solid colors + custom color picker - Upload equirectangular image (JPG/PNG) - Upload or paste URL for HDR/EXR files - RGBELoader lazy-imported (own 3.5kB chunk) - Sets scene.background + scene.environmentb7eb43c
-
🎬 Initial release: GLB Animation Studio
GLB Studio DeployComplete 3D animation studio for Hugging Face Spaces Features: - GLB/GLTF model loading (URL, file upload, demo models) - Three.js scene with shadows, lighting presets (studio/outdoor/dramatic/neon) - Transform controls: Move / Rotate / Scale with axis gizmos - Built-in GLB animation playback with speed control - Keyframe animation system with linear interpolation - 300-frame timeline editor with draggable keyframe dots - Video export via MediaRecorder API (WebM download) - Mobile-optimised UI (touch orbit, pinch zoom, bottom drawer) - Zustand state management Docker deployment: - Multi-stage Dockerfile (Node 20 builder → nginx 1.25 runner) - nginx on port 7860 (HF Spaces requirement) - Non-root user uid 1000 (HF Spaces requirement) - COEP/COOP headers for SharedArrayBuffer support - docker-compose for local prod + dev hot-reload Tech stack: React 18, Vite, Three.js, R3F, @react-three/drei, Zustandcad548d