Skip to content
Back to skills

Genie Envisioner Robotic Foundation

ASecurity

Unified platform combining instruction-conditioned video diffusion, flow-matching action decoder, and action-conditioned simulator. Enables scalable robot learning without extensive labeled demonstrations.

  • 6 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 9, 2026
ai-agentspython

Works with

  • cli

Security analysis

A100/100

Scanned September 9, 2026

npx -y skills add ADu2021/skillXiv --skill genie-envisioner-robotic-foundation --agent claude-code

Installs 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 with every re-scan.

Security grade badge for Genie Envisioner Robotic Foundation
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/adu2021-genie-envisioner-robotic-foundation/badge)](https://www.skillsdirectory.com/skills/adu2021-genie-envisioner-robotic-foundation)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.