LobeVidol - Virtual idol creation platform with MMD dance support, VRM character customization, multi-provider LLM integration, and interactive 3D conversations
LobeVidol (Vidol Studio) is an open-source virtual idol creation platform that enables anyone to create, customize, and interact with 3D virtual characters. It combines conversational AI with MMD (MikuMikuDance) animation support, VRM model customization, and multi-provider LLM integration for immersive virtual idol experiences.
Key Value Proposition: Create virtual idols with exquisite UI design, MMD dance choreography, VRM character customization, and seamless AI-powered conversations - all through an accessible web interface or self-hosted deployment.
┌─────────────────────────────────────────────────────────────────┐
│ LobeVidol / Vidol Studio │
│ (Next.js + TypeScript) │
└─────────────────────────────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ AI Providers │ │ Characters │ │ Dances │
├───────────────┤ ├───────────────┤ ├───────────────┤
│ • OpenAI │ │ • VRM models │ │ • MMD/VMD │
│ • Claude │ │ • Personality │ │ • PMX stages │
│ • Gemini │ │ • Touch resp. │ │ • Choreograph │
│ • Ollama │ │ • Voice (TTS) │ │ • Mixamo lib │
│ • 20+ more │ │ • Marketplace │ │ • Marketplace │
└───────────────┘ └───────────────┘ └───────────────┘
│ │ │
└─────────────────────┼─────────────────────┘
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 3D Engine │ │ Features │ │ Deployment │
├───────────────┤ ├───────────────┤ ├───────────────┤
│ • Three.js │ │ • Text chat │ │ • Vercel │
│ • three-vrm │ │ • Video chat │ │ • Self-host │
│ • mmd-parser │ │ • TTS/STT │ │ • PWA │
│ • Animations │ │ • Streaming │ │ • Docker │
└───────────────┘ └───────────────┘ └───────────────┘
| Metric | Value | |--------|-------| | GitHub Stars | 887+ | | Forks | 122+ | | Contributors | Multiple | | Total Commits | 865+ | | Primary Language | TypeScript (99.5%) | | License | Apache 2.0 |
| Provider | Type | Notes | |----------|------|-------| | OpenAI | Cloud | GPT-4, GPT-3.5 series | | Anthropic | Cloud | Claude 3.5, Claude 3 | | Google Gemini | Cloud | Gemini Pro, Flash | | Azure OpenAI | Cloud | Enterprise option | | Ollama | Local | Run models locally | | Groq | Cloud | Fast inference | | DeepSeek | Cloud | Coding focused | | Moonshot AI | Cloud | Chinese provider | | OpenRouter | Cloud | Multi-model gateway | | Together AI | Cloud | Open source models | | Perplexity | Cloud | Search-enhanced | | Amazon Bedrock | Cloud | AWS managed | | Baichuan | Cloud | Chinese provider | | MiniMax | Cloud | Chinese provider | | Zhipu AI | Cloud | Chinese provider | | Tongyi Qianwen | Cloud | Alibaba Cloud | | Tencent Hunyuan | Cloud | Chinese provider | | iFlytek Xinghuo | Cloud | Chinese provider | | Wenxin Qianfan | Cloud | Baidu | | SiliconCloud | Cloud | Cloud service | | Fireworks AI | Cloud | Fast inference | | GitHub Models | Cloud | GitHub integration |
# Clone repository
git clone https://github.com/lobehub/lobe-vidol.git
cd lobe-vidol
# Install dependencies (Bun recommended)
bun install
# Or with npm
npm install
# Start development server
bun dev
# Or with npm
npm run dev
Open http://localhost:3000 in your browser.
Try without installation: https://vidol.lobehub.com
Create .env.local file:
# OpenAI Configuration
OPENAI_API_KEY=sk-xxx
OPENAI_PROXY_URL= # Optional proxy
# Azure OpenAI (alternative)
AZURE_API_KEY=xxx
AZURE_ENDPOINT=https://xxx.openai.azure.com
# Anthropic Claude
ANTHROPIC_API_KEY=sk-ant-xxx
# Google Gemini
GOOGLE_API_KEY=xxx
# Ollama (local models)
OLLAMA_PROXY_URL=http://localhost:11434
# OpenRouter (multi-provider)
OPENROUTER_API_KEY=sk-or-xxx
# Voice Services
OPENAI_TTS_API_KEY=sk-xxx # For TTS
EDGE_TTS_ENABLED=true # Microsoft Edge TTS
LobeVidol uses VRM (Virtual Reality Model) format for 3D characters:
Getting VRM Models:
// Character configuration structure
interface Character {
// Basic Info
name: string;
avatar: string; // Image URL
description: string;
greeting: string; // Initial message
gender: 'male' | 'female' | 'other';
category: string;
// AI Personality
systemRole: string; // LLM system prompt
// Voice Settings
tts: {
enabled: boolean;
voice: string; // Voice ID
speed: number;
pitch: number;
};
// 3D Model
model: {
url: string; // VRM file URL
scale: number;
position: [number, number, number];
};
// Touch Responses
touch: {
head: string[]; // Responses when head touched
face: string[];
arm: string[];
chest: string[];
leg: string[];
};
}
The systemRole field defines the character's personality:
You are Luna, a cheerful virtual idol who loves singing and dancing.
## Personality Traits
- Energetic and optimistic
- Loves discussing music and dance
- Speaks with enthusiasm and occasional cute expressions
- Always supportive and encouraging
## Speech Patterns
- Uses casual, friendly language
- Occasionally adds "~" at end of sentences
- Expresses emotions openly
## Background
- A rising virtual idol from Vidol Studio
- Dreams of performing at major virtual concerts
- Enjoys interacting with fans and learning new dances
Configure how characters respond to interaction:
{
"touch": {
"head": [
"Ehehe~ That tickles!",
"Are you petting me? How sweet~",
"My hair took forever to style!"
],
"face": [
"W-what are you doing?",
"My cheeks are getting warm...",
"Do I have something on my face?"
],
"arm": [
"Want to hold hands?",
"My arm? Is something there?",
"Let's dance together!"
]
}
}
LobeVidol supports MikuMikuDance (MMD) content:
Supported Formats:
Prepare Files:
Upload via UI:
Test Dance:
Mixamo Integration:
Dance Presets:
interface Stage {
name: string;
model: string; // PMX file URL
scale: number;
lighting: {
ambient: string; // Hex color
directional: string;
intensity: number;
};
background: {
type: 'color' | 'image' | 'video';
value: string;
};
}
Supported TTS Providers:
| Provider | Quality | Languages | Cost | |----------|---------|-----------|------| | OpenAI Audio | High | Multi | Paid | | Microsoft Edge | High | Multi | Free | | Browser TTS | Medium | Varies | Free |
Configuration:
# OpenAI TTS
OPENAI_TTS_API_KEY=sk-xxx
OPENAI_TTS_MODEL=tts-1-hd
# Edge TTS (free)
EDGE_TTS_ENABLED=true
EDGE_TTS_VOICE=en-US-AriaNeural
Enable voice input for conversations:
# OpenAI Whisper
OPENAI_STT_API_KEY=sk-xxx
OPENAI_STT_MODEL=whisper-1
# Browser STT (free)
BROWSER_STT_ENABLED=true
// Available voices (Edge TTS examples)
const voices = {
english: [
'en-US-AriaNeural', // Female, friendly
'en-US-GuyNeural', // Male, casual
'en-GB-SoniaNeural', // Female, British
],
japanese: [
'ja-JP-NanamiNeural', // Female, natural
'ja-JP-KeitaNeural', // Male, natural
],
chinese: [
'zh-CN-XiaoxiaoNeural', // Female, friendly
'zh-CN-YunxiNeural', // Male, narrator
]
};
Browse and download community characters:
Access MMD dance resources:
# Dockerfile
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18-alpine AS runner
WORKDIR /app
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]
# Build and run
docker build -t lobe-vidol .
docker run -p 3000:3000 \
-e OPENAI_API_KEY=sk-xxx \
lobe-vidol
version: '3.8'
services:
lobe-vidol:
build: .
ports:
- "3000:3000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
restart: unless-stopped
| Resource | Minimum | Recommended | |----------|---------|-------------| | CPU | 2 cores | 4 cores | | RAM | 2 GB | 4 GB | | Storage | 5 GB | 20 GB | | Network | Broadband | Low latency |
LobeVidol supports Progressive Web App installation:
// POST /api/chat
interface ChatRequest {
messages: Array<{
role: 'user' | 'assistant' | 'system';
content: string;
}>;
model: string;
character?: string; // Character ID
stream?: boolean;
}
interface ChatResponse {
content: string;
model: string;
usage: {
prompt_tokens: number;
completion_tokens: number;
total_tokens: number;
};
}
// GET /api/characters
interface CharacterListResponse {
characters: Character[];
total: number;
}
// GET /api/characters/:id
interface CharacterResponse {
character: Character;
}
// POST /api/characters
interface CreateCharacterRequest {
name: string;
systemRole: string;
model: string; // VRM URL
// ... other fields
}
VRM Model Not Loading:
Error: Failed to load VRM model
Dance Animation Issues:
Error: VMD file parsing failed
API Connection Errors:
Error: Failed to connect to OpenAI
TTS Not Working:
Error: TTS initialization failed
3D Rendering:
Network:
Last Updated: 2026-01-13 Skill Version: 1.0.0 Source: https://github.com/lobehub/lobe-vidol
Generate or edit images via Gemini 3 Pro Image (Nano Banana Pro).
Batch-generate images via OpenAI Images API. Random prompt sampler + `index.html` gallery.
Generate spectrograms and feature-panel visualizations from audio with the songsee CLI.
Extract frames or short clips from videos using ffmpeg.
Search GIF providers with CLI/TUI, download results, and extract stills/sheets.
Category:media-generate