Real-time streaming for ComfyUI using the Livepeer gateway trickle protocol. Frames are published directly to orchestrators and outputs are pulled via trickle subscribe.
- 🎥 Trickle publish/subscribe: send/receive frames via Livepeer network
- 🔄 Bidirectional streaming nodes: start, input, and output nodes for ComfyUI
- ⚙️ Configurable orchestrator/signer: point at any Livepeer orchestrator, optional remote signer
- 🧱 FrameBridge: sync→async bridge for safe node enqueue
- 💡 Pure Livepeer: direct connection to orchestrators, no middleware required
-
Install via ComfyUI Manager (easiest method):
- Open ComfyUI Desktop
- Go to Manager → Install Custom Nodes
- Search for "Livepeer AI Streaming"
- Click Install
- Restart ComfyUI
-
Install via comfy-cli (ComfyUI Registry):
comfy node registry-install livepeer-ai-nodes
Then restart ComfyUI.
-
Manual Installation:
cd %USERPROFILE%\Documents\ComfyUI\custom_nodes git clone https://github.com/eliteprox/livepeer-ai-nodes.git livepeer-ai-nodes cd livepeer-ai-nodes pip install -r requirements.txt
Then restart ComfyUI Desktop.
For standard ComfyUI installations:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/eliteprox/livepeer-ai-nodes.git livepeer-ai-nodes
cd livepeer-ai-nodes
pip install -r requirements.txtRestart your ComfyUI server.
After installation, you should see new nodes in the "Trickle" category.
Set environment variables:
# Required: orchestrator URL
export ORCHESTRATOR_URL=https://your-orchestrator.example.com:8936
# Optional: remote signer for authentication
export SIGNER_URL=https://signer.eliteencoder.netOr configure via the TrickleConfig node in your workflow.
Basic webcam→orchestrator workflow:
- Add
WebcamCapturenode (from ComfyUI core) - Add
TrickleConfignode:- Set orchestrator URL
- Set signer URL (optional)
- Set model ID (e.g., "noop" or "comfystream")
- Set FPS and keyframe interval
- Add
StartTrickleStreamnode:- Connect config from
TrickleConfig - Set width/height for the stream
- Connect config from
- Add
TrickleFrameInputnode:- Connect IMAGE from webcam
- Connect publish_url from
StartTrickleStream
- (Optional) Add
TrickleFrameOutputnode to view output frames
- Queue the workflow in ComfyUI
- Frames will be published to the orchestrator via trickle
- Check the console logs for
publish_urlandsubscribe_url - Use the
subscribe_urlto view the output stream
- TrickleConfig: Configuration for orchestrator connection
- StartTrickleStream: Start a trickle stream session
- TrickleFrameInput: Enqueue frames to publish
- TrickleFrameOutput: Receive frames from subscribe URL
- UpdateTrickleStream: Send control messages to running stream
ComfyUI Node (sync)
└─> FrameBridge (thread-safe queue)
└─> NetworkController (asyncio loop)
└─> Livepeer Gateway SDK
└─> Orchestrator (trickle publish/subscribe)
- nodes/frame_nodes.py: All 5 trickle streaming nodes
- nodes/stream/network_controller.py: Trickle publisher (asyncio)
- nodes/stream/network_subscriber.py: Trickle subscriber (asyncio)
- nodes/stream/frame_bridge.py: Thread-safe sync→async frame queue
- nodes/stream/credentials.py: Simple orchestrator/signer URL resolution
- nodes/stream/trickle_output_bridge.py: Thread-safe output frame storage
# Livepeer network
ORCHESTRATOR_URL=https://orchestrator.example.com:8936
SIGNER_URL=https://signer.eliteencoder.net # optionalpip install -r tests/requirements.txt
pytest tests/livepeer-ai-nodes/
├── nodes/
│ ├── frame_nodes.py # All 5 trickle streaming nodes
│ ├── stream/ # Streaming internals (5 modules)
│ │ ├── network_controller.py
│ │ ├── network_subscriber.py
│ │ ├── frame_bridge.py
│ │ ├── credentials.py
│ │ └── trickle_output_bridge.py
│ └── js/ # Empty (UI extensions removed)
├── workflows/ # Example workflow
├── tests/ # Test framework
└── docs/ # Documentation
- Check ComfyUI console for import errors
- Verify Python dependencies:
pip install -r requirements.txt - Clear Python cache: delete all
__pycache__folders - Restart ComfyUI
- Verify orchestrator URL is accessible (https required)
- Check signer URL if authentication required
- Look for errors in ComfyUI console
- Check orchestrator logs
- Ensure
publish_urlis connected fromStartTrickleStreamtoTrickleFrameInput - Check if stream is healthy in logs
- Verify frames are reaching the FrameBridge (check queue depth logs)
[Your License Here]
Built with: