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 signature5a33ffc
-
deploy: 2-stage Dockerfile, npm build on HF
Verified signature458a46f -
deploy: 2-stage Dockerfile, npm build on HF
Verified signatureafd2779 -
deploy: 2-stage Dockerfile, npm build on HF
Verified signaturea049ed7
-
fix: all HF Space issues resolved
GLB Studio Deploy1. PropertiesPanel.jsx: fixed operator precedence bug !model[key]??true → !(model[key]??true) (was causing incorrect boolean logic on shadow toggles) 2. nginx.conf: removed Cross-Origin-Embedder-Policy header COEP was blocking ALL cross-origin resource loading: - GLB/GLTF models from threejs.org, supabase.co etc - HDR/image skyboxes from external URLs - Google Fonts Removing COEP fixes model loading completely 3. README.md: clean valid HF front-matter, no trailing content issues 4. dist/: rebuilt with all fixes applied (index-CPjiwba7.js) Dockerfile still uses pre-built dist/ so HF build = ~20 sec Deployment strategy: nginx-only Docker image (no node/npm on HF) - FROM nginx:1.25-alpine only - COPY dist/ → nginx serves it - Build time on HF free tier: ~20 secondsca1349e
-
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
-
fix: animation detection + AI 404 errors
GLB Studio DeployModelManager.jsx: - Uses THREE.AnimationMixer directly (not useAnimations hook) so clips work on cloned scenes correctly - Auto-plays first clip on model load - Cross-fades between clips (fadeOut 0.3s / fadeIn 0.3s) - Mixer ticked via useFrame (clips actually animate now) - Manual skeleton clone for SkinnedMesh models (no SkeletonUtils dep) - Separate refs: mixerRef, actionsRef, currentAnimRef - Responds to animationPlaying, activeAnimation, animationSpeed from store AnimationPlayer.jsx: - Play/Pause button actually toggles model.animationPlaying in store - Stop button pauses and resets - Now-playing indicator with pulse dot (green=playing, grey=paused) - Play All / Pause All header button - Clip buttons show ▶ / ⏸ prefix for active clip state useStore.js: - Added setModelAnimPlaying(id, playing) action - selectModel now preserves lastSelectedModelId on deselect AIController.jsx: - 10 verified free models (old llama-3.1-8b had no free endpoints) - Handles HTTP 404, 429, 500, 503, …d9dc1a9 -
feat: CommandInterpreter layer + voice control + animation presets
GLB Studio DeployCommandInterpreter.js (new critical layer): - Structured command schema validation before execution - resolveTarget(): 'selected','it','car','all',name-match,ID-match,aliases - 20+ action types with proper delta vs absolute handling - Physics-aware: uses velocity/impulse when physics on, transform when off - Direction shorthand: {direction:'forward',amount:3} → correct axis delta - generatePresetAnimation(): drive_straight, spin_360, bounce, figure_eight, circle, fly_in - Array of commands executed sequentially with 60ms delay - Graceful error recovery per-command AIController.jsx (major rewrite): - Plugs through CommandInterpreter (not direct store calls) - 5-model fallback chain: llama→gemma→mistral→qwen→stepfun - Voice input via Web Speech API (🎤 button, shown when supported) - 10 quick-action buttons in 2-column grid - Context memory: last selected preserved across messages - Command history logged to store (addAiCommandHistory) - Retry hint shown on error messages - Model name s…d496807
-
fix: AI controller - fallback model chain + full object control
GLB Studio Deploy- Auto-retry across 5 free OpenRouter models on 429/503: llama-3.1-8b → gemma-3-4b → mistral-7b → step-3.5-flash → qwen3-8b - Never fails silently - always tries next model before giving up - Added set_visibility and set_velocity actions - Full real-time object control (set_transform executes instantly) - Improved JSON parsing (strips markdown fences, finds first/last braces) - Better system prompt with coordinate tips and car animation examples - Quick prompts execute immediately (click = send directly) - Current model name shown in subtitle - Purple gradient send button with glowfd929bb -
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
-
redesign: complete modern UI overhaul + new features
GLB Studio DeployDesign System: - Full CSS variables design system (bg0-bg4, accent, text0-3, radius, shadows) - Inter (UI) + JetBrains Mono (numbers/code) + Syne (brand) font stack - Consistent border, hover, focus, transition styles everywhere - All global range/input/scrollbar styling in index.css Layout: - Blender-style icon rail (48px) on right edge with slide-out panel (260px) - Panel animates open/close with smooth width transition - Panel header with title + close button - Mobile: slide-up drawer (55% height) with tab bar at bottom - Canvas always fills 100% of remaining viewport Toolbar: - Compact, clean — brand / transform tools / transport / lighting / keyframe shortcut - Active states with accent color background + border - Styled play button with glow shadow - Frame counter with monospace font in bg3 chip ModelsPanel: - Large drag-and-drop zone with pulse animation on hover - Grid layout for demo model buttons - Model list with color dots, anim count badges, hover states - Inline visibi…fd8bcfa -
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 -
feat: add AnimationPlayer + CameraMode components
GLB Studio DeployAnimationPlayer: - Detects all animations in every loaded GLB model - Per-model: play/pause, loop toggle, speed slider - One-click animation switching between all clips - Crossfade blend slider when switching between anims CameraMode (Prisma3D-style): - Toggle between FREE orbit and CAMERA fly mode - WASD + drag to fly, Q/E for up/down, pinch on mobile - FOV slider (20-120 deg) - Camera keyframes: add/remove/scrub on timeline - Interpolated camera path playback across timeline - Capture single frame as PNG download - Record full sequence as WebM from camera POV Zero changes to existing Scene/ModelManager/Timeline/storee9d7cd0
-
🎬 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