Nodes/VELVET VICE — KREA/VELVET VICE KREA — Prompt-First Gate
ComfyUI Node

VELVET VICE KREA — Prompt-First Gate

The gate that keeps Krea's models from loading early

By Velvet-Vice·Created 2 months ago·Updated 28 days ago· 2
VELVET VICE KREA — Prompt-First Gate
  • workflow_mode
  • create_model
  • create_clip
  • create_vae
  • native_model
  • native_clip
  • native_vae
  • classic_model
  • classic_clip
  • classic_vae
  • native_preprocessed_image
  • native_original_latent
  • prompt
  • create_model
  • create_clip
  • create_vae
  • native_model
  • native_clip
  • native_vae
  • classic_model
  • classic_clip
  • classic_vae
  • native_preprocessed_image
  • native_original_latent
  • active_branch
◄prompt—►

"VELVET VICE KREA - Prompt-First Gate" is where the Velvet Vice workflow's performance discipline actually lives. This is the node that makes sure Krea's diffusion models don't load a second too early. It holds three complete branches of model/CLIP/VAE trios - CREATE, Native Edit, Classic Img2Img - plus Native Edit's preprocessing image and latent, and it refuses to resolve any of them until the prompt has passed the Ollama release barrier. Then, and only then, it pulls the resources for the selected branch. Nothing else. The description in the source puts it bluntly: "Branch outputs stay physically separate so models can never cross between modes."

Why the gate matters

The workflow's whole design is "prompt first, render second." In ASSISTED mode, the Prompt Director runs a Qwen LLM through Ollama, and that model is sitting in VRAM. If Krea's UNET started loading at the same time, the two would fight over memory. The gate is what enforces the ordering: its inputs are lazy, so ComfyUI doesn't resolve them until the node asks, and the node doesn't ask until the prompt (which is upstream of everything) has already been produced and its release confirmed by the Ollama Release Barrier.

There's a subtler point buried in the source, and it's the kind of detail that only shows up after a real bug: if branch resources were in the required inputs, ComfyUI would fail validation when a bypassed branch's link vanishes. So they're marked optional and lazy - validation survives, and the node's check_lazy_status still requests exactly the resources belonging to the active mode. That's a genuinely careful piece of plumbing, and it's why the workflow loads cleanly even with three of four branches bypassed.

Inputs and outputs

Two inputs are the gate's brains:

  • prompt - a STRING (forceInput), the prompt from the Release Barrier.
  • workflow_mode - a VELVET_VICE_KREA_MODE, from the Mode Selector.

Then the resource inputs, all lazy and all optional: create_model/create_clip/create_vae, native_model/native_clip/native_vae, classic_model/classic_clip/classic_vae, plus native_preprocessed_image and native_original_latent (gated because Native Edit's preprocessing depends on its own model/VAE).

Outputs mirror them - prompt through, the three branch trios, the two Native Edit preprocess values, and active_branch. Only the active branch's trio comes out populated; the rest are None. You wire the active branch's outputs into its sampler stack.

Installing and the failure you'll meet

cd ComfyUI/custom_nodes
git clone https://github.com/Velvet-Vice/velvet-vice-krea

Restart ComfyUI, or search "VELVET VICE - KREA" in ComfyUI Manager. No pip dependencies.

If you see "selected render inputs for CREATE were not resolved," it means the gate fired but a required branch input never arrived - most often because you're running the branch manually and haven't connected its model loader, or the model loader is still on the "SELECT KREA 2 MODEL" placeholder. The gate is deliberately strict: it would rather fail loudly than let a branch run with a missing piece. Check the branch's Model Loader and CLIP/VAE wiring, and remember only the branch you're executing needs to be fully connected.

CategoryVELVET VICE/KREA 2

Inputs (13)

NameTypeDefaultDescription
promptSTRING—
workflow_modeVELVET_VICE_KREA_MODE—
create_modeloptMODEL—
create_clipoptCLIP—
create_vaeoptVAE—
native_modeloptMODEL—
native_clipoptCLIP—
native_vaeoptVAE—
classic_modeloptMODEL—
classic_clipoptCLIP—
classic_vaeoptVAE—
native_preprocessed_imageoptIMAGE—
native_original_latentoptLATENT—

Outputs (13)

NameTypeDescription
promptSTRING—
create_modelMODEL—
create_clipCLIP—
create_vaeVAE—
native_modelMODEL—
native_clipCLIP—
native_vaeVAE—
classic_modelMODEL—
classic_clipCLIP—
classic_vaeVAE—
native_preprocessed_imageIMAGE—
native_original_latentLATENT—
active_branchSTRING—