Alt: Image captioning
Describe any image in one sentence, in English, Spanish, Portuguese, French, German, Arabic, Chinese, Japanese or Korean. Useful for alt text, search indexing and accessibility. Generated on-device, no image ever leaves the page.
Try Alt
Runs in this tab · nothing uploaded
Drop an image here
or click · PNG JPG WEBP
Caption
Caption will appear here…
What it does
One sentence for any image, in nine languages.
- LFM2.5-VL-450M (Liquid AI, Nov 2025). A small vision-language model, prompted for captions, not a dedicated captioner.
- Pass
language(en,es,pt,fr,de,ar,zh,ja,ko) to caption in that language. Other languages are best-effort. - Pass
detail: "detailed"or"more"for longer captions. Default is short alt text.onPartialstreams the text as it is generated. - License: LFM Open License v1.0. Free for individuals and companies under USD 10M annual revenue. Above that, Liquid AI requires a commercial license. Not OSI-approved.
- WebGPU is the fast path (fp16 vision + q4f16 decoder, about a second per caption). GPUs without
shader-f16load fp32 vision + q4 decoder (~909 MB). WASM works but takes ~30 s per caption. - It is a generative model: captions can hallucinate details. Review before publishing.
Specifications
- Package
- runonweb/caption
- Base model
- LFM2.5-VL-450M · Liquid AI
- License
- LFM Open License v1.0 (free < USD 10M revenue)
- Download
- ~548 MB / ~508 MB
- Quantization
- fp16+q4f16 on WebGPUfp16+q8+q4 on WASM
- Backend
- WebGPUWASM fallback
- Input
- Image
Get started with runonweb/caption
pnpm add runonwebimport { ImageCaptioner } from 'runonweb/caption'
const captioner = new ImageCaptioner({ language: 'es', detail: 'short' })
await captioner.load()
const { text } = await captioner.caption(imageFile)
// "Un gato sentado sobre una mesa de madera."
// Per call overrides, streamed
await captioner.caption(imageFile, {
language: 'en',
detail: 'detailed',
onPartial: (partial) => console.log(partial),
})
captioner.dispose()Same shape everywhere: construct, load(), run, dispose(). Pass onProgressto show download progress on first use.
Questions about Alt
Does Alt run on device?
Yes. Weights download once and stay in the browser. Nothing is sent to a server.
Which model does Alt use?
LFM2.5-VL-450M by Liquid AI, under LFM Open License v1.0 (free < USD 10M revenue). runonweb loads the onnx-community/LFM2.5-VL-450M-ONNX weights and runs fp16+q4f16 on WebGPU · fp16+q8+q4 on WASM.
How big is the Alt download?
~548 MB / ~508 MB, fetched once on first use. The browser caches the weights, so later loads skip the network and keep working offline.
What does Alt cost?
Nothing. runonweb is free and MIT-licensed, with no device limits, tokens or sign-in. The weights keep their own license: LFM Open License v1.0 (free < USD 10M revenue).
Which browsers support Alt?
Chromium browsers use WebGPU. Firefox and Safari fall back to WebAssembly automatically, slower but identical output.
Can I use a different model with runonweb/caption?
Yes. See each module’s docs for the options it accepts (model, size, language…). Check the license and test both backends before shipping.