+++ disableToc = false title = "Model Gallery" weight = 81 url = '/models' +++ The model gallery is a curated collection of models configurations for [LocalAI](https://github.com/go-skynet/LocalAI) that enables one-click install of models directly from the LocalAI Web interface. A list of the models available can also be browsed at [the Public LocalAI Gallery](https://models.localai.io). LocalAI to ease out installations of models provide a way to preload models on start and downloading and installing them in runtime. You can install models manually by copying them over the `models` directory, or use the API or the Web interface to configure, download and verify the model assets for you. {{% notice note %}} The models in this gallery are not directly maintained by LocalAI. If you find a model that is not working, please open an issue on the [main LocalAI repository](https://github.com/mudler/LocalAI/issues). {{% /notice %}} {{% notice note %}} GPT and text generation models might have a license which is not permissive for commercial use or might be questionable or without any license at all. Please check the model license before using it. The official gallery contains only open licensed models. {{% /notice %}} ![output](https://github.com/mudler/LocalAI/assets/2420543/7b16676e-d5b1-4c97-89bd-9fa5065c21ad) ## How it works Open **Models** in the WebUI. It is the canonical page for a model's complete lifecycle and has two views: - **Explore** browses configured galleries, compares hardware fit and variants, and installs models. This is the default view. - **Installed** lists local model configurations and their running, idle, disabled, pinned, and distributed state. Select a model to load or stop it, edit its configuration, open a supported use case, inspect backend logs, or remove it. Both views use the same model selection and store the view, search, filter, and selection in the URL. Installing from Explore does not move you away from the catalog; the entry updates in place when the operation finishes. ## Cyber-Tiel-Coder Install `cyber-tiel-coder-35b-a3b-q4-mtp` for coding and image chat with llama.cpp. The gallery groups UD-Q4_K_XL and UD-Q8_K_XL builds; both enable MTP speculative decoding and include a BF16 vision projector. To select Q8 explicitly, run `local-ai models install cyber-tiel-coder-35b-a3b-q4-mtp --variant cyber-tiel-coder-35b-a3b-q8-mtp`. Both configurations use the embedded chat template and default to 32,768 context tokens. The [model card](https://huggingface.co/peculiar-ragdoll/Cyber-Tiel-Coder-35B-A3B-GGUF-MTP) describes its abliterated Ornith-1.5 base and MIT license. ## Qwen3.8-27B Agention Precision The gallery includes Agention Precision IQ4_XS and Q4_K_M GGUF builds of Qwen3.8-27B for llama.cpp. Both include the BF16 vision projector for image input and use a 32,768-token context by default. Install with automatic variant selection: ```bash local-ai models install qwen3.8-27b-agention-iq4-xs ``` To select a specific build, pass `--variant qwen3.8-27b-agention-iq4-xs` or `--variant qwen3.8-27b-agention-q4-k-m` to the same command. The files use standard llama.cpp quantization types and the Apache-2.0 license. See the [publisher's model card](https://huggingface.co/agentionai/Qwen3.8-27B-AP-GGUF) for quantization details. These entries do not enable MTP speculative decoding. ## Swift 1.5 Qwen3.8-27B GSQ-RCO Install `swift-1.5-qwen3.8-27b-gsq-rco` for text chat with llama.cpp. The gallery groups IQ2_XS, IQ2_S, IQ3_XXS, and IQ3_S quantizations of this 27B reasoning and coding model. To select IQ3_S explicitly, run: ```bash local-ai models install swift-1.5-qwen3.8-27b-gsq-rco --variant swift-1.5-qwen3.8-27b-gsq-rco-iq3-s ``` The configurations use the embedded chat template and default to 32,768 context tokens. These builds support text chat only: the publisher has no verified vision projector for this release. They use standard GGUF files without MTP decoding. See the [model card](https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-27B-GSQ-RCO-GGUF) and [Swift Open License v1.0](https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-27B-GSQ-RCO-GGUF/blob/main/LICENSE) for usage terms. ## Sharp-Spark-X2.5-4B Install `sharp-spark-x2.5-4b` for coding and text chat with llama.cpp. The gallery groups Q4_K_XL, Q5_K_XL, and Q6_K_XL builds as variants. To select the publisher's recommended Q6 build, run: ```bash local-ai models install sharp-spark-x2.5-4b --variant sharp-spark-x2.5-4b-q6 ``` All builds use a 32,768-token default context and the embedded Sharp-Spark chat template. That template adds a terseness instruction to the system prompt. See the [publisher's model card](https://huggingface.co/peculiar-ragdoll/Sharp-Spark-X2.5-4B-GGUF) for quantization and template details. ## MiMo-V2.6-Distill-Qwen-9B Install `mimo-v2.6-distill-qwen-9b` for text and image chat with llama.cpp. This MIT-licensed 9B Qwen3.5 fine-tune targets coding, agent tasks, and visual coding. The gallery groups Q4_K_M and Q8_0 builds as variants; both include the F16 vision projector. To select Q8_0 explicitly, run `local-ai models install mimo-v2.6-distill-qwen-9b --variant mimo-v2.6-distill-qwen-9b-q8`. The configurations default to 32,768 context tokens and use the model's embedded chat template. See the [model card](https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Distill-Qwen-9B) for training details. ## Qwopus3.8 Flash V2 Install `qwopus3.8-27b-flash-v2` for the Q4_K_M GGUF build, with Q8_0 available through variant selection: ```bash local-ai models install qwopus3.8-27b-flash-v2 local-ai models install qwopus3.8-27b-flash-v2 --variant qwopus3.8-27b-flash-v2-q8 ``` Both builds use llama.cpp with the embedded chat template, MTP speculative decoding, and the F32 vision projector. Weights and projector downloads are pinned to a Hugging Face revision and verified with SHA256. This Apache-2.0 release is a further post-training of Qwopus3.8 Flash for reasoning and agent tasks. See the [publisher's model card](https://huggingface.co/Jackrong/Qwopus3.8-27B-Flash-V2-GGUF) for evaluation details and limitations. ## ThinkingCap Qwen3.8-27B Install `thinkingcap-qwen3.8-27b` for a 27B reasoning model with text and image input. The llama.cpp entries include Q4_K_M and Q8_0 weights, each paired with the F16 vision projector. LocalAI selects between the builds using the gallery variant rules. To request Q8_0 explicitly: ```bash local-ai models install thinkingcap-qwen3.8-27b --variant thinkingcap-qwen3.8-27b-q8 ``` Both builds use the embedded chat template, a 32,768-token default context, and the publisher's sampled decoding settings. MTP speculative decoding is not enabled by these entries. The weights use [PolyForm Small Business 1.0.0 with a personal-use grant](https://huggingface.co/bottlecapai/ThinkingCap-Qwen3.8-27B-GGUF/blob/main/LICENSE). Review that license for permitted use. ## Hemmingway-1 Install `hemmingway-1` for English text generation with llama.cpp. The gallery groups its Q4_K_M and Q8_0 builds as variants. To select a specific build, use `local-ai models install hemmingway-1 --variant hemmingway-1-q8` for Q8_0. The configurations default to 32,768 context tokens. Increase the context size only if available memory permits. The [model license](https://huggingface.co/Altworld/Hemmingway-1) is CC BY-NC 4.0; commercial use requires a separate agreement. ## Qwen-Image 2.1 For image generation, install `qwen-image-2.1-q4_k-ggml` or its `qwen-image-2.1-q8_0-ggml` variant. These entries use `stablediffusion-ggml` and include the text encoder, vision projector, and VAE. The invalid `qwen-image-2.1-uncensored` chat entry was removed because llama.cpp cannot load its diffusion weights. This removal does not delete previously installed models. Remove that configuration before installing an image-generation entry. ## VRAM and download size estimates When browsing the gallery or importing a model by URI, LocalAI can show **estimated download size** and **estimated VRAM** for models. - **Where they appear**: In the model gallery table (Size / VRAM column), in the model detail modal, and after starting an import from URI (in the success message). - **How they are computed**: GGUF models use file size (HTTP HEAD or local stat) and optional GGUF metadata (HTTP Range) for KV cache and overhead; other formats use Hugging Face file sizes and optional config when available. If metadata is unavailable, a size-only heuristic is used. - **Hardware fit indicator**: When your system reports GPU or RAM capacity, the gallery shows whether the estimated VRAM fits (green) or may not fit (red) using a 95% headroom rule. - Estimates are best-effort and may be missing if the server does not support HEAD/Range or the request times out. ## Useful Links and resources - [Open LLM Leaderboard](https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard) - here you can find a list of the most performing models on the Open LLM benchmark. Keep in mind models compatible with LocalAI must be quantized in the `gguf` format. ## Add other galleries You can add other galleries by: 1. **Using the Web UI**: Navigate to the [Runtime Settings]({{%relref "features/runtime-settings#gallery-settings" %}}) page and configure galleries through the interface. 2. **Using Environment Variables**: Set the `GALLERIES` environment variable. The `GALLERIES` environment variable is a list of JSON objects, where each object has a `name` and a `url` field. The `name` field is the name of the gallery, and the `url` field is the URL of the gallery's index file, for example: ```json GALLERIES=[{"name":"", "url":"/../cache/gallery/`), one file per gallery URL. If nothing can serve the index — the primary and every mirror failed, there is no network at all, the host is airgapped — LocalAI serves that last successfully fetched copy instead of failing the listing, and logs a warning saying it did so. This applies to every gallery whose `url` points directly at an index file, with or without `mirrors` — but not to a `.ref` URL, which is resolved before the cache is consulted (see the warning above). Only a response that actually parses as a gallery index is stored. A captive portal, a proxy or a CDN can answer an index request with HTTP 200 and an HTML error page; caching that would replace a working offline copy with something no listing can read. An empty index is rejected for the same reason, so the previous copy survives. Entries served this way may be stale: the copy is only as fresh as the last time the gallery could be reached, so models added or changed upstream since then will not show up, and an entry may point at a file that has since moved. A listing served from disk is a degraded mode, not a substitute for a reachable gallery. The copy is deliberately kept out of the models directory itself, where LocalAI reads a `.yaml` file as an installed model's configuration. Deleting the cache directory is safe — the next successful fetch recreates it — and a machine that has never reached a gallery has nothing cached, so its first listing still fails. ## Galleries published as OCI artifacts A gallery can live in a container registry instead of on a web server. Give the gallery a `url` with the `oci://` scheme and point it at an artifact reference: ```json GALLERIES=[{"name":"premium", "url":"oci://quay.io/acme/gallery:latest"}] ``` LocalAI pulls the artifact, unpacks it into a cache directory beside your models directory (`/../cache/gallery/oci/`) and reads `index.yaml` from it. The unpacked copy is reused for one hour before the registry is asked again. Everything else works as it does for an HTTP gallery: an `oci://` URL can be a primary `url` or one of the `mirrors`, a failed pull puts the source in the same 10 minute cooldown, and the offline cache still serves the last good listing. Downloaded artifact files are readable and writable only by the LocalAI process owner. File writes stay inside the cache directory, including when an existing subdirectory is a symbolic link. This is the only format that carries a whole gallery in one object, so it is what to publish when the index and the model configuration files must travel together. ### Entry URLs relative to the gallery An artifact holds the index and the files it refers to, so an entry can name its base configuration by its place in the tree: ```yaml - name: premium-model url: base/virtual.yaml ``` A `url` with no scheme is resolved against the root of the gallery it was read from: the unpacked artifact for an `oci://` gallery, and the directory of the index URL for an `http://`, `https://`, `github:`, `huggingface://` or `file://` gallery. A `url` that names a scheme, such as `https://example.org/base.yaml`, is always used as written. A relative `url` cannot leave the gallery root. An entry that tries to climb out of it, for example `url: ../../etc/passwd`, is refused: LocalAI drops that entry from the listing, logs the reason and keeps the rest of the gallery. ### Signature verification An `oci://` gallery can be signed, and LocalAI verifies the signature before it unpacks anything. Add an `artifact_verification` block with the Fulcio issuer and the signing identity, in the same form the [backend galleries]({{%relref "features/backends#verifying-oci-backends" %}}) use: ```json GALLERIES=[{"name":"premium","url":"oci://quay.io/acme/gallery:latest","artifact_verification":{"issuer":"https://token.actions.githubusercontent.com","identity_regex":"^https://github\\.com/acme/gallery/\\.github/workflows/publish\\.yml@refs/tags/.+$"}}] ``` The tag is resolved to a digest, the signature is checked against that digest, and the same digest is then pulled. A gallery that fails verification is never written to the cache, so no unverified file reaches your disk. The optional `not_before` RFC3339 value revokes signatures logged before that time, exactly as it does for backends. Cached copies of a gallery are kept per verification policy on disk, and the in-memory listings are dropped when the gallery settings change. When you change the `verification` block (for example, you add `source_repository` or move `not_before` forward), in the configuration, at runtime through the settings API, or by editing `runtime_settings.json`, the next listing fetches the gallery again and verifies it under the new policy. LocalAI does not serve a copy that an older policy admitted. LocalAI tells a refusal apart from an outage: - **Refusal.** The artifact has no signature, or its signature does not match the issuer, identity, `source_repository` or `not_before` of the policy, or the policy itself cannot be used (for example, `not_before` is not an RFC3339 time). LocalAI shows an error and does not serve a cached copy. - **Outage.** The registry or the Sigstore trust root cannot be reached, answers with a server error, or the fetch times out. This includes failures during the signature check itself. LocalAI serves the last copy that was verified under the current policy. If no such copy exists, it shows an error. It never serves a copy that was verified under a different policy. An `oci://` gallery with a `verification` block is only served from `oci://` sources. LocalAI cannot check a signature on an `https://`, `github:` or `file://` mirror, so it ignores these mirrors for that gallery and logs a warning. List only `oci://` mirrors for a signed gallery. With strict integrity on (`--require-backend-integrity` or `LOCALAI_REQUIRE_BACKEND_INTEGRITY`), an `oci://` gallery without a `verification` block is refused. This is also true when a copy from an earlier fetch is in the cache, because that copy was never verified, and when the gallery has an `https://`, `github:` or `file://` mirror, because LocalAI ignores these mirrors in strict mode too. The optional `source_repository` value works the same for `oci://` galleries as it does for backends: it pins the repository the signature was made for when a shared reusable workflow does the signing. See [Verifying OCI Backends]({{%relref "features/backends#verifying-oci-backends" %}}). {{% notice warning %}} `artifact_verification` applies only to the gallery artifact. Backend image signatures use `verification`. For compatibility, the artifact loader uses `verification` when `artifact_verification` is absent. Set both fields when the gallery and its backend images have different signing identities. With `--require-backend-integrity` (`LOCALAI_REQUIRE_BACKEND_INTEGRITY=1`), an `oci://` gallery with neither policy is refused when the models are listed, not only when one is installed. An `oci://` gallery without a policy still lists outside strict mode, with a warning in the log. {{% /notice %}} ### Official gallery publishing The `gallery_publish.yml` workflow publishes both official galleries on relevant changes to `master`, or through a manual dispatch on `master`. It uses the existing `LOCALAI_REGISTRY_USERNAME` and `LOCALAI_REGISTRY_PASSWORD` secrets. It reuses the public backend repository `go-skynet/local-ai-backends`. The `gallery-models` and `gallery-backends` tags move only after their artifact digest has been signed. Revision tags include the source commit SHA. To prepare the same files locally, run `go run ./scripts/build/gallery . gallery /tmp/model-gallery` or use `backend` as the source directory. The helper rewrites repository-local base configuration URLs to artifact-relative paths and copies the files. The published artifact type is `application/vnd.localai.gallery.v1`; each file is a separate layer with its relative path as its title. ### Private registries A gallery in a private registry needs a credentials entry that matches the registry, the same entry an image pull from it would use: ```yaml - match: quay.io/acme username: bot password_env: QUAY_TOKEN ``` See [Private Registries and Galleries]({{% relref "advanced/private-sources" %}}) for the file location, the other authentication types and the rules for registries on a local network, which also need `allow_insecure: true`. ## API Reference ### Model repositories You can install a model in runtime, while the API is running and it is started already, or before starting the API by preloading the models. To install a model in runtime you will need to use the `/models/apply` LocalAI API endpoint. By default LocalAI is configured with the `localai` repository. To use additional repositories you need to start `local-ai` with the `GALLERIES` environment variable: ``` GALLERIES=[{"name":"", "url":"