ComfyUI Extension: ComfyUI-8iPlayer
A ComfyUI custom node for interactive 8i volumetric video playback and frame capture.
Custom Nodes (0)
README
โจ ComfyUI-8iPlayer โจ
Developed for Kartel.ai by Lovis Odin
<a href="https://Kartel.IAI"><img src="assets/kartellogo.avif" alt="Kartel.IAI Logo" width="100"></a>
A custom node for ComfyUI providing an interactive 3D viewer for 8i volumetric videos (MPD format), allowing frame capture and integration into workflows.
๐ Key Features
- ๐ผ๏ธ Interactive 8i MPD Viewer: Load and view 8i videos via URL.
- ๐๏ธ Frame Sequence Capture: Grab frames from the video timeline.
- โฏ๏ธ Playback Controls: Smart play/pause functionality with visual feedback.
- ๐ฅ Camera Animation System: Record keyframes and create smooth camera animations between them.
- ๐ Animation Preview: Preview camera movements before capture with smooth transitions.
- ๐จ Customizable Background: Use solid colors or HDR environment maps (via URL).
- ๐ง Toggleable Floor: Add an optional ground plane.
- โ๏ธ Toggleable Shadows: Cast shadows onto the floor (requires floor).
- ๐ Update Node: Force ComfyUI recalculation with visual feedback.
- โจ๏ธ Enhanced Camera Controls: Full 360ยฐ rotation, keyboard controls (WASD + QE), extended zoom range.
- ๐ฆ Outputs: Provides captured frames as an
IMAGE
batch.
๐ Foundation & Core Credits
This node heavily utilizes and adapts code from the excellent comfyui-mixlab-nodes project by shadowcz007, particularly for the web viewer interface and the underlying structure connecting the frontend controls to the backend execution.
๐ ๏ธ Installation
- Navigate to your ComfyUI
custom_nodes
directory:cd ComfyUI/custom_nodes/
- Clone the repository (from Kartel.IAI):
git clone https://github.com/Kartel-IAI/ComfyUI-8iPlayer.git ComfyUI-8iPlayer
- Install the required dependencies:
cd ComfyUI-8iPlayer pip install -r requirements.txt
- Restart ComfyUI. โ
๐ฎ How to Use
- Add the "8i - 3Dplayer" node to your workflow.
- Paste the 8i
.mpd
manifest URL into the node's panel.- You can obtain the MPD URL directly from the official 8i Web Player. Click the dedicated button on the player interface to copy the manifest URL.
- Click "Load MPD". The hologram should appear.
- Use the panel controls to adjust:
- Background (Color Picker / HDR URL + Load Button)
- Example HDR URLs: You can try these links:
https://lovis.io/RESSOURCE/HDR/01.hdr https://lovis.io/RESSOURCE/HDR/02.hdr https://lovis.io/RESSOURCE/HDR/03.hdr https://lovis.io/RESSOURCE/HDR/04.hdr https://lovis.io/RESSOURCE/HDR/05.hdr https://lovis.io/RESSOURCE/HDR/06.hdr
- Example HDR URLs: You can try these links:
- Floor (Toggle Button / Color Picker)
- Shadows (Toggle Button)
- Playback (Play/Pause Button)
- Background (Color Picker / HDR URL + Load Button)
- Use mouse and keyboard for camera control:
- Mouse: Left-drag: Orbit (unlimited 360ยฐ) | Right-drag: Pan | Scroll: Zoom (0.1-1000x range)
- Keyboard: WASD: Move forward/backward/left/right | Q/E: Move up/down
- Camera Animation System:
- Orange border on play/pause button indicates camera keyframes are recorded
- Preview button: Test camera animations with 3-second smooth transitions
- Camera positions are automatically interpolated during frame capture
- Update Node button: Purple button to force ComfyUI recalculation (turns green when clicked)
- Set the desired
frame_count
on the node input. - Connect the
IMAGE
output to the next node (e.g., VAE Encode, Preview Image). - Queue Prompt! โถ๏ธ (Adjusting the camera view also triggers execution on the next run).
โ๏ธ Node Details
Node: 8i - 3Dplayer
(3DImage
)
- Inputs:
frame_count
(INT): Number of frames to capture (Default: 24, Min: 1, Max: 120).upload
(Internal): Handles data from the web UI._camera_timestamp
(Internal): Triggers re-execution on camera change.
- Outputs:
IMAGE
(IMAGE Batch): The sequence of captured frames.
๐งช Example Workflows
Download the example workflow JSON files from the workflow_examples
directory.
-
FLUX Enhancement: Takes captured frames and uses the FLUX model for realism.
- Workflow File:
workflow-8i-flux-v01.json
- Workflow File:
-
Wan 1.3b Basic Video: Uses captured frames with the Wan 1.3b model.
- Workflow File:
workflow-8i-wan-fun-1.3b-v01.json
- Workflow File:
-
Wan 1.3b + ChatGPT: Extends the Wan workflow with ChatGPT for prompt generation or other tasks.
- Workflow File:
workflow-8i-wan-fun-1.3b-ChatGpt-v01.json
- Workflow File:
-
Wan 1.3b + Vace + ChatGPT: Similar to the ChatGPT workflow but uses Vace for enhanced video processing.
- Workflow File:
workflow-8i-wan-vace-1.3b-ChatGpt-v01.json
- Workflow File:
๐ค Troubleshooting
- Load/Playback Fails:
- Verify MPD/HDR URL is correct and accessible (check CORS).
- Check browser console (F12) for errors.
- If the hologram doesn't load, try clicking "Load MPD" again. Sometimes a second click is needed for proper initialization.
- Viewer Black: Check console; ensure WebGL is enabled in your browser.
- Performance: High
frame_count
, large HDRs, and shadows can be demanding.
๐ป Technical Details
- Frontend: Built with Three.js.
- MPD Playback: Uses the 8i DashPlayer library.
- Camera: Enhanced Three.js OrbitControls with unlimited rotation and keyboard support.
- Animation System: Linear interpolation between user-defined keyframes with smooth transitions.
- Capture System: Advanced frame capture with camera stabilization during recording.
- HDR Loading: Three.js RGBELoader with improved background color handling.
๐ค Contributing
Pull requests are welcome! For major changes, please open an issue first to discuss.
๐ฎ Future Enhancements
We plan to add more features, including:
- ๐งฉ Enhanced Customization: Support for adding multiple characters/holograms, importing custom environments or objects (e.g., GLB files).
- ๐ Export Options: Save camera animations as presets for reuse across projects.
๐ค Author
Originally created by Lovis Odin.
๐ License
๐ Acknowledgements
- Built for the amazing ComfyUI platform.
- Uses Three.js, 8i DashPlayer, RGBELoader.
- Gratitude to the developers of the libraries mentioned above.
๐ Support
Please report issues via the GitHub Issues page for this repository.