gizai:imagegen
the image models of the catalog (FLUX.3 klein, Z-Image, Krea 2) on this computer: their files, their requests as giz's workers and the OpenAI images API take them, and a worker of one (serveImages).
import * as Imagegen from "gizai:imagegen";Types
ImageModel
type ImageModel = { name: string; hub: Hub.Hub; gpu: Gpu; klein: Vec<D.Klein>; zimage: Vec<D.ZImagePipeline>; krea: Vec<D.Krea2Pipeline>; edit: string; sheet: string; tunings: string; need: ImageNeed; upsampler: Ref<i64>; }An image model on a GPU, making images from an ImageRequest (make): FLUX.3 klein (klein: gizai:diffusion's
pipeline of its text encoder, Qwen3-VL-4B's first layers, and its VAE), Z-Image Turbo (zimage) or Krea 2 Turbo
(krea); one of the three holds the model.
name:stringhub:gizlang_hub.Hubgpu:M10.Gpuklein:Vec<M22.Klein>zimage:Vec<M22.ZImagePipeline>krea:Vec<M22.Krea2Pipeline>edit:stringsheet:stringtunings:stringneed:M31.ImageNeedupsampler:Ref<i64>
ImageRequest
type ImageRequest = { prompt: string; pictures: Vec<Image.Image>; width: i64; height: i64; megapixels: f64; steps: i64; seed: i64; count: i64; cache: f64; refresh: i64; upsample: bool; workflow: string; mask: Vec<Image.Image>; margins: Vec<i64>; negative: string; guide: Vec<f64>; }What is asked of an image model: the prompt; the pictures to edit (at most 4; none: text to image); the size,
width × height pixels (multiples of 16, at most 4 megapixels; 0: 1024 × 1024 for text to image, else the first
picture's aspect at megapixels); the steps (0: the model's, 16 for klein, 8 for Z-Image and Krea 2); seed: the first of count images' noise
seeds (seed, seed + 1, ...: the same seed gives ComfyUI's image, D.fluxNoise); cache, the step cache's limit
(0 to 0.5: more is faster and a little less exact); refresh, the steps between the pictures' key and value updates
(0: never needed); and upsample, the prompt written out in full by BFL's upsampler first.
prompt:stringpictures:Vec<gizlang_image.Image>width:i64height:i64megapixels:f64steps:i64seed:i64count:i64cache:f64refresh:i64upsample:boolworkflow:stringmask:Vec<gizlang_image.Image>margins:Vec<i64>negative:stringguide:Vec<f64>
ImageOutput
type ImageOutput = { extension: string; quality: i64; }How images are written: the file extension ("webp", "png" or "jpg") and the WebP or JPEG quality.
extension:stringquality:i64
ImageNeed
type ImageNeed = { fixed: i64; perRow: i64; perToken: i64; }What a request needs beside the model, measured at load (measure): for its steps, fixed bytes and perRow bytes
for each row of its joint sequence (the image's tokens, the text's and the pictures'); for its decode, perToken
bytes for each image token the decoder holds at once (at most D.IMAGE_WHOLE: a larger image decodes in tiles).
fixed:i64perRow:i64perToken:i64
Made
type Made = { images: Vec<Image.Image>; prompt: string; }What make made: the images, and the prompt they were made from (the upsampler's when upsample).
images:Vec<gizlang_image.Image>prompt:string
Functions
image
function image(hub: Hub.Hub, name: string, gpu: Gpu): ImageModel throws stringThe image model of name (find) on gpu.
Effects: fail, read, write, console, io.
imageRequest
function imageRequest(prompt: string): ImageRequestA text-to-image request for prompt with every other setting at its default.
Effects: fail.
checkImage
function checkImage(r: ImageRequest): bool throws stringWhether r is a request an image model takes: the one place that says what is too big, too many or out of range.
Effects: fail.
imageRequestOf
function imageRequestOf(j: JsonValue, pictures: Vec<Image.Image>, seed0: i64): ImageRequest throws stringThe request of a JSON object (or a form's text fields) and the pictures that came with it: prompt, size
("WIDTHxHEIGHT") or width and height, megapixels, steps, seed (seed0 when none), count, n or numberResults,
stepCache, refresh and upsample. It is not checked (checkImage).
Effects: fail.
outpaintMargins
function outpaintMargins(percents: string, ratio: string, width: i64, height: i64): Vec<i64> throws stringThe outpaint margins of a width x height picture in pixels (top, bottom, left, right): percents, "T B L R" of
the height and width ("": 10 each, at least one above 0); ratio, WIDTH:HEIGHT ("": none), widens the two smaller
margins to it. Each is a multiple of 16, at least 16 where it is above 0.
Effects: fail.
imageOutputOf
function imageOutputOf(j: JsonValue): ImageOutput throws stringThe output of a request's outputFormat (or OpenAI's output_format): webp (the default, a tenth of a PNG's bytes),
png or jpeg, at outputQuality (or output_compression; 90).
Effects: fail.
serveImages
function serveImages(sys: System, hub: Hub.Hub, name: string, place: Hosting.Place, capacity: i64 = 4): i64 throws stringServes image model name of hub as giz's inference worker at place: operation image.generate, capacity
jobs held. It returns when the worker stops.
Effects: fail, read, write, console, io.
Methods
ImageOutput.encode
function ImageOutput.encode(self: ImageOutput, image: Image.Image): bytesimage in the output's format.
Effects: fail.
ImageModel.caption
function ImageModel.caption(self: ImageModel, sys: System, r: ImageRequest): Result<string, string>The fuller prompt that the upsampler writes for r. It loads beside the model on the model's Gpu, so the model's
pool of dropped buffers goes back first, and its own buffers go back after; it needs what it took at its last use
(Gpu.peak), or before that its files' bytes, and where that does not fit this is NO_ROOM.
Effects: fail, read, write, console, io.
ImageModel.probe
function ImageModel.probe(self: ImageModel, sys: System, side: i64): Result<Vec<i64>, string>Of one step and the decode of a side × side text-to-image job: the rows, the device bytes (Gpu.peak) of the step,
the device bytes of the decode, and the image's tokens.
Effects: fail, read, write, console, io.
ImageModel.takes
function ImageModel.takes(self: ImageModel, r: ImageRequest): bool throws stringWhether this model takes r: Z-Image makes images from text only, Krea 2 from text or by a picture workflow,
FLUX.3 klein from text and pictures without a workflow.
Effects: fail.
ImageModel.paint
function ImageModel.paint(self: ImageModel, sys: System, r: ImageRequest, i: i64, progress: (step: i64, total: i64) => bool, probe: bool = false, text: string = ""): Painted throws stringImage i of request r (its seed r.seed + i): the model's text rows of the prompt text, then its steps (progress
hears the step done and the steps), then the decode. It fails where the request does not fit the GPU beside the
model (fits), but for the probe that measures that.
Effects: fail, read, write, console, io.
ImageModel.adapter
function ImageModel.adapter(self: ImageModel, r: ImageRequest): stringThe LoRA of r's workflow ("": none).
ImageModel.stepped
function ImageModel.stepped(self: ImageModel, probe: bool): i64For a probe, the device peak of the steps just run; the pool is then trimmed and the peak reset, so that the
decode's peak counts only what it holds. Else 0.
Effects: fail, read, write, io.
ImageModel.measure
function ImageModel.measure(self: ImageModel, sys: System): ImageNeed throws stringWhat a request needs on this GPU, measured: a 512² and a 1024² job; the bytes of a step for each row between them, and the bytes of the 1024² decode for each token.
Effects: fail, read, write, console, io.
ImageModel.fits
function ImageModel.fits(self: ImageModel, rows: i64, width: i64, height: i64, pictures: i64): Result<bool, string>Whether a job of rows (a width × height image with pictures) fits the GPU beside the model now: the more of
its steps' need and its decode's (ImageNeed; Gpu.fits). A job that does not would stop the program in Gpu.bytes; it is refused with what to change instead.
Effects: fail, read, write, io.
ImageModel.make
function ImageModel.make(self: ImageModel, sys: System, r: ImageRequest, progress: (stage: string, step: i64, total: i64) => bool): Made throws stringThe images of request r (checkImage): count of them in turn, from the seeds seed, seed + 1 and on. progress
is told the stage ("encoding_prompt", then "generating"), the step done and the steps in all; when it returns false
make stops with CANCELLED. The tunings of the kernels it made are kept for the next start.
Effects: fail, read, write, console, io.
Constants
CANCELLED
const CANCELLED = "cancelled"The error make gives when its progress callback says to stop.
NO_ROOM
const NO_ROOM = "no room for the prompt upsampler beside the model on this GPU"The error make gives when the upsampler does not fit beside the model (the request can go without it).
TOO_LARGE
const TOO_LARGE = "too large for this GPU"The start of the error make gives for a request that does not fit the GPU beside the model (a smaller size or fewer
pictures would).