XFuser SamplerCustom
Full control of your Raylight sampling, manually
- ray_actors
- positive
- negative
- sampler
- sigmas
- latent_image
- latent
- ray_actors
ComfyUI's custom-sampling nodes exist because the built-in KSampler hides the plumbing. XFuser SamplerCustom is Raylight's version of that: instead of choosing a sampler_name and scheduler from a dropdown, you feed it a SAMPLER object and a SIGMAS schedule built by the nodes upstream, and it runs the actual denoising across your Ray workers. Same spirit as the native SamplerCustom, but the work happens on your GPUs in parallel.
Raylight is Komikndr's multi-GPU pack - the "two 5070s instead of a 5090" thing. USP splits the sequence, FSDP splits the weights. This node sits under Raylight/extra/custom_sampling/samplers, and it's the middle option in a family of three: XFuser SamplerCustom (this one, with a single seed), XFuser SamplerCustom Advanced (takes a Ray guider instead of positive/negative + cfg), and the Unified variants (which add data-parallel list inputs).
How it works
You wire it like the native custom sampler: a sampler object (from a sampler-selector node) and sigmas (from a scheduler node like the Karras or simple scheduler) feed in, along with positive and negative conditioning, cfg, an add_noise boolean, a noise_seed, and the latent_image. Plus ray_actors - the model chain. The node bundles it all up, sends a custom_sampler_advanced remote call to every worker, gathers the latents back, and clears worker VRAM afterward. Outputs are latent and the ray_actors passthrough.
The manual SIGMAS chain is the whole point. Want a custom noise schedule, a weird sampler-scheduler combo, or to bake in start_at_step/end_at_step logic with your own nodes? This is where you do it. If you just want KSampler behavior with less fiddling, the plain XFuser KSampler (Advanced) is the better starting point - use this when you actually want the control.
The input that matters
- cfg - a single float, same as the native node. For the distilled models Raylight targets (Wan with speed LoRAs, etc.) you'll usually park it at 1, where ComfyUI skips the negative pass for a free speed win. The default of 8 is an SDXL habit.
Install
Same as every Raylight node:
cd ComfyUI/custom_nodes
git clone https://github.com/komikndr/raylight
cd raylight
<your_python> -m pip install -r requirements.txt
or ComfyUI Manager → search raylight. Dependencies are the pack's usual ray + xfuser set.
Common issues
Two things bite. First, the SAMPLER/SIGMAS nodes must be ComfyUI's native ones and the SIGMAS must be a list the workers can consume - a scheduler feeding a scalar will fail. Second, this node is per-seed, single-output: if you're chasing data-parallel (different prompt/seed per GPU), this isn't the sampler you want - the Unified Parallel Sampler family takes a noise_list for exactly that. Reach for the right tool and the "instantly finished / garbage output" class of bugs mostly disappears.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| ray_actors | RAY_ACTORS | — | |
| add_noise | BOOLEAN | true | — |
| noise_seed | INT | 00–18446744073709550000 | — |
| cfg | FLOAT | 8.00–100 | — |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| sampler | SAMPLER | — | |
| sigmas | SIGMAS | — | |
| latent_image | LATENT | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| ray_actors | RAY_ACTORS | — |