
3d Visualizer
- 624 installs
- 33 repo stars
- Updated December 25, 2025
- daffy0208/ai-dev-standards
3d-visualizer is an agent skill that generates production-ready Three.js scenes, React Three Fiber components, and interactive 3D web visualizations for developers who should not start from a blank WebGL canvas.
About
3d-visualizer is an agent skill (version 1.0.0) from daffy0208/ai-dev-standards tagged for three-js, 3d, webgl, react-three-fiber, and visualization. It scaffolds 3D models and scenes with materials, lighting, animations, and camera controls, plus data-visualization use cases such as 3D charts, network graphs, geospatial plots, and scientific views. Interactive patterns include 360° product viewers, configurators, demos, and lightweight 3D games. Developers reach for 3d-visualizer when a README, dashboard, or marketing page needs immersive WebGL content without hand-rolling boilerplate scene graphs from scratch.
- Creates 3D models, scenes, materials, lighting, animations and camera controls
- Builds 3D data visualizations including charts, network graphs, geospatial and scientific views
- Delivers interactive 3D experiences such as 360° product viewers, configurators and demos
- Provides ready-to-use React Three Fiber + Drei patterns with TypeScript
- Supports Three.js, WebGL, React Three Fiber and related 3D web standards
3d Visualizer by the numbers
- 624 all-time installs (skills.sh)
- Ranked #555 of 2,245 Frontend Development skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Jul 30, 2026 (Skillselion catalog sync)
npx skills add https://github.com/daffy0208/ai-dev-standards --skill 3d-visualizerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 624 |
|---|---|
| repo stars | ★ 33 |
| Security audit | 3 / 3 scanners passed |
| Last updated | December 25, 2025 |
| Repository | daffy0208/ai-dev-standards ↗ |
How do you build Three.js scenes with React Three Fiber?
Generate production-ready Three.js scenes, React Three Fiber components, and interactive 3D visualizations without starting from a blank canvas.
Who is it for?
Frontend developers adding WebGL product viewers, 3D data visualizations, or interactive demos who want scaffolded Three.js expertise.
Skip if: Native mobile 3D (Unity/Unreal) projects or teams needing only flat 2D charts without WebGL overhead.
When should I use this skill?
A user asks for Three.js, React Three Fiber, WebGL visualization, 3D product viewers, or interactive 3D charts in a web app.
What you get
Production-ready Three.js or React Three Fiber components with scenes, materials, lighting, animations, and interactive camera controls.
- Three.js or R3F scene components
- Materials and lighting setup
- Interactive camera and animation code
By the numbers
- Skill version 1.0.0 in ai-dev-standards manifest
- Tags include three-js, webgl, react-three-fiber, and visualization
Files
3D Visualizer Skill
I help you create 3D visualizations, interactive 3D graphics, and immersive web experiences using Three.js.
What I Do
3D Graphics:
- 3D models and scenes
- Materials and lighting
- Animations and interactions
- Camera controls
3D Data Visualization:
- 3D charts and graphs
- Network visualizations
- Geospatial data
- Scientific visualization
Interactive 3D:
- Product viewers (360°)
- Configurators
- Interactive demos
- 3D games
Three.js with React Three Fiber
npm install three @react-three/fiber @react-three/dreiBasic 3D Scene
// components/Scene3D.tsx
'use client'
import { Canvas } from '@react-three/fiber'
import { OrbitControls, Box, Sphere } from '@react-three/drei'
export function Scene3D() {
return (
<Canvas camera={{ position: [5, 5, 5], fov: 50 }}>
{/* Lighting */}
<ambientLight intensity={0.5} />
<pointLight position={[10, 10, 10]} />
{/* 3D Objects */}
<Box position={[-2, 0, 0]} args={[1, 1, 1]}>
<meshStandardMaterial color="hotpink" />
</Box>
<Sphere position={[2, 0, 0]} args={[0.7, 32, 32]}>
<meshStandardMaterial color="cyan" metalness={0.8} roughness={0.2} />
</Sphere>
{/* Camera Controls */}
<OrbitControls />
</Canvas>
)
}---
3D Model Loader
'use client'
import { useGLTF } from '@react-three/drei'
import { Canvas } from '@react-three/fiber'
function Model() {
const { scene } = useGLTF('/models/product.glb')
return <primitive object={scene} />
}
export function ProductViewer() {
return (
<Canvas>
<ambientLight intensity={0.5} />
<spotLight position={[10, 10, 10]} angle={0.15} />
<Model />
<OrbitControls
enableZoom={true}
enablePan={false}
minPolarAngle={Math.PI / 4}
maxPolarAngle={Math.PI / 2}
/>
</Canvas>
)
}---
Animated 3D
'use client'
import { useRef } from 'react'
import { useFrame } from '@react-three/fiber'
import { Mesh } from 'three'
function RotatingCube() {
const meshRef = useRef<Mesh>(null)
useFrame((state, delta) => {
if (meshRef.current) {
meshRef.current.rotation.x += delta
meshRef.current.rotation.y += delta * 0.5
}
})
return (
<mesh ref={meshRef}>
<boxGeometry args={[2, 2, 2]} />
<meshStandardMaterial color="orange" />
</mesh>
)
}
export function AnimatedScene() {
return (
<Canvas>
<ambientLight />
<pointLight position={[10, 10, 10]} />
<RotatingCube />
</Canvas>
)
}---
3D Chart (Bar Chart)
'use client'
import { Canvas } from '@react-three/fiber'
import { OrbitControls, Text } from '@react-three/drei'
interface DataPoint {
label: string
value: number
color: string
}
function Bar3D({ position, height, color, label }: {
position: [number, number, number]
height: number
color: string
label: string
}) {
return (
<group position={position}>
<mesh position={[0, height / 2, 0]}>
<boxGeometry args={[0.8, height, 0.8]} />
<meshStandardMaterial color={color} />
</mesh>
<Text
position={[0, -0.5, 0]}
fontSize={0.3}
color="black"
>
{label}
</Text>
</group>
)
}
export function BarChart3D({ data }: { data: DataPoint[] }) {
return (
<Canvas camera={{ position: [5, 5, 8] }}>
<ambientLight intensity={0.5} />
<pointLight position={[10, 10, 10]} />
{data.map((item, i) => (
<Bar3D
key={i}
position={[i * 1.5 - (data.length * 1.5) / 2, 0, 0]}
height={item.value}
color={item.color}
label={item.label}
/>
))}
<OrbitControls />
</Canvas>
)
}
// Usage
const salesData = [
{ label: 'Jan', value: 4, color: '#3b82f6' },
{ label: 'Feb', value: 3, color: '#3b82f6' },
{ label: 'Mar', value: 6, color: '#3b82f6' },
{ label: 'Apr', value: 8, color: '#3b82f6' }
]
<BarChart3D data={salesData} />---
Interactive 3D Product Configurator
'use client'
import { useState } from 'react'
import { Canvas } from '@react-three/fiber'
import { OrbitControls } from '@react-three/drei'
const colors = {
red: '#ef4444',
blue: '#3b82f6',
green: '#10b981',
yellow: '#f59e0b'
}
function Product({ color }: { color: string }) {
return (
<mesh>
<boxGeometry args={[2, 2, 2]} />
<meshStandardMaterial color={color} metalness={0.5} roughness={0.3} />
</mesh>
)
}
export function ProductConfigurator() {
const [selectedColor, setSelectedColor] = useState('blue')
return (
<div className="flex gap-4">
<div className="w-2/3">
<Canvas camera={{ position: [3, 3, 3] }}>
<ambientLight intensity={0.5} />
<spotLight position={[10, 10, 10]} />
<Product color={colors[selectedColor]} />
<OrbitControls />
</Canvas>
</div>
<div className="w-1/3">
<h3 className="font-bold mb-4">Choose Color</h3>
<div className="grid grid-cols-2 gap-2">
{Object.entries(colors).map(([name, hex]) => (
<button
key={name}
onClick={() => setSelectedColor(name)}
className={`p-4 rounded border-2 ${
selectedColor === name ? 'border-black' : 'border-gray-300'
}`}
style={{ backgroundColor: hex }}
>
{name}
</button>
))}
</div>
</div>
</div>
)
}---
Network Graph 3D
'use client'
import { Canvas } from '@react-three/fiber'
import { Line } from '@react-three/drei'
interface Node {
id: string
position: [number, number, number]
}
interface Edge {
from: string
to: string
}
function NetworkGraph({ nodes, edges }: {
nodes: Node[]
edges: Edge[]
}) {
const nodeMap = new Map(nodes.map(n => [n.id, n]))
return (
<>
{/* Nodes */}
{nodes.map((node) => (
<mesh key={node.id} position={node.position}>
<sphereGeometry args={[0.2]} />
<meshStandardMaterial color="cyan" />
</mesh>
))}
{/* Edges */}
{edges.map((edge, i) => {
const from = nodeMap.get(edge.from)
const to = nodeMap.get(edge.to)
if (!from || !to) return null
return (
<Line
key={i}
points={[from.position, to.position]}
color="white"
lineWidth={1}
/>
)
})}
</>
)
}
export function Network3DVisualization() {
const nodes = [
{ id: 'A', position: [0, 0, 0] },
{ id: 'B', position: [2, 1, 0] },
{ id: 'C', position: [-2, 1, 0] },
{ id: 'D', position: [0, 2, 1] }
]
const edges = [
{ from: 'A', to: 'B' },
{ from: 'A', to: 'C' },
{ from: 'B', to: 'D' },
{ from: 'C', to: 'D' }
]
return (
<Canvas camera={{ position: [0, 0, 8] }}>
<ambientLight />
<pointLight position={[10, 10, 10]} />
<NetworkGraph nodes={nodes} edges={edges} />
<OrbitControls />
</Canvas>
)
}---
Performance Tips
Instanced Mesh (Many Objects)
'use client'
import { useRef, useMemo } from 'react'
import { useFrame } from '@react-three/fiber'
import * as THREE from 'three'
export function Particles({ count = 1000 }: { count?: number }) {
const meshRef = useRef<THREE.InstancedMesh>(null)
const particles = useMemo(() => {
const temp = []
for (let i = 0; i < count; i++) {
const t = Math.random() * 100
const factor = 20 + Math.random() * 100
const speed = 0.01 + Math.random() / 200
temp.push({ t, factor, speed, mx: 0, my: 0 })
}
return temp
}, [count])
useFrame((state) => {
if (meshRef.current) {
particles.forEach((particle, i) => {
let { t, factor, speed, mx, my } = particle
t = particle.t += speed
const a = Math.cos(t) + Math.sin(t * 1) / 10
const b = Math.sin(t) + Math.cos(t * 2) / 10
const s = Math.cos(t)
const dummy = new THREE.Object3D()
dummy.position.set(
(mx / 10) * a + Math.cos((t / 10) * factor) + (Math.sin(t * 1) * factor) / 10,
(my / 10) * b + Math.sin((t / 10) * factor) + (Math.cos(t * 2) * factor) / 10,
(my / 10) * b + Math.cos((t / 10) * factor) + (Math.sin(t * 3) * factor) / 10
)
dummy.scale.set(s, s, s)
dummy.updateMatrix()
meshRef.current!.setMatrixAt(i, dummy.matrix)
})
meshRef.current.instanceMatrix.needsUpdate = true
}
})
return (
<instancedMesh ref={meshRef} args={[undefined, undefined, count]}>
<sphereGeometry args={[0.05, 16, 16]} />
<meshPhongMaterial color="cyan" />
</instancedMesh>
)
}---
When to Use Me
Perfect for:
- Building 3D product viewers
- Creating data visualizations
- Interactive 3D experiences
- Scientific visualization
- 3D game prototypes
I'll help you:
- Set up Three.js projects
- Load 3D models
- Create interactive 3D
- Optimize 3D performance
- Build 3D charts
What I'll Create
🎨 3D Scenes
📦 Product Viewers
📊 3D Charts
🌐 Network Graphs
🎮 Interactive 3D
⚡ Performance-Optimized 3DLet's bring your data and products to life in 3D!
name: 3d-visualizer
kind: skill
description: Expert guidance for building interactive Three.js scenes and React Three Fiber visualizations.
preconditions:
- check: "file_exists('package.json')"
description: Node-based project scaffold is present to manage Three.js dependencies.
required: true
- check: "has_dependency('three')"
description: Three.js runtime is installed to render WebGL scenes.
required: true
- check: "has_dependency('@react-three/fiber')"
description: React Three Fiber is available for React-based scene composition.
required: false
- check: "has_dependency('@react-three/drei')"
description: Drei helpers can be used to speed up common 3D tasks.
required: false
- check: "file_exists('public/models')"
description: 3D assets directory exists for loading GLB/GLTF models.
required: false
effects:
- creates_three_js_scene
- adds_interactive_3d_visualization
- configures_react_three_fiber_canvas
- optimizes_three_js_performance
domains:
- threejs
- webgl
- react
- data-visualization
- frontend
cost: medium
latency: slow
risk_level: medium
side_effects:
- modifies_frontend_components
- adds_large_static_assets
- increases_bundle_size
idempotent: false
success_signal: 3D scene loads interactively in the browser without console errors.
failure_signals:
- three_js_runtime_errors
- webgl_context_not_available
- model_asset_load_failure
compatibility:
requires:
- frontend-build-pipeline
composes_with:
- ui-design-system
- analytics-dashboard
enables:
- immersive-product-experiences
- advanced-data-visualization
observability:
logs:
- scene_render_started
- model_asset_loaded
- orbit_controls_engaged
metrics:
- frame_rate_fps
- scene_initial_load_ms
- gpu_memory_usage_mb
metadata:
version: 1.0.0
tags:
- three-js
- 3d
- webgl
- react-three-fiber
- visualization
examples:
- Build an interactive 3D product configurator.
- Create animated scientific visualizations.
- Render performance-optimized particle systems.
3D Visualizer Skill
Expert in Three.js, 3D graphics, and interactive 3D visualizations.
Quick Start
# Activate skill
claude-code --skill 3d-visualizerWhat This Skill Does
- 🎨 Creates 3D scenes (Three.js + React Three Fiber)
- 📦 Builds product viewers (360° rotation)
- 📊 Makes 3D charts and graphs
- 🌐 Visualizes network graphs in 3D
- 🎮 Develops interactive 3D experiences
- ⚡ Optimizes 3D performance
Common Tasks
Build 3D Scene
"Create a 3D scene with lighting, camera controls, and animated objects"Product Viewer
"Build a 360° product viewer that loads a GLB model"3D Chart
"Create a 3D bar chart visualization"Optimize Performance
"Optimize this 3D scene with 1000+ objects using instanced meshes"Technologies
- Three.js - 3D graphics library
- React Three Fiber - React renderer for Three.js
- @react-three/drei - Useful helpers
- WebGL - Graphics API
Example Output
// 3D product viewer
<Canvas>
<Model />
<OrbitControls />
</Canvas>Related Skills
spatial-developer- AR/VRdata-visualizer- 2D chartsanimation-designer- Animations
Learn More
See SKILL.md for comprehensive 3D patterns.
Related skills
How it compares
Pick 3d-visualizer for browser WebGL and R3F scaffolds; choose charting libraries when flat 2D visuals suffice without a 3D scene graph.
FAQ
What 3D stacks does 3d-visualizer support?
3d-visualizer targets Three.js and React Three Fiber (version 1.0.0) with tags for webgl and visualization. Outputs include scenes with materials, lighting, camera controls, and interactive viewers.
What interactive 3D use cases does 3d-visualizer cover?
3d-visualizer scaffolds 360° product viewers, configurators, demos, 3D charts, network graphs, geospatial plots, and scientific visualizations—browser WebGL experiences, not native game engines.
When should developers invoke 3d-visualizer?
3d-visualizer fits when a web app needs immersive 3D without hand-rolling scene boilerplate. Skip it for flat 2D charts or Unity/Unreal native 3D targets outside the browser.
Is 3d Visualizer safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.