Instructions to use cukrus/qwen3-4b-remote-text-encoder with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use cukrus/qwen3-4b-remote-text-encoder with Diffusers:
pip install -U diffusers transformers accelerate
import torch from diffusers import DiffusionPipeline # switch to "mps" for apple devices pipe = DiffusionPipeline.from_pretrained("cukrus/qwen3-4b-remote-text-encoder", dtype=torch.bfloat16, device_map="cuda") prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" image = pipe(prompt).images[0] - Notebooks
- Google Colab
- Kaggle
Download client_example.py from cukrus/qwen3-4b-remote-text-encoder: direct link, hf CLI and curl.
- Browser
- Download file 2.31 kB
-
https://huggingface.co/cukrus/qwen3-4b-remote-text-encoder/resolve/main/client_example.py
- Command line
-
hf download hf://cukrus/qwen3-4b-remote-text-encoder/client_example.py
-
curl -L -o client_example.py https://huggingface.co/cukrus/qwen3-4b-remote-text-encoder/resolve/main/client_example.py
2.31 kB
| # example client - gets prompt embeds from encode-server.py, runs the pipeline on the gpu | |
| # | |
| # python client_example.py zimage "a red fox standing in fresh snow" -o fox.png | |
| # python client_example.py klein "make the car red" --image car.png -o red.png | |
| import argparse | |
| import json | |
| import os | |
| import urllib.request | |
| import torch | |
| from safetensors.torch import load | |
| ENCODER_URL = os.environ.get("ENCODER_URL", "http://localhost:8090/v1/encode") | |
| MODELS = { | |
| "zimage": "unsloth/Z-Image-Turbo-unsloth-bnb-4bit", | |
| "klein": "cukrus/FLUX.2-klein-4B-bnb-nf4", | |
| } | |
| def get_embeds(prompt, mode): | |
| body = json.dumps({"prompt": prompt, "mode": mode}).encode() | |
| req = urllib.request.Request(ENCODER_URL, data=body, headers={"Content-Type": "application/json"}) | |
| with urllib.request.urlopen(req, timeout=120) as r: | |
| print("encode:", r.headers["X-Encode-Seconds"], "s, cache", r.headers["X-Cache"]) | |
| return load(r.read())["prompt_embeds"].to("cuda") | |
| ap = argparse.ArgumentParser() | |
| ap.add_argument("mode", choices=MODELS) | |
| ap.add_argument("prompt") | |
| ap.add_argument("--image", action="append") # klein only, up to 3 | |
| ap.add_argument("--seed", type=int, default=4200) | |
| ap.add_argument("-o", "--out", default="out.png") | |
| args = ap.parse_args() | |
| emb = get_embeds(args.prompt, args.mode) | |
| gen = torch.Generator("cuda").manual_seed(args.seed) | |
| if args.mode == "zimage": | |
| from diffusers import ZImagePipeline | |
| pipe = ZImagePipeline.from_pretrained(MODELS["zimage"], text_encoder=None, tokenizer=None, | |
| torch_dtype=torch.bfloat16).to("cuda") | |
| # list with one (n, 2560) tensor per prompt | |
| img = pipe(prompt_embeds=[emb], num_inference_steps=9, guidance_scale=0.0, generator=gen).images[0] | |
| else: | |
| from diffusers import Flux2KleinPipeline | |
| from diffusers.utils import load_image | |
| pipe = Flux2KleinPipeline.from_pretrained(MODELS["klein"], text_encoder=None, tokenizer=None, | |
| torch_dtype=torch.bfloat16).to("cuda") | |
| refs = [load_image(p) for p in args.image] if args.image else None | |
| # (512, 7680) -> (1, 512, 7680) | |
| img = pipe(prompt_embeds=emb[None], image=refs, num_inference_steps=4, guidance_scale=1.0, | |
| generator=gen).images[0] | |
| img.save(args.out) | |
| print("saved", args.out) | |