Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
845646b
feat(server): add ADetailer support to image generation (#2164)
losewayy Oct 21, 2026
939895f
feat: display remaining time (#2076)
vmobilis Oct 21, 2026
2e2ba3f
feat: add Fibo 2.0 Dev and Edit Turbo support (#2180)
leejet Oct 21, 2026
b15c8aa
fix: include RPC devices in --list-devices (#2182)
leejet Oct 21, 2026
a77d362
fix: recheck memory capacity when eviction candidates are unchanged (…
leejet Oct 21, 2026
f3b773a
Merge upstream master (a77d362) into the fork
danielhanchen Oct 22, 2026
e1a55a0
Count physical cores in the affinity mask for the default thread coun…
danielhanchen Oct 22, 2026
f55cb10
ggml-cpu: fill and scatter direct conv patches in row runs (bit-ident…
danielhanchen Oct 22, 2026
0569826
ggml-patches/0008: keep the AVX512 CPU variants on Intel CPUs without…
danielhanchen Oct 22, 2026
a162a54
CPU: direct convolution by default (bit-identical, no full im2col buf…
danielhanchen Oct 22, 2026
f38a4da
ggml-patches/0014: no row pointer for a source row outside the input
danielhanchen Oct 22, 2026
a0c8508
feat: add --taesd-preview-only to shared context params (#2184)
noctrex Oct 22, 2026
ddd6b3a
fix: correct Linux sysfs path for physical core detection (#2186)
boriselec Oct 22, 2026
530fa39
fix: prevent z-image crash with reference images (#2185)
wbruna Oct 22, 2026
f18dbfc
feat(server): allow recipes to override backend/params_backend in con…
crystalsighting Oct 22, 2026
39bc9d0
fix: update ggml to avoid small BAR heaps on Vulkan (#2181)
leejet Oct 22, 2026
deaeed6
fix: MiniT2I - adjust image dimension to fixed 512x512 (#2189)
akleine Oct 22, 2026
e779d4f
feat(server): support cancellation of running generation jobs (#2190)
leejet Oct 22, 2026
fd21ecf
refactor: use one placeholder token per image in LLM inputs (#2191)
leejet Oct 22, 2026
344a3b6
Merge upstream master (fd21ecf) into the fork
danielhanchen Oct 22, 2026
b964f15
Merge sync-upstream-fd21ecf into cpu-speed (keep the affinity-aware c…
danielhanchen Oct 22, 2026
e181fad
CPU conv direct auto: only with the row-run kernels; dynamic affinity…
danielhanchen Oct 23, 2026
ca0d2bc
CPU: llamafile tinyBLAS GEMM for Q8_0 weights on x86 (bit-identical, …
danielhanchen Oct 23, 2026
c996a5a
CPU: tinyBLAS GEMM for F16 / BF16 weights by default on x86 (GGML_CPU…
danielhanchen Nov 5, 2026
0e8427a
CPU: ik_llama.cpp GEMM kernels for k-quant / i-quant weights (ggml-pa…
danielhanchen Nov 5, 2026
caaa6d0
ggml-patches/0018: explicit NEON reinterprets so GCC builds the aarch…
danielhanchen Nov 5, 2026
0ad6060
ggml-patches/0018: iqk kernels default off on x86 (the tiled K-quant …
danielhanchen Nov 5, 2026
29f7712
Prebuilt: run the Linux CPU bundles on emulated CPUs (Intel SDE, qemu…
danielhanchen Nov 5, 2026
3668df7
CPU tinyBLAS: F16 / BF16 by default only on AVX512 builds and Intel A…
danielhanchen Nov 5, 2026
85c77eb
Merge branch 'cpu-sgemm-f16-bf16' into cpu-iqk-gemm
danielhanchen Nov 5, 2026
d1a313c
CPU tinyBLAS: keep F16 / BF16 on in MSVC AVX512 builds
danielhanchen Nov 5, 2026
9f11365
Merge branch 'cpu-sgemm-f16-bf16' into cpu-iqk-gemm
danielhanchen Nov 5, 2026
17d57ac
ggml-patches/0020: skip SVE CPU variants on 128-bit SVE (Neoverse N2 …
danielhanchen Nov 5, 2026
7b8dc97
Merge branch 'cpu-speed' into cpu-sgemm-q8-0
danielhanchen Nov 5, 2026
f33a93d
Merge branch 'cpu-sgemm-q8-0' into cpu-sgemm-f16-bf16
danielhanchen Nov 5, 2026
f947776
CPU tinyBLAS: default F16 / BF16 on wherever measured faster or equal
danielhanchen Nov 5, 2026
04b17a1
Merge branch 'cpu-sgemm-f16-bf16' into cpu-iqk-gemm
danielhanchen Nov 5, 2026
ea0904d
ggml-patches/0018: iqk kernels by batch size on x86 by default
danielhanchen Nov 5, 2026
e3c2fbd
ggml-patches/0018: correct the measured ranges in the iqk batch-size …
danielhanchen Nov 5, 2026
831e64a
Merge remote-tracking branch 'origin/cpu-iqk-gemm' into cpu-dispatch-…
danielhanchen Nov 5, 2026
e32659f
CPU dispatch gate: 128-bit SVE profiles and iqk defaults
danielhanchen Nov 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/unsloth-sd-prebuilt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,16 @@ jobs:
if: ${{ matrix.cpu_floor != '' }}
run: bash tooling/scripts/unsloth/cpu_variants_gate.sh check "dist/sd-${{ needs.resolve.outputs.tag }}-bin-${{ matrix.label }}.zip" "${{ matrix.cpu_floor }}"

# The runner has the newest ISA the bundle uses, so it cannot see a variant library that crashes
# older CPUs while ggml dlopens every variant to score it. Replay startup on emulated CPUs: Intel SDE
# Nehalem .. Sapphire Rapids on x86_64, qemu Cortex-A53 .. max on aarch64.
- name: CPU dispatch gate (emulated CPUs)
if: ${{ matrix.cpu_floor != '' && runner.os == 'Linux' }}
run: |
set -euo pipefail
if [ "$(uname -m)" = "aarch64" ]; then sudo apt-get install -y -qq qemu-user; fi
bash tooling/scripts/unsloth/cpu_dispatch_gate.sh "dist/sd-${{ needs.resolve.outputs.tag }}-bin-${{ matrix.label }}.zip"

- name: Upload bundle
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
Expand Down
7 changes: 7 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,13 @@ if (NOT SD_USE_SYSTEM_GGML)
add_definitions(-DGGML_MAX_NAME=160)
endif()

# x86 and aarch64 CPU: build llamafile's tinyBLAS GEMM (as llama.cpp does). ggml-patches/0017 picks the weight types
# it takes per CPU from measurements (Q8_0 on x86; F16 / BF16 where tinyBLAS was faster, see ggml-cpu.c);
# GGML_CPU_SGEMM_TYPES overrides the set.
if (NOT DEFINED GGML_LLAMAFILE AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64|amd64|x64|aarch64|arm64|ARM64)$")
set(GGML_LLAMAFILE_DEFAULT ON)
endif()

# deps
include(cmake/ggml.cmake)

Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ API and command-line option may change frequently.***
- [FLUX.2-dev/FLUX.2-klein](./docs/flux2.md)
- [FLUX.3 Image Klein / Klein Base](./docs/flux3.md)
- [MOSS-Image-Base / MOSS-Image-SFT](./docs/moss_image.md)
- [Fibo 2.0 Dev](./docs/fibo2.md)
- [Lens](./docs/lens.md)
- [Chroma](./docs/chroma.md)
- [Chroma1-Radiance](./docs/chroma_radiance.md)
Expand Down Expand Up @@ -79,6 +80,7 @@ API and command-line option may change frequently.***
- [Boogu Image Edit](./docs/boogu_image.md)
- [Mage-Flow-Edit](./docs/mage_flow.md#image-editing)
- [LLaDA-Image Edit](./docs/llada_image.md#image-editing)
- [Fibo 2.0 Dev / Edit Turbo](./docs/fibo2.md#editing-and-turbo)
- Video Models
- [Wan2.1/Wan2.2](./docs/wan.md)
- [MiniMax-H3](./docs/minimax_h3.md)
Expand Down
Binary file added assets/fibo2/dev_edit.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/fibo2/t2i.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 36 additions & 3 deletions docs/adetailer.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# ADetailer

`sd-cli` can run a YOLOv8 object detector on an existing or newly generated
image and perform a cropped inpaint pass for every detected object. The first
implementation supports YOLOv8 detection checkpoints. YOLOv8 segmentation and
MediaPipe models are not supported yet.
image, and `sd-server` can run it after image generation. Both perform a cropped
inpaint pass for every detected object. The implementation supports YOLOv8
detection checkpoints. YOLOv8 segmentation and MediaPipe models are not
supported yet.

## Convert a detector

Expand Down Expand Up @@ -68,6 +69,36 @@ ADetailer can also run automatically after normal image generation:
--extra-ad-args "confidence=0.3,denoising_strength=0.4,inpaint_width=512,inpaint_height=512"
```

The same options can be supplied when starting `sd-server`. When `--ad-model` is set, its detector runs after OpenAI-compatible and native asynchronous image generation. SDAPI requests enable ADetailer through `alwayson_scripts`, as described below. If no object is detected, the original image is returned unchanged. RGBA output keeps its original alpha channel, including when detected regions are repaired. Detector initialization or detail-pass failures are reported as request failures.

Server image-generation requests limit base, hires, and detail-pass dimensions to 4096 pixels per side. ADetailer step overrides are limited to 1–100; `steps=0` in `extra_ad_args` keeps inheriting the main generation steps. These limits also apply to inherited dimensions and `extra_ad_args` overrides. Requests exceeding the limits return a parameter error before generation. CLI limits are unchanged.

### SDAPI requests

`/sdapi/v1/txt2img` and `/sdapi/v1/img2img` accept the WebUI ADetailer argument format:

```json
{
"prompt": "portrait photo",
"alwayson_scripts": {
"ADetailer": {
"args": [true, false, {
"ad_model": "face_yolov8n.pt",
"ad_prompt": "[PROMPT], detailed face",
"ad_use_steps": true,
"ad_steps": 20
}]
}
}
}
```

The detector must be configured at server startup with `--ad-model`. `ad_model` must match that file's basename; the original `.pt` basename is also accepted for a converted detector. Requests cannot load arbitrary detector paths. Omitting the script, setting its first argument to `false`, selecting `"None"`, or setting `ad_tab_enable` to `false` disables detailing. Dictionary-only argument arrays are also accepted. Multiple enabled dictionaries run in order using the configured detector.

Supported settings include prompts, confidence, mask filtering by area or confidence, mask count and area ratios, dilation/erosion, offsets, mask merging/inversion, blur, denoising strength, masked or full-image inpainting, padding, and optional overrides for inpaint dimensions, steps, CFG, sampler/scheduler, and CLIP skip. The corresponding `ad_use_*` flags control whether overrides apply. Otherwise dimensions, steps, CFG, sampler, scheduler, and CLIP skip inherit the main request. Denoising strength defaults to `0.4`. Pixel mask settings are limited to the larger output dimension, with a minimum limit of 32 and a maximum of 16384 pixels.

Model/VAE switching, non-default noise multipliers, face restoration, ControlNet, and skipping the initial img2img pass are not supported; active requests for these features return an error. Unknown settings and invalid active values also return errors. During detailing, `/sdapi/v1/progress` remains active with an `adetailer` job; its percentage and preview stay fixed until detailing finishes.

An empty ADetailer prompt inherits the main prompt. `[PROMPT]` inserts the main
prompt, `[SEP]` assigns different prompts to consecutive masks, and `[SKIP]`
skips the corresponding mask.
Expand All @@ -82,6 +113,7 @@ All settings other than the detector path and prompts are passed through
| `nms` | `0.45` | NMS IoU threshold |
| `max_detections` | `100` | Maximum detections retained after NMS |
| `mask_k_largest` | `0` | Keep only the largest K masks; zero keeps all |
| `mask_filter_method` | `area` | Rank retained masks by `area` or `confidence` |
| `mask_min_ratio` | `0` | Minimum bbox area relative to the image |
| `mask_max_ratio` | `1` | Maximum bbox area relative to the image |
| `dilate_erode` | `4` | Positive values dilate; negative values erode |
Expand All @@ -90,6 +122,7 @@ All settings other than the detector path and prompts are passed through
| `merge_masks`, `invert_mask` | `false` | Boolean alternatives to `mask_mode` |
| `mask_blur` | `4` | Final composite feather radius |
| `inpaint_padding` | `32` | Padding around the detected region |
| `inpaint_only_masked` | `true` | Crop to the detected region; `false` uses the full image with the detection mask |
| `inpaint_width`, `inpaint_height` | mode-specific | `512x512` after generation; input/output size in `adetailer` mode |
| `denoising_strength` | mode-specific | `0.4` after generation; inherits `--strength` in `adetailer` mode |
| `steps` | `0` | Detail steps; zero inherits the main generation |
Expand Down
10 changes: 7 additions & 3 deletions docs/backend.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,9 +241,13 @@ sd-cli -m model.safetensors -p "a cat" --conv-direct off,diffusion=on
CUDA 2D requires a compiled Turing-or-newer MMA architecture; HIP 2D requires
the supported CDNA MFMA or RDNA WMMA architectures described below for flash
attention. MUSA 2D has a SIMT implementation. CUDA, HIP, and MUSA 3D also have
a SIMT implementation, so they do not require MMA. Other backends default to
`off`. Results and decision logs are cached per compute backend and dimension
in the context, as with flash attention. Each dimension is selected independently,
a SIMT implementation, so they do not require MMA. The CPU backend selects
`on` for 2D and 3D when ggml carries the row-run direct kernels
(`scripts/unsloth/ggml-patches/0014`, applied by the prebuilt workflow) and
`off` otherwise: the direct kernels use a fixed patch buffer instead of the
full im2col matrix and match im2col bit for bit with F16 weights. Other
backends default to `off`. Results and decision logs are cached per compute
backend and dimension in the context, as with flash attention. Each dimension is selected independently,
and all compute devices in a module must qualify. Parameter-storage devices do
not affect this choice.

Expand Down
12 changes: 11 additions & 1 deletion docs/edit.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Depending on the architecture, different models handle reference images differen
| **Krea2 (Community Edit LoRAs)** | `krea2_ostris_edit` |
| [**Mage-Flow-Edit**](./mage_flow.md#image-editing) | `mage_flow` |
| [**LLaDA-Image**](./llada_image.md#image-editing) | `llada_image` |
| [**Fibo 2.0 Dev / Edit Turbo**](./fibo2.md#examples) | `fibo2` |
| **Anima (Community Edit LoRAs)** | `cosmos_reference` |

Stable-diffusion.spp also supports basic Unet-based editing models like instruct-pix2pix or CosXL-Edit. This document is not about those.
Expand Down Expand Up @@ -50,6 +51,7 @@ The `--ref-image-args` argument accepts a comma-separated list of key-value pair
| `flux_kontext` | FLUX.1 Kontext |
| `longcat` | LongCat Image Edit |
| `flux2` | FLUX.2 models |
| `fibo2` | Fibo 2.0 Dev / Edit Turbo |
| `qwen` | Qwen Image Edit |
| `qwen_layered` | Qwen Image Layered |
| `z_image_omni` | Boogu, Z-Image Omni |
Expand All @@ -73,7 +75,12 @@ If presets are insufficient, you can manually configure the following parameters
| `ref_index_mode` | string | Behavior of the RoPE index. | `fixed`, `increase`, `decrease` |
| `force_ref_timestep_zero` | bool | Forces timestep=0 for reference tokens. | `true`, `false` (Krea2 only) |
| `resize_before_vae` | bool | Whether reference images are resized before VAE encoding. | `true`, `false` |
| `vae_input_max_pixels` | int | Maximum pixel area for VAE reference inputs. | Integer |
| `resize_vae_to_target` | bool | Use output dimensions for every reference, overriding area-based sizing. | `true`, `false` |
| `resize_single_ref_to_target` | bool | Use output dimensions when exactly one reference is supplied. | `true`, `false` |
| `vae_size_buckets` | bool | Choose aligned dimensions within ±10% of the requested area, minimizing aspect-ratio cropping. Ignored when using output dimensions. | `true`, `false` |
| `vae_center_crop` | bool | Scale to cover the selected dimensions with Lanczos, then center-crop. Otherwise resize directly. | `true`, `false` |
| `vae_input_max_pixels` | int | VAE area budget, also capped by output area in ordinary resizing. With size buckets, this is the target area and output area does not cap it. | Integer |
| `vlm_use_vae_input` | bool | Reuse the resized/cropped VAE input for the VLM, before the VLM's own resize. Has no effect when `resize_before_vae=false`. | `true`, `false` |
| `vlm_resize_mode` | string | How to resize VLM reference inputs. | `longest_side`, `area`, `none` |
| `vlm_max_size` | int | Maximum VLM input size; interpreted according to `vlm_resize_mode`. | Integer |
| `vlm_min_size` | int | Minimum VLM input size; interpreted according to `vlm_resize_mode`. | Integer |
Expand All @@ -88,6 +95,7 @@ For a technical overview of how each preset is configured, see the table below.
| `flux_kontext` | No | `fixed` | `none` | |
| `longcat` | Yes | `fixed` | `area` | |
| `flux2` | No | `increase` | `none` | |
| `fibo2` | Yes | `increase` | `longest` | Shared reference crops; clean reference timesteps; see [Fibo 2.0](./fibo2.md) |
| `qwen` | Yes | `increase` | `area` | |
| `qwen_layered` | Yes | `decrease` | `area` | |
| `mage_flow` | Yes | `increase` | `longest` | `vlm_max_size = 384`, VAE input resized to target |
Expand All @@ -99,3 +107,5 @@ For a technical overview of how each preset is configured, see the table below.
**Additional Default Notes:**
- **VLM Input Sizes:** For most presets, `vlm_max_size` and `vlm_min_size` are set to `-1`, meaning the values are model-dependent and handled automatically. In `area` mode they represent pixel area; in `longest_side` mode they represent a side length in pixels.
- **VAE Input Size:** `vae_input_max_pixels` defaults to $1024 \times 1024$ pixels (`1048576`).
- **VAE Geometry:** `resize_vae_to_target` defaults to `true` for Mage-Flow and LLaDA-Image. Fibo enables `resize_single_ref_to_target`, `vae_size_buckets`, and `vae_center_crop`. These options are otherwise `false`. Bucket dimensions use the model's alignment (normally 16, Qwen Image 32), with a minimum side of four alignment units; if no bucket fits, output dimensions are used.
- **Shared Encoder Input:** `vlm_use_vae_input` defaults to `true` for Fibo and Qwen Image 2.1, otherwise `false`. All these options can be overridden individually after selecting a preset.
53 changes: 53 additions & 0 deletions docs/fibo2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# How to Use

Fibo 2.0 uses a Fibo diffusion transformer, the standard FLUX.2 VAE, and Qwen3-VL 4B as the LLM text encoder. The Qwen tokenizer is built in.

## Download weights

- Download Fibo 2.0 Dev
- safetensors: https://huggingface.co/Comfy-Org/Fibo-2.0/tree/main/diffusion_models
- Download Fibo 2.0 Edit Turbo
- safetensors: https://huggingface.co/Comfy-Org/Fibo-2.0/tree/main/diffusion_models
- Download vae
- safetensors: https://huggingface.co/black-forest-labs/FLUX.2-dev/tree/main
- Download Qwen3-VL 4B
- safetensors: https://huggingface.co/Comfy-Org/Fibo-2.0/tree/main/text_encoders
- gguf: https://huggingface.co/Qwen/Qwen3-VL-4B-Instruct-GGUF/tree/main

The original Diffusers weights from [briaai/Fibo-2.0-dev](https://huggingface.co/briaai/Fibo-2.0-dev) and [briaai/Fibo-2.0-edit-turbo](https://huggingface.co/briaai/Fibo-2.0-edit-turbo) are also supported. Pass the transformer's `diffusion_pytorch_model.safetensors.index.json` to `--diffusion-model` and keep its shards alongside it.

INT8 convrot weights load directly; see [INT8 convrot](./int8_convrot.md) for backend requirements.

## Examples

### Fibo 2.0 Dev

Dev supports both text-to-image generation and reference-image editing.

```
.\bin\Release\sd-cli.exe --diffusion-model ..\models\diffusion_models\fibo2_dev_int8_convrot.safetensors --llm ..\models\text_encoders\Qwen3-VL-4B-Instruct-Q4_K_M.gguf --llm_vision ..\models\text_encoders\Qwen3-VL-4B-Instruct-mmproj-BF16.gguf --vae ..\models\vae\flux2_ae.safetensors -p "a lovely cat holding a sign says 'fibo2.cpp'" --cfg-scale 5.0 --sampling-method euler -v --offload-to-cpu
```

<img src="../assets/fibo2/t2i.png" />

```
.\bin\Release\sd-cli.exe --diffusion-model ..\models\diffusion_models\fibo2_dev_int8_convrot.safetensors --llm ..\models\text_encoders\Qwen3-VL-4B-Instruct-Q4_K_M.gguf --llm_vision ..\models\text_encoders\Qwen3-VL-4B-Instruct-mmproj-BF16.gguf --vae ..\models\vae\flux2_ae.safetensors -r ..\assets\flux\flux1-dev-q8_0.png -p "change 'flux.cpp' to 'fibo2.cpp'" --cfg-scale 5.0 --sampling-method euler -v --offload-to-cpu
```

<img src="../assets/fibo2/dev_edit.png" />

### Fibo 2.0 Edit Turbo

Edit Turbo is distilled for reference-image editing in 4 steps with CFG 1.

```
.\bin\Release\sd-cli.exe --diffusion-model ..\models\diffusion_models\fibo2_edit_turbo_int8_convrot.safetensors --llm ..\models\text_encoders\Qwen3-VL-4B-Instruct-Q4_K_M.gguf --llm_vision ..\models\text_encoders\Qwen3-VL-4B-Instruct-mmproj-BF16.gguf --vae ..\models\vae\flux2_ae.safetensors -r ..\assets\flux\flux1-dev-q8_0.png -p "change 'flux.cpp' to 'fibo2.cpp'" --cfg-scale 1 --steps 4 --sampling-method euler -v --offload-to-cpu
```

The BF16 files accept the same options. Use dimensions divisible by 16. Repeat `-r` to use multiple reference images; instructions can refer to `<image_1>`, `<image_2>`, etc. See [Image Editing](./edit.md) for reference-image preprocessing options. Separate GGUF text encoders need their vision projector passed with `--llm_vision` for editing.

The automatic `fibo2` reference preset combines `resize_single_ref_to_target=true`, `vae_size_buckets=true`, `vae_center_crop=true`, and `vlm_use_vae_input=true`. A single reference is scaled to cover the output dimensions and center-cropped. Multiple references use dimensions divisible by 16, chosen within ±10% of one megapixel to minimize cropping for each image's aspect ratio; `vae_input_max_pixels` overrides that target area. The VAE and vision encoder receive the same crops, with smaller copies used by the vision encoder. These are generic reference-image options and can be overridden individually: for example, `--ref-image-args vae_center_crop=false` uses direct resizing, while `resize_before_vae=false` skips this automatic crop and resize step entirely.

The vision encoder defaults to `vlm_resize_mode=longest_side,vlm_max_size=768`. Override these with `--ref-image-args`, for example `vlm_max_size=512`, or use `vlm_resize_mode=none` to skip size-based scaling. Vision inputs are still aligned to the encoder's patch grid.

Plain prompts and structured JSON captions are accepted. This integration uses the caption-only text-rendering path (`render_text_images=False`); it does not generate auxiliary glyph images or expand prompts with Bria VGL. Native Fibo mask preprocessing is not connected to `--mask`.
6 changes: 4 additions & 2 deletions docs/performance.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ segment count change.
path. Performance depends on GPU architecture, backend, driver, model, and
tensor shapes, so enabling direct convolution can either improve or reduce speed.

Automatic selection uses small benchmarks on Vulkan and implicit GEMM checks
on other backends. It does not guarantee the fastest end-to-end generation.
Automatic selection uses small benchmarks on Vulkan, implicit GEMM checks on
CUDA/HIP/MUSA, and the direct kernels on CPU when ggml carries the row-run
patch (see [backend selection](backend.md)). It does not guarantee the fastest
end-to-end generation.
Compare `on` and `off` with the same model and generation settings over
repeated runs, keeping flash attention unchanged and separating startup/probe
time from steady-state generation time. See [backend selection](backend.md)
Expand Down
Loading