Nodes/ComfyUI-BAGEL/BAGEL Text to Image
ComfyUI Node

BAGEL Text to Image

GPT-4o-style native generation, on your GPU

By neverbiasu·Created about a year ago·Updated 18 days ago· 188
BAGEL Text to Image
  • model
  • latent
  • reasoning
promptA female cosplayer portraying an ethereal fairy or elf, wearing a flowing dress made of delicate fabrics in soft, mystical colors like emerald green and silver. She has pointed ears, a gentle, enchanting expression, and her outfit is adorned with sparkling jewels and intricate patterns. The background is a magical forest with glowing plants, mystical creatures, and a serene atmosphere.
width1024
height1024
cfg_text_scale4.0
cfg_interval0.4
timestep_shift3.0
num_timesteps50
cfg_renorm_min0.0
cfg_renorm_typeglobal
show_thinkingfalse
max_think_tokens1024
do_samplefalse
text_temperature0.3
seed0

BAGEL Text to Image is where the magic is easiest to see: you type a long, specific sentence and the model writes the image the way GPT-4o does - no diffusion checkpoint, no sampler dance, no negative prompt. ByteDance Seed trained BAGEL-7B-MoT as a unified multimodal model (7B active, 14B total, mixture-of-transformers) that does text-to-image, image editing, and image understanding with one set of weights. Released spring 2025 as the open-source answer to GPT-4o's native image generation, it's the kind of model that made people say "it mogs Flux" in the release thread - and for prompt adherence, it kind of does. This node is that model's text-to-image path, wrapped for ComfyUI by the neverbiasu/ComfyUI-BAGEL pack.

How it works

BAGEL doesn't hand you a finished image. It generates a standard ComfyUI LATENT - the node is deliberately VAE-decoupled, so it never loads the autoencoder itself. You decode downstream with the official VAEDecode node and the FLUX ae.safetensors. That's the same VAE BAGEL was trained on, so wiring it up is: this node → VAEDecode → preview/save.

Inside, it builds three parallel contexts before sampling: a text-conditioned context, an image-conditioned one (fixed internally for text-to-image), and the full prompt context, then runs its denoiser with your CFG settings. It can even "think" first - with show_thinking on, it writes planning text between <think> tags before sampling, and returns that as the reasoning output.

The inputs that matter

  • prompt - the whole point. BAGEL rewards natural, specific language; the official style is long sentences, not comma soup.
  • width / height - 256–1024, stepped in 16. These are the ComfyUI version of the official app's ratio presets, so treat 1024×1024 as the default and 16-aligned dimensions as a rule, not a suggestion.
  • cfg_text_scale (default 4) - how hard it follows the prompt; the official app recommends 4.0–8.0. This is the dial you'll actually touch.
  • cfg_interval (default 0.4) - start of the CFG interval, end fixed at 1.0. Leave it alone until you have a reason not to.
  • timestep_shift (default 3) - higher favors layout, lower favors fine detail.
  • num_timesteps (default 50) - total denoising steps; more steps, slower, sharper.
  • seed - 0 leaves it unset (matches the official app), any positive value is reproducible.
  • The show_thinking / max_think_tokens / do_sample / text_temperature cluster - enable thinking and it plans before generating; temperature 0.3 is the sensible default.

Outputs: latent (LATENT, wire to VAEDecode with the FLUX AE) and reasoning (STRING, only populated when thinking is on).

Installing and the VRAM reality

Same shared setup as the rest of the pack: clone https://github.com/neverbiasu/ComfyUI-BAGEL into custom_nodes, pip install -r requirements.txt, put the single-file BAGEL .safetensors in models/bagel/ and FLUX ae.safetensors in models/vae/, restart. ComfyUI Manager search "ComfyUI-BAGEL" works too. The example workflow bagel_text_to_image.json shows the whole graph.

Where people get burned: this node is heavy. The README flags BF16 as A100-class, and the community consensus is that 16–24 GB cards should reach for the FP8/INT8/NF4 variants rather than fighting the full-precision checkpoint. If you get OOM on a 4090, that's not a bug - that's BAGEL. Grab a quantized model from the 6chan collection and the same workflow will run.

Also worth knowing: the generation-side capability lives on the model, not the node. If you load a variant without text-to-image support, the node refuses before wasting a GPU cycle. That's a nice touch in a pack this fiddly.

CategoryBAGEL/Generation

Inputs (15)

NameTypeDefaultDescription
modelBAGEL_MODELNative BAGEL model from BAGEL Model Loader.
promptSTRINGA female cosplayer portraying an ethereal fairy or elf, wearing a flowing dress made of delicate fabrics in soft, mystical colors like emerald green and silver. She has pointed ears, a gentle, enchanting expression, and her outfit is adorned with sparkling jewels and intricate patterns. The background is a magical forest with glowing plants, mystical creatures, and a serene atmosphere.Text prompt for image generation.
widthINT1024256–1024Output width. This is the ComfyUI equivalent of the official app's image-ratio preset; use 16-pixel aligned dimensions.
heightINT1024256–1024Output height. This is the ComfyUI equivalent of the official app's image-ratio preset; use 16-pixel aligned dimensions.
cfg_text_scaleFLOAT4.01–8Controls how strongly BAGEL follows the text prompt; the official app recommends 4.0–8.0.
cfg_intervalFLOAT0.40–1Start of the CFG interval. The end is fixed at 1.0, matching the official app.
timestep_shiftFLOAT3.01–5Shifts denoising-step allocation: higher favours layout, lower favours detail.
num_timestepsINT5010–100Total denoising steps.
cfg_renorm_minFLOAT0.00–1CFG-Renorm minimum. 1.0 disables CFG-Renorm.
cfg_renorm_typeCOMBOglobalCFG-Renorm method. global is the official text-to-image default.
show_thinkingBOOLEANfalseGenerate and return the model planning text before image sampling.
max_think_tokensINT102464–4096Maximum planning tokens when Thinking is enabled.
do_sampleBOOLEANfalseEnable sampling for planning-text generation when Thinking is enabled.
text_temperatureFLOAT0.30.1–1Planning-text randomness when Thinking is enabled.
seedINT00–10000000 leaves the seed unset, matching the official app; positive values are reproducible.

Outputs (2)

NameTypeDescription
latentLATENT
reasoningSTRING