Unified platform combining instruction-conditioned video diffusion, flow-matching action decoder, and action-conditioned simulator. Enables scalable robot learning without extensive labeled demonstrations.
Scanned 9/9/2026
Install to Claude Code
npx -y skills add ADu2021/skillXiv --skill genie-envisioner-robotic-foundation --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Genie Envisioner Robotic Foundation?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/adu2021-genie-envisioner-robotic-foundation)More formats (shields.io, HTML) on the badges page.
---
name: genie-envisioner-robotic-foundation
title: Genie Envisioner - World Foundation Platform for Robotic Manipulation
version: 0.0.2
engine: skillxiv-v0.0.2-claude-opus-4.6
license: MIT
url: https://arxiv.org/abs/2508.05635
keywords: [robotic-manipulation, video-diffusion, embodied-ai, foundation-models]
description: "Unified platform combining instruction-conditioned video diffusion, flow-matching action decoder, and action-conditioned simulator. Enables scalable robot learning without extensive labeled demonstrations."
---
# Genie Envisioner: World Foundation Platform for Robotic Manipulation
## Core Concept
Genie Envisioner consolidates fragmented robotic manipulation research into a unified foundation platform. By combining video diffusion modeling for world understanding, a lightweight action decoder, and a neural simulator, the system enables instruction-driven robot learning that generalizes across embodiments and requires minimal demonstrations.
## Architecture Overview
- **GE-Base**: Instruction-conditioned video diffusion model capturing spatial, temporal, and semantic dynamics of robot interactions
- **GE-Act**: Lightweight flow-matching decoder translating latent representations to executable action sequences
- **GE-Sim**: Action-conditioned neural simulator for generating high-fidelity rollouts
- **Embodiment Generalization**: Policies transfer across diverse robot morphologies
- **Scalable Training**: Efficient learning from limited demonstration data
## Implementation Steps
### Step 1: Build Instruction-Conditioned Video Diffusion (GE-Base)
Create video diffusion model that conditions on instructions.
```python
import torch
import torch.nn as nn
from einops import rearrange
class InstructionConditionedVideoDiffusion(nn.Module):
"""
GE-Base: Instruction-conditioned video diffusion model.
"""
def __init__(self, video_channels=3, latent_dim=256, num_frames=16):
super().__init__()
self.video_channels = video_channels
self.latent_dim = latent_dim
self.num_frames = num_frames
# Text encoder for instructions
self.text_encoder = self._build_text_encoder()
# 3D VAE for video compression
self.video_vae = self._build_3d_vae()
# Diffusion model operating on latents
self.diffusion_model = self._build_diffusion_model()
def _build_text_encoder(self):
"""Encode instruction text to embedding."""
from transformers import CLIPTextModel
return CLIPTextModel.from_pretrained("openai/clip-vit-base-patch32")
def _build_3d_vae(self):
"""Build 3D VAE for video compression."""
class VideoVAE(nn.Module):
def __init__(self, in_channels=3, latent_dim=4):
super().__init__()
# Simplified 3D VAE
self.encoder = nn.Sequential(
nn.Conv3d(in_channels, 64, 4, stride=2, padding=1),
nn.ReLU(),
nn.Conv3d(64, 128, 4, stride=2, padding=1),
nn.ReLU(),
nn.Conv3d(128, 256, 4, stride=2, padding=1),
)
self.fc_mu = nn.Linear(256 * 2 * 4 * 4, latent_dim)
self.fc_logvar = nn.Linear(256 * 2 * 4 * 4, latent_dim)
def encode(self, x):
h = self.encoder(x)
h = h.view(h.size(0), -1)
mu = self.fc_mu(h)
logvar = self.fc_logvar(h)
return mu, logvar
return VideoVAE()
def _build_diffusion_model(self):
"""Build latent diffusion model."""
class LatentDiffusionModel(nn.Module):
def __init__(self, latent_dim=256, text_dim=512):
super().__init__()
self.latent_dim = latent_dim
# Cross-attention with text conditioning
self.text_proj = nn.Linear(text_dim, latent_dim)
# Denoising network (simplified UNet)
self.denoise_net = nn.Sequential(
nn.Linear(latent_dim, 512),
nn.ReLU(),
nn.Linear(512, 512),
nn.ReLU(),
nn.Linear(512, latent_dim)
)
def forward(self, x_t, t, text_embedding):
# Project text conditioning
text_cond = self.text_proj(text_embedding)
# Denoise
noise_pred = self.denoise_net(x_t + text_cond)
return noise_pred
return LatentDiffusionModel()
def forward(self, video_frames, instruction, timestep):
"""
Forward pass for video diffusion.
Args:
video_frames: Video [batch, frames, channels, height, width]
instruction: Instruction text (batch of strings)
timestep: Diffusion timestep
Returns:
Denoising prediction
"""
# Encode text instruction
text_embeddings = self.text_encoder(instruction)
# Encode video to latent space
video_reshaped = rearrange(video_frames, 'b f c h w -> b c f h w')
video_latent_mu, _ = self.video_vae.encode(video_reshaped)
# Add noise (forward diffusion)
noise = torch.randn_like(video_latent_mu)
noisy_latent = video_latent_mu + noise
# Denoise
denoising_pred = self.diffusion_model(noisy_latent, timestep, text_embeddings)
return denoising_pred
def generate_video(self, instruction, num_steps=50):
"""
Generate video from instruction.
Args:
instruction: Instruction text
num_steps: Number of diffusion steps
Returns:
Generated video [frames, channels, height, width]
"""
# Start from noise
z_t = torch.randn(1, self.latent_dim)
# Encode instruction
text_embeddings = self.text_encoder([instruction])
# Reverse diffusion process
for t in range(num_steps, 0, -1):
denoising_pred = self.diffusion_model(z_t, t, text_embeddings)
z_t = z_t - denoising_pred # Simplified reverse step
# Decode latent to video
# (In practice, use full VAE decoder)
return z_t
```
### Step 2: Implement Flow-Matching Action Decoder (GE-Act)
Create lightweight decoder that converts latent representations to action sequences.
```python
class FlowMatchingActionDecoder(nn.Module):
"""
GE-Act: Flow-matching decoder for action generation.
Maps latent representations to robot action sequences.
"""
def __init__(self, latent_dim=256, action_dim=7, seq_len=16):
super().__init__()
self.latent_dim = latent_dim
self.action_dim = action_dim
self.seq_len = seq_len
# Transformer decoder
self.decoder = nn.TransformerDecoder(
nn.TransformerDecoderLayer(d_model=latent_dim, nhead=8),
num_layers=3
)
# Action output head
self.action_head = nn.Sequential(
nn.Linear(latent_dim, 256),
nn.ReLU(),
nn.Linear(256, action_dim)
)
def forward(self, latent_codes, seq_len=None):
"""
Decode latent codes to action sequence.
Args:
latent_codes: Latent representation [batch, seq_len, latent_dim]
seq_len: Target sequence length
Returns:
Action sequence [batch, seq_len, action_dim]
"""
if seq_len is None:
seq_len = self.seq_len
# Decode using transformer
decoded = self.decoder(latent_codes)
# Generate actions
actions = self.action_head(decoded[:, :seq_len])
# Normalize actions to valid range
actions = torch.tanh(actions)
return actions
def flow_matching_loss(self, latent_codes, target_actions):
"""
Compute flow matching loss.
Args:
latent_codes: Latent representations
target_actions: Target action sequences
Returns:
Flow matching loss
"""
# Predict actions
pred_actions = self.forward(latent_codes, seq_len=target_actions.shape[1])
# Flow matching: match vector field
# Simplified: L2 loss between predicted and target
flow_loss = torch.mean((pred_actions - target_actions) ** 2)
return flow_loss
```
### Step 3: Implement Action-Conditioned Simulator (GE-Sim)
Create neural simulator for rollout generation.
```python
class ActionConditionedSimulator(nn.Module):
"""
GE-Sim: Neural simulator predicting next frames given actions.
"""
def __init__(self, latent_dim=256, action_dim=7, num_frames=16):
super().__init__()
self.latent_dim = latent_dim
self.action_dim = action_dim
self.num_frames = num_frames
# Recurrent predictor
self.action_encoder = nn.Sequential(
nn.Linear(action_dim, 128),
nn.ReLU(),
nn.Linear(128, latent_dim)
)
self.frame_predictor = nn.LSTM(
input_size=latent_dim * 2, # latent + action
hidden_size=256,
num_layers=2,
batch_first=True
)
self.frame_decoder = nn.Sequential(
nn.Linear(256, 512),
nn.ReLU(),
nn.Linear(512, latent_dim)
)
def forward(self, initial_frame_latent, actions):
"""
Generate video rollout given initial frame and actions.
Args:
initial_frame_latent: Initial frame latent [batch, latent_dim]
actions: Action sequence [batch, seq_len, action_dim]
Returns:
Predicted frame latents [batch, seq_len, latent_dim]
"""
seq_len = actions.shape[1]
batch_size = actions.shape[0]
# Encode actions
encoded_actions = self.action_encoder(actions)
# LSTM rollout
frame_latents = [initial_frame_latent]
hidden_state = None
for t in range(seq_len):
# Concatenate current frame and action
lstm_input = torch.cat(
[frame_latents[-1], encoded_actions[:, t]],
dim=-1
).unsqueeze(1)
lstm_out, hidden_state = self.frame_predictor(lstm_input, hidden_state)
# Decode next frame
next_frame = self.frame_decoder(lstm_out.squeeze(1))
frame_latents.append(next_frame)
# Stack predictions
predicted_latents = torch.stack(frame_latents[1:], dim=1)
return predicted_latents
def rollout_loss(self, initial_frame, actions, target_frames):
"""
Compute rollout prediction loss.
Args:
initial_frame: Initial frame latent
actions: Action sequence
target_frames: Target frame sequence
Returns:
Rollout prediction loss
"""
predicted = self.forward(initial_frame, actions)
# L2 loss on latent space
loss = torch.mean((predicted - target_frames) ** 2)
return loss
```
### Step 4: Integrate Components into Unified Platform
Combine all components into end-to-end system.
```python
class GenieEnvisioner(nn.Module):
"""
Unified platform combining GE-Base, GE-Act, and GE-Sim.
"""
def __init__(self, latent_dim=256, action_dim=7):
super().__init__()
self.video_diffusion = InstructionConditionedVideoDiffusion()
self.action_decoder = FlowMatchingActionDecoder()
self.simulator = ActionConditionedSimulator()
def forward(self, instruction, initial_frame, num_frames=16):
"""
Generate manipulation trajectory from instruction.
Args:
instruction: Text instruction
initial_frame: Starting frame
num_frames: Length of trajectory
Returns:
Predicted frame sequence and actions
"""
# Encode initial frame
initial_latent, _ = self.video_diffusion.video_vae.encode(initial_frame)
# Generate action sequence
actions = self.action_decoder(
initial_latent.unsqueeze(1).repeat(1, num_frames, 1)
)
# Predict trajectory
predicted_frames = self.simulator(initial_latent, actions)
return predicted_frames, actions
def train_on_demonstrations(self, demonstrations, num_epochs=10):
"""
Train platform on robot demonstrations.
Args:
demonstrations: List of (instruction, video, actions) tuples
num_epochs: Training epochs
"""
optimizer = torch.optim.Adam(self.parameters(), lr=1e-4)
for epoch in range(num_epochs):
total_loss = 0
for instruction, video, actions in demonstrations:
# Encode video
video_latent_mu, _ = self.video_diffusion.video_vae.encode(video)
# Action decoder loss
action_loss = self.action_decoder.flow_matching_loss(
video_latent_mu.unsqueeze(0),
actions.unsqueeze(0)
)
# Simulator rollout loss
rollout_loss = self.simulator.rollout_loss(
video_latent_mu[0],
actions,
video_latent_mu[1:]
)
# Combined loss
loss = action_loss + rollout_loss
optimizer.zero_grad()
loss.backward()
optimizer.step()
total_loss += loss.item()
print(f"Epoch {epoch}: Loss={total_loss / len(demonstrations):.4f}")
```
## Practical Guidance
### When to Use Genie Envisioner
- **Robot learning from limited demos**: <100 trajectories per task
- **Embodiment transfer**: Single model for multiple robot types
- **Instruction-conditioned manipulation**: Text-guided robot tasks
- **Sim-to-real transfer**: Neural simulator for domain randomization
### When NOT to Use Genie Envisioner
- **Real-time control**: Diffusion generation adds latency
- **Precise manipulation**: Neural approximation may lack precision
- **Fully unseen objects**: Limited generalization without diverse training
- **Contact-rich tasks**: Simulator may miss subtle dynamics
### Hyperparameter Recommendations
- **Latent dimension**: 256-512 for rich representation
- **Action dimension**: 6-7 (position + gripper)
- **Frame sequence length**: 16-32 frames per trajectory
- **Diffusion steps**: 50 steps balances quality and speed
- **Learning rate**: 1e-4 for stable training
### Key Insights
The critical innovation is unifying world modeling (GE-Base), action generation (GE-Act), and simulation (GE-Sim) into one framework. Rather than separate systems for learning, evaluation, and simulation, this approach leverages the same latent representation across all components, enabling efficient transfer learning and embodiment generalization.
## Reference
**Genie Envisioner: Unified World Foundation Platform for Robotic Manipulation** (arXiv:2508.05635)
Introduces integrated platform combining instruction-conditioned video diffusion, flow-matching action decoder, and neural simulator. Enables scalable robot learning across embodiments with minimal demonstration data.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!