TS Super Prompt RT
Prompt enhancement on Google's phone runtime — twice as fast, a fifth of the VRAM
- images
- audio
- text
TS Super Prompt RT is the prompt-enhancer node from Timesaver running on a different engine than everything else: Gemma 4 through Google's LiteRT-LM, the on-device runtime behind AI Edge - the stack meant for phones, not your 3090. Measured on the author's laptop it does 43 tokens/s against 20 for the transformers path, sits at ~1.7 GB of VRAM against 8.5, and the same model both writes the prompt and transcribes speech, so there's no Whisper in the chain at all.
Why you'd care: the local prompt enhancer is one of the most-used node types in this ecosystem - type a rough idea, a small model rewrites it into a structured, model-appropriate prompt, and that prompt feeds your text encoder. It's a popular pattern precisely because it's local: free per call, offline, uncensored. The RT version is the same job on a much lighter engine, which matters when the LLM is sharing your card with the diffusion model.
One switch, two jobs
high_quality picks between Gemma 4 E2B (2.4 GB, quicker) and E4B (3.4 GB, better prompts and a more careful ear). Because it's one model doing both the enhancement and the transcription, one switch decides both - there's no separate Whisper model to keep in sync. The weights pull from hfmaster/Gemma-4-RT into models/LLM/litert on first use, public and token-free, and they're the abliterated builds - refusal behaviour trained out, which matters when the node's whole job is writing prompts.
The other inputs: text is where recognised speech lands and the Enhance button replaces it with the written prompt; system_preset draws from the same preset set the Qwen node uses; keep_loaded is off by default and the tooltip says plainly why. The optional images socket takes up to four reference frames from the graph (each shrunk to 1024 px - every pixel costs context in a 4096-token window), and audio is a recording transcribed straight into a prompt. Output is the text STRING, wired into your text encoder.
The part that actually bites
LiteRT runs on WebGPU, not CUDA, and ComfyUI's memory manager can't see a byte of that memory - torch.cuda.mem_get_info reported the same free memory whether Gemma was resident or not. So the model is unloaded the moment the work is done (about a second), and keep_loaded trades a ~5 s reload for memory ComfyUI believes it still has - turn it on and the sampler that follows plans as if the card were free. That's why the default is off. The 4096-token context is the artifact's limit, not Gemma's, so a prompt that wouldn't fit is refused before the 3 GB download starts, and LiteRT holds one engine per process, so simultaneous requests queue and say so instead of looking frozen.
Windows and macOS only
LiteRT-LM publishes no Linux wheels, so it's deliberately not in requirements.txt - a hard dependency there would break install for every Linux box. On Linux the node loads and explains itself instead of failing obscurely; use the plain TS Super Prompt (transformers-based) there. On Windows or macOS you install the runtime separately:
python -m pip install litert-lm==0.16.1
Then the usual pack install: ComfyUI Manager → search "Timesaver", or cd ComfyUI/custom_nodes && git clone https://github.com/AlexYez/comfyui-timesaver, and restart.
Common issues
Where people get burned: installing the pack on Linux and wondering why this node won't run - it's the wheels, not you. And flipping keep_loaded on for speed, then watching a sampler OOM an hour later. Leave it off and let the second-per-call unload do its thing.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Prompt field: recognised speech lands here, and the Enhance button replaces the text with the written prompt. | |
| high_quality | BOOLEAN | false | Off: Gemma 4 E2B — quicker, 2.4 GB. On: E4B — better prompts and a more careful ear, 3.4 GB. The same model does both the prompt and the speech, so this one switch decides both. |
| system_preset | COMBO | Prompts enhance | System preset from qwen_3_vl_presets.json — the same set the Qwen node uses. |
| attached_image | STRING | Internal field: path of the image attached in the node. | |
| attached_image_2 | STRING | Internal field: path of the second attached image. | |
| keep_loaded | BOOLEAN | false | Off: the model leaves the card as soon as the prompt is written (about a second) and comes back in roughly five. On: it stays resident — faster on repeated presses, but ComfyUI CANNOT see this memory and will plan its own sampling as if the card were free. |
| imagesopt | IMAGE | Optional reference images from the graph. Takes precedence over images attached in the node. Up to four frames, each shrunk to 1024 px on the way in — every pixel costs context, and the window is 4096 tokens. | |
| audioopt | AUDIO | Optional recording to transcribe. The transcript replaces the text field before enhancement, so a spoken idea can go straight into a prompt. Longer recordings are transcribed in 30-second segments. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | Prompt text — enhanced when enhancement runs, otherwise passed through. |