Skip to content

How it works · Working knowledge

Lens Turbo text to image: mechanisms and practical controls

Receive a Generated images batch from a written description, starting with 2 megapixels, one image and the saved four-step Turbo setup.

Make new still images from text with this recipe's fixed Lens Turbo model, GPT-OSS text encoder and FLUX.2 VAE.

Input: textOutput: imageComfyUI

Before you start

  • Positive prompt: Describe the subject, setting, composition and style. Put desired lettering in quotation marks. The retained example requests signs reading ComfyUI and Lens, but no executed result establishes lettering accuracy.

Start with one generated image

Start in Lens Turbo text to image, version 0.1.6. No uploaded image is required. For an initial run, use square proportions, 2 megapixels and one image. The saved sampling baseline is CFG 1, four steps, Euler, simple scheduler, Add noise enabled and Denoise 1.

The named output is Generated images (output:43). It returns the batch through node 43, SweetTeaPreviewImage, whose images input receives node 51 output slot 0. Despite metadata identifying the original terminal as SaveImage, the retained terminal is the no-permanent-save output transport. Retain any result you need separately.

  1. Replace the positive prompt with your subject, setting, composition and visual style. Put desired lettering in quotation marks, without assuming exact text rendering.

    Look for: Node 60 encodes your text into the sampler's positive conditioning.

  2. Run the Pipe, inspect the Generated images batch, and retain any result you need.

    Look for: The decoded image batch is returned through Generated images rather than permanently saved by the output stage.

    Outputs: output:43

Have the exact files and required nodes available

The retained preparation lists four required components: lens_turbo_bf16.safetensors, gpt_oss_20b_nvfp4.safetensors, flux2-vae.safetensors, and tea-time-labs/sweet-tea-nodes. The three model claims share one prerequisite Resource identity; they remain three distinct required files, not alternatives. These prerequisite Resources are not executable fallback recipes.

The fixed loader configuration is:

NodeClassFile and directoryOther saved settings
55UNETLoaderdiffusion_models/lens_turbo_bf16.safetensorsweight_dtype=default
61CLIPLoadertext_encoders/gpt_oss_20b_nvfp4.safetensorstype=lens, device=default
66VAELoadervae/flux2-vae.safetensors—

These loaders exist in the graph but are not exposed as model-selection controls in the Pipe. File choices are resolved from the runtime. The model claims identify provider version main but retain no model artifact checksums; the node pack has no pinned commit or registry version. Core-node metadata records version 0.22.0, not a demonstrated minimum compatible runtime.

No scoped GPU capacity, system RAM recommendation, comparable timing, backend or platform requirement is retained. The preparation's nominal 1024×1024 workload is not the graph's saved 2-megapixel configuration and is not a capacity estimate for this start point.

A required model or node cannot be loaded.

The graph needs its named loader assets and node classes before it can produce an image.

Check: All three model files and the Sweet Tea node pack are required; their presence does not by itself establish runtime compatibility.

Check the exact filenames in the listed directories and availability of the graph's required node classes. Keep CLIPLoader type lens. The retained evidence does not establish interchangeable models or a minimum runtime version.

How text and dimensions reach the image output

Node 61 supplies the encoder to both CLIPTextEncode nodes: 60 encodes the positive text, while 62 encodes the negative text, empty in the saved graph. Their slot-0 CONDITIONING outputs feed node 52's positive and negative inputs. The loader's CLIP type name does not mean this recipe selects an ordinary CLIP text-encoder file: its saved file is the GPT-OSS encoder listed above.

Node 35 (ResolutionSelector) combines aspect ratio and megapixels. Its width and height outputs, slots 0 and 1, pass through PrimitiveInt nodes 57 and 59, then through ComfyMathExpression nodes 56 and 58 using a & -8. This rounds positive dimensions down to multiples of eight. The expressions' INT outputs, slot 1, feed both node 65's empty latent dimensions and node 54's model-sampling dimensions. Follow these connections rather than stale numeric widget displays or proxy labels: node 59 receives height even though its retained proxy label says width. Change size at node 35, not by overwriting connected inputs. The megapixel value is an approximate target, not an exact delivered pixel count.

The model path is 55 → 54 (ModelSamplingFlux) → 53 (CFGNorm) → node 52's model. Node 64 (BasicScheduler) instead takes its model directly from 54 and supplies node 52's sigmas. Node 63 supplies its sampler; node 65 supplies its latent_image. Node 52 (SamplerCustom) has two LATENT outputs, but only slot 0 feeds node 51 (VAEDecode). Node 66 supplies that decoder's vae, and node 51's IMAGE output reaches node 43.

This is text-to-image generation from an empty latent. There is no uploaded-image, mask, compositing or reference-conditioning path. Although the port contract labels image_count with role source_image, its real binding is the integer 65.batch_size, not an image upload.

Choose proportions, pixel budget and batch size

Aspect ratio maps to 35.aspect_ratio, saved as 1:1 (Square). The retained note recommends proportions from 1:2 to 2:1 but does not enumerate exact runtime option strings beyond the saved square option. Choose an available ratio in the UI rather than inventing a native option value.

Megapixels maps to 35.megapixels, saved as 2, with range 0.1–16 and step 0.1. Image count maps to 65.batch_size, saved as 1, with range 1–4096. These are schema limits, not a promise that the largest settings fit your hardware. More pixels and larger batches require more memory. All batch images use the same prompt and size and return through the same output.

Changing size also changes the dimensions supplied to resolution-dependent model sampling; it is not merely resizing an already generated image.

Try a 1-megapixel budget
Reduces the saved target pixel budget while retaining the selected proportions. Dimensions remain rounded; no numerical memory saving is established.
Return to one image
Sets the empty latent batch to one image, avoiding the added memory demand of a larger batch.

Generation runs out of memory after increasing size or image count.

Larger dimensions and batches increase memory demand.

Check: Node 51 is ordinary VAEDecode, not VAEDecodeTiled; this recipe exposes no tile-size input.

Return to one image and reduce megapixels. Identify whether failure occurs during model loading, sampling or decoding before choosing a stage-specific remedy. This pack supplies no guaranteed fitting size, and a tiled-decoding control cannot be applied to node 51 as retained.

Keep a baseline, then change sampling deliberately

The default path adds seed-dependent noise to an empty latent. 52.add_noise=true enables that initialization; disabling it removes the seeded noise initialization. 64.denoise=1 uses the full schedule. Lower values reduce the schedule, not preserve an original image. Denoise accepts 0–1 in 0.01 increments.

The seed UI defaults to -1 and describes this as randomizing each run. Native 52.noise_seed, however, requires a nonnegative integer; the saved graph contains 455122126103069. The widget also retains a non-runtime randomize setting. Treat -1 as a UI convention, not a valid native input delta: the conversion implementation is not retained. For comparisons, select fixed-seed behavior in the client and submit a nonnegative seed. Setting the native seed alone does not establish that a client will stop randomizing it, nor guarantee cross-runtime reproducibility.

52.cfg defaults to 1 (range 0–100, step 0.1). At 1, negative text in 62.text has no effect even though its conditioning connection exists. Above 1, negative text participates in guidance and can change appearance; it is not a guaranteed exclusion filter. The saved negative text is empty.

64.steps=4, 63.sampler_name=euler and 64.scheduler=simple are the recommended Turbo combination in the retained source. Steps accepts 1–10000. Increasing it costs more processing and is experimental, not an established quality improvement. Sampler and scheduler alternatives come from the runtime; their option lists are not retained.

Submit the saved nonnegative seed
Sets the native noise seed to 455122126103069. For repeated comparisons, also use fixed-seed behavior in the client; this delta does not change a client randomization policy.
Restore recommended CFG
Returns CFG to 1; negative-prompt text then has no effect.
Restore four steps
Returns the step count to the recommended Turbo baseline; Euler and simple remain separate settings.
Restore seeded noise initialization
Enables noise initialization for the default empty-latent text-to-image path.
Restore the full schedule
Sets Denoise to 1. This restores the generation schedule, not an image-preservation path.

Do you want the recommended baseline or negative-prompt guidance?

  • Recommended baseline: Keep CFG 1 and focus on the positive description; negative text will not affect the result.Continue
  • Experiment above CFG 1: Use negative text with guidance above 1 and compare with a fixed seed. Inspect appearance rather than assuming improvement.Continue

Changing the negative prompt makes no difference.

At the default CFG 1, the negative prompt has no effect.

Check: Negative conditioning is connected; this behavior is not evidence of a missing graph connection.

Revise the positive prompt at the baseline, or deliberately experiment with CFG above 1 and negative text while holding other settings fixed.

Lowering denoise does not retain an existing image.

The sampler receives an empty latent from node 65, not an encoded uploaded image.

Check: There is no source-image input path in this graph.

Restore Denoise 1 for normal text-to-image generation. If image editing or original-pixel preservation is required, choose a recipe with an established input and output path for that task; no executable fallback recipe is retained here.

Understand normalization and resolution-dependent shifts

53.strength is exposed as Guidance normalization strength, saved at 1, with range 0–100 and step 0.01. It configures the model's guidance-normalization patch. The retained evidence does not establish a monotonic visual effect for increasing it.

53.pre_cfg, exposed as Normalize before CFG, defaults to false. False uses post-CFG, x0-space attenuation only. True rescales combined noise before the sampler's CFG combination without clamping and can amplify it. This changes where and how normalization operates; it is not simply a stronger version of the default. The schema tooltip describes the true mode as matching norm-scaled CFG used by models such as Lens, but this recipe actually saves false. Start from the saved configuration rather than silently changing that choice.

Node 54 receives the same rounded dimensions as latent creation. Its base_shift=0.5 and max_shift=1.15 configure resolution-dependent model sampling. Both accept 0–100 in 0.01 increments. The retained notes establish their relationship to dimensions, but not the formula or a reliable visual direction for arbitrary changes. Keep these saved values while learning prompt and size behavior; do not override the connected width and height inputs.

Try normalization before CFG
Switches from post-CFG attenuation to unclamped normalization before CFG combination, which can amplify combined noise. This is an experiment, not an established quality upgrade.
Restore post-CFG attenuation
Returns normalization placement to the saved attenuation-only behavior. Strength is separate and remains unchanged by this control.

Appearance changes unexpectedly after advanced sampling experiments.

CFG, normalization placement and resolution-dependent shifts configure different parts of the sampling path.

Check: Pre-CFG normalization can amplify; the saved post-CFG mode uses attenuation only. Neither establishes a guaranteed visual improvement.

Restore CFG 1, normalization strength 1, Normalize before CFG false, base shift 0.5 and maximum shift 1.15. Also restore four steps, Euler, simple, Add noise true and Denoise 1. Compare subsequent changes one at a time with fixed-seed behavior and the same prompt, size and batch count.

Where this approach stops

  • Uploaded-image editing or original-pixel preservation
  • Video generation
  • Quantified memory or timing predictions
  • Model substitution through the exposed Pipe controls

Sources