# Ovis-Image

![concepts](https://github.com/AIDC-AI/Ovis-Image/blob/main/docs/imgs/ovis_image_case.png)

Ovis-Image — это модель text-to-image с 7 млрд параметров, специально оптимизированная для высококачественного рендеринга текста и рассчитанная на эффективную работу в условиях строгих вычислительных ограничений.

[Ovis-Image Technical Report](https://arxiv.org/abs/2511.22982) от Alibaba Group, авторы: Guo-Hua Wang, Liangfu Cao, Tianyu Cui, Minghao Fu, Xiaohao Chen, Pengxin Zhan, Jianshan Zhao, Lan Li, Bowen Fu, Jiaqi Liu, Qing-Guo Chen.

Аннотация из статьи:

*Мы представляем Ovis-Image — текстово-изображенческую модель на 7B параметров, специально оптимизированную для высококачественного рендеринга текста и рассчитанную на эффективную работу в условиях строгих вычислительных ограничений. Построенная на основе нашей предыдущей архитектуры Ovis-U1, Ovis-Image объединяет диффузионный визуальный декодер с более мощным мультимодальным ядром Ovis 2.5, используя тренировочный конвейер, ориентированный на текст, который сочетает крупномасштабное предобучение с тщательно подобранными этапами постобучения. Несмотря на компактную архитектуру, Ovis-Image демонстрирует качество рендеринга текста, сопоставимое с качеством значительно более крупных открытых моделей, таких как Qwen-Image, и приближается к уровню закрытых систем, например Seedream и GPT4o. Принципиально важно, что модель остается развертываемой на одном высокопроизводительном GPU с умеренным объемом памяти, что сокращает разрыв между передовым уровнем рендеринга текста и практическим внедрением. Наши результаты показывают, что сочетание мощного мультимодального ядра с тщательно спроектированным тренировочным рецептом, сфокусированным на тексте, достаточно для достижения надежного двуязычного рендеринга текста без использования чрезмерно больших или проприетарных моделей.*

**Ключевые моменты**:

*   **Высокое качество рендеринга текста при компактном масштабе 7B**: Ovis-Image — это модель text-to-image с 7B параметров, обеспечивающая качество рендеринга текста, сопоставимое с качеством значительно более крупных систем класса 20B, таких как Qwen-Image, и конкурентоспособное с ведущими закрытыми моделями, например GPT4o, в сценариях с преобладанием текста, при этом оставаясь достаточно компактной для запуска на широкодоступном оборудовании.
*   **Высокая точность для текстово-насыщенных промптов, чувствительных к макету**: Модель демонстрирует превосходные результаты на промптах, требующих точного соответствия между лингвистическим содержанием и типографикой (например, постеры, баннеры, логотипы, макеты интерфейсов, инфографика), генерируя читаемый, орфографически верный и семантически согласованный текст в различных шрифтах, размерах и пропорциях без ущерба для общего визуального качества.
*   **Эффективность и возможность развёртывания**: Благодаря бюджету в 7 млрд параметров и оптимизированной архитектуре Ovis-Image помещается на одном высокопроизводительном GPU с умеренным объёмом памяти, поддерживает интерактивное использование с низкой задержкой и масштабируется до пакетного производственного обслуживания, обеспечивая рендеринг текста уровня передовых моделей в приложениях, где модели с десятками миллиардов параметров непрактичны.

Этот конвейер был предоставлен командой Ovis-Image. Исходная кодовая база доступна [здесь](https://github.com/AIDC-AI/Ovis-Image).

Доступные модели:

| Модель | Рекомендуемый dtype |
|:-----:|:-----------------:|
| [`AIDC-AI/Ovis-Image-7B`](https://huggingface.co/AIDC-AI/Ovis-Image-7B) | `torch.bfloat16` |

См. [это](https://huggingface.co/collections/AIDC-AI/ovis-image) собрание для получения дополнительной информации.

## OvisImagePipeline[[diffusers.OvisImagePipeline]]

#### diffusers.OvisImagePipeline[[diffusers.OvisImagePipeline]]

```python
diffusers.OvisImagePipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: Qwen3Model, tokenizer: Qwen2Tokenizer, transformer: OvisImageTransformer2DModel)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/ovis_image/pipeline_ovis_image.py#L129)

**Параметры:**

transformer ([OvisImageTransformer2DModel](/docs/diffusers/main/ru/api/models/ovisimage_transformer2d#diffusers.OvisImageTransformer2DModel)) : архитектура условного трансформера (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler ([FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/ru/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler)) : планировщик, используемый в связке с `transformer` для удаления шума из закодированных латентов изображения.

vae ([AutoencoderKL](/docs/diffusers/main/ru/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (`Qwen3Model`) : Текстовый энкодер класса [Qwen3Model](https://huggingface.co/docs/transformers/en/model_doc/qwen3#transformers.Qwen3Model).

tokenizer (`Qwen2TokenizerFast`) : Токенизатор класса [Qwen2TokenizerFast](https://huggingface.co/docs/transformers/en/model_doc/qwen2#transformers.Qwen2TokenizerFast).

Пайплайн Ovis-Image для генерации изображений по тексту.

Справочник: https://github.com/AIDC-AI/Ovis-Image

#### __call__[[diffusers.OvisImagePipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, negative_prompt: str | list[str] = '', guidance_scale: float = 5.0, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, sigmas: list[float] | None = None, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 256)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/ovis_image/pipeline_ovis_image.py#L457)

**Параметры:**

prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать `prompt_embeds` вместо него.

negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать `negative_prompt_embeds`. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если `guidance_scale` не больше `1`).

guidance_scale (`float`, *необязательный*, по умолчанию 1.0) : Истинная классификаторно-свободная генерация (guidance scale) включается, когда `guidance_scale` > 1 и указан `negative_prompt`.

height (`int`, *optional*, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Высота генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов.

width (`int`, *optional*, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Ширина генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов.

num_inference_steps (`int`, *optional*, по умолчанию 50) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.

sigmas (`list[float]`, *optional*) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент `sigmas` в методе `set_timesteps`. Если не задано, будет использовано поведение по умолчанию при передаче `num_inference_steps`.

num_images_per_prompt (`int`, *необязательный*, по умолчанию 1) : Количество изображений, генерируемых на один запрос.

generator (`torch.Generator` или `list[torch.Generator]`, *необязательный*) : Один или список [генераторов torch](https://pytorch.org/docs/stable/generated/torch.Generator.html) для обеспечения детерминированности генерации.

latents (`torch.FloatTensor`, *необязательный*) : Предварительно сгенерированные шумовые латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Позволяет корректировать одну и ту же генерацию с помощью разных промптов. Если не заданы, тензор латентов будет сгенерирован путём выборки с использованием переданного случайного `generator`.

prompt_embeds (`torch.FloatTensor`, *необязательный*) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента `prompt`.

negative_prompt_embeds (`torch.FloatTensor`, *необязательный*) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента `negative_prompt`.

output_type (`str`, *необязательный*, по умолчанию `"pil"`) : Формат вывода для генерируемого изображения. Выберите между [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` или `np.array`.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли `~pipelines.flux.FluxPipelineOutput` вместо обычного кортежа.

joint_attention_kwargs (`dict`, *необязательный*) : Словарь kwargs, который при указании передается в `AttentionProcessor`, определенный в `self.processor` в [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

callback_on_step_end (`Callable`, *необязательный*) : функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. `callback_kwargs` будет содержать список всех тензоров, как указано в `callback_on_step_end_tensor_inputs`.

callback_on_step_end_tensor_inputs (`List`, *необязательный*) : Список тензорных входных данных для функции `callback_on_step_end`. Тензоры, указанные в списке, будут переданы в качестве аргумента `callback_kwargs`. Вы сможете включать только переменные, перечисленные в атрибуте `._callback_tensor_inputs` вашего класса конвейера.

max_sequence_length (`int` по умолчанию 512) : Максимальная длина последовательности, используемая с `prompt`.

**Возвращает:** [OvisImagePipelineOutput](/docs/diffusers/main/ru/api/pipelines/ovis_image#diffusers.pipelines.ovis_image.OvisImagePipelineOutput) или `tuple`

[OvisImagePipelineOutput](/docs/diffusers/main/ru/api/pipelines/ovis_image#diffusers.pipelines.ovis_image.OvisImagePipelineOutput), если `return_dict` равно True, иначе `tuple`. При возврате кортежа первым элементом является список с сгенерированными изображениями.

Функция, вызываемая при обращении к конвейеру для генерации.

Примеры:
```py
>>> import torch
>>> from diffusers import OvisImagePipeline

>>> pipe = OvisImagePipeline.from_pretrained("AIDC-AI/Ovis-Image-7B", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = 'A creative 3D artistic render where the text "OVIS-IMAGE" is written in a bold, expressive handwritten brush style using thick, wet oil paint. The paint is a mix of vibrant rainbow colors (red, blue, yellow) swirling together like toothpaste or impasto art. You can see the ridges of the brush bristles and the glossy, wet texture of the paint. The background is a clean artist's canvas. Dynamic lighting creates soft shadows behind the floating paint strokes. Colorful, expressive, tactile texture, 4k detail.'
>>> image = pipe(prompt, negative_prompt="", num_inference_steps=50, guidance_scale=5.0).images[0]
>>> image.save("ovis_image.png")
```

#### encode_prompt[[diffusers.OvisImagePipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, max_sequence_length: int = 256, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/ovis_image/pipeline_ovis_image.py#L269)

**Параметры:**

prompt (`str` или `list[str]`, *необязательный*) : промпт для кодирования

negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения. Используется только тогда, когда `do_classifier_free_guidance` равно `True`. Если не задано, используется пустая строка.

do_classifier_free_guidance (`bool`, *необязательный*, по умолчанию `True`) : Нужно ли также кодировать `negative_prompt` для classifier-free guidance.

device : (`torch.device`): устройство torch

num_images_per_prompt (`int`) : количество изображений, которые должны быть сгенерированы для каждого промпта

max_sequence_length (`int`, *необязательный*, по умолчанию 256) : Максимальная длина последовательности, используемая для `prompt`.

prompt_embeds (`torch.FloatTensor`, *необязательный*) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента `prompt`.

negative_prompt_embeds (`torch.FloatTensor`, *необязательный*) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Если не предоставлены, они генерируются из `negative_prompt`.

## OvisImagePipelineOutput[[diffusers.pipelines.ovis_image.OvisImagePipelineOutput]]

#### diffusers.pipelines.ovis_image.OvisImagePipelineOutput[[diffusers.pipelines.ovis_image.OvisImagePipelineOutput]]

```python
diffusers.pipelines.ovis_image.OvisImagePipelineOutput(images: list[PIL.Image.Image, numpy.ndarray])
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/ovis_image/pipeline_output.py#L24)

**Параметры:**

images (`list[PIL.Image.Image]` или `np.ndarray`) : Список денойзированных изображений PIL длиной `batch_size` или массив numpy с формой `(batch_size, height, width, num_channels)`. Изображения PIL или массив numpy представляют денойзированные изображения диффузионного конвейера.

Класс вывода для пайплайнов Ovis-Image.

