Diffusers documentation

P-H3-Image

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

P-H3-Image

P-H3-Image 是由 Pruna AI 基于 MiniMax-H3 构建的图像模型,用于文本生成图像以及基于指令的图像编辑。您可以在 PrunaAI/P-H3-Image 找到该检查点。

import torch
from diffusers import ComponentsManager, ModularPipeline

manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")  # or "mps", "xpu"

pipe = ModularPipeline.from_pretrained("PrunaAI/P-H3-Image", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)

prompt = (
    "A German Expressionist oil painting of a Berlin street at night in the manner of Ernst Ludwig Kirchner, "
    "with gaunt figures hurrying past a glowing gas lamp."
)
image = pipe(prompt=prompt, height=3360, width=2496, generator=torch.Generator().manual_seed(3), output="images")[0]
edited = pipe(prompt="let it snow on the street", image=image, output="images")[0]

每个请求都会先经过 prompt upsampler。当所有组件都位于加速器上时,该流水线在 8 兆像素下以 bfloat16 精度运行大约需要 101 GB 显存,因此示例使用了自动卸载:当某个块需要某个组件时,ComponentsManager 会将其移动到加速器上,从而使流水线能够在 80 GB 的 GPU 上运行。

组件

组件类
transformerMiniMaxH3Transformer3DModel
text_encoderQwen3VLForConditionalGeneration(Qwen3-VL-4B)
text_connectorPH3ImageTextConnector
vaeAutoencoderKLPH3Image
tokenizer, processor文本编码器的分词器,以及一个带有 MiniMax-H3 图像处理器的 Qwen3VLProcessor
scheduler, audio_schedulerMiniMaxH3Scheduler
prompt_upsampler, prompt_upsampler_processorQwen3_5ForConditionalGeneration(基于 Qwen3.5-9B)及其处理器

工作流程

工作流在 image 输入上选择:

  • text2image 根据 prompt 生成图像。height 和 width 的默认值为 2912,并会四舍五入到 32 的倍数。该模型在 800 万像素下表现最佳,例如 2912x2912、3872x2176 或 2176x3872。
  • image_conditioned 根据 prompt 中的指令对 image 进行编辑,在 4 或 8 百万像素下效果最佳。图像会以约 vision_pixels(一百万像素)的分辨率编码供文本编码器使用,并以自身尺寸编码供 VAE 使用;若超出该范围,则会放大至 reference_min_pixels(一百万像素)或缩小至 reference_max_pixels(八百万像素)。若未指定 height 和 width,则编辑结果将按第一张图像的尺寸生成,若该尺寸较小,则会放大至 canvas_min_pixels(四百万像素)。若传入 height 和 width(会取整为 32 的倍数),则会改变画布尺寸,但不会改变图像本身。image 也可以是包含最多 8 张图像的列表:第一张为待编辑图像,其余为参考图像,分别对应 <Picture 2>、<Picture 3> 等。

提示词上采样

P-H3-Image 旨在渲染完整的提示词,而非简短的请求,因此流水线会在每个请求上首先运行提示词扩展器。它会先思考该请求,然后撰写提示词:针对 height 和 width 宽高比的详细文生图提示词,或者在编辑时,一份关于保留哪些内容以及修改哪些内容的说明。它撰写的提示词会作为 prompt 输出返回。

out = pipe(prompt=prompt, height=3360, width=2496, output=["images", "prompt"])
print(out["prompt"])

max_new_tokens 同时限制推理和提示词的总长度,文本到图像任务默认为 1024 个 token,编辑任务默认为 1536 个 token。如果上采样器未返回可用的提示词,流水线将抛出错误,而不是直接渲染。

要将 prompt 按原样渲染,请从 blocks 中弹出该步骤。弹出的 block 也可以独立运行,例如在渲染之前先向用户展示 prompt:

manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")

blocks = ModularPipeline.from_pretrained("PrunaAI/P-H3-Image").blocks
upsampler_block = blocks.sub_blocks.pop("prompt_upsampler")

upsampler = upsampler_block.init_pipeline("PrunaAI/P-H3-Image", components_manager=manager)
upsampler.load_components(dtype=torch.bfloat16)
upsampled = upsampler(prompt=prompt, height=3360, width=2496, output="prompt")

pipe = blocks.init_pipeline("PrunaAI/P-H3-Image", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)
image = pipe(prompt=upsampled, height=3360, width=2496, output="images")[0]

如果没有该步骤,无论 upsampler 以哪种形式编写的编辑提示——六段式简报,还是以 Edit <Picture 1>. 开头的段落——都会按原样进行编码;其他任何指令都会加上该前缀。

采样

  • 这 8 个步骤在检查点的 sample_sigmas 上运行。传入 sigmas 以使用另一个网格。
  • 该模型经过引导蒸馏,因此没有 guider、negative_prompt 或 guidance_scale。

PH3ImageModularPipeline

class diffusers.PH3ImageModularPipeline

< >

( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )

用于 P-H3-Image 的 ModularPipeline,这是一个基于 MiniMax-H3 的图像模型,支持文本生成图像(text2image)和基于指令的编辑(image_conditioned)。

该图像是一个单帧潜在表示,在一个打包序列中完成去噪,其中包含两个被丢弃的音频潜在表示。

import torch
from diffusers import ComponentsManager, ModularPipeline

manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")

pipe = ModularPipeline.from_pretrained("PrunaAI/P-H3-Image", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)
prompt = (
    "A German Expressionist oil painting of a Berlin street at night in the manner of Ernst Ludwig Kirchner, "
    "with gaunt figures hurrying past a glowing gas lamp."
)
image = pipe(prompt=prompt, height=3360, width=2496, output="images")[0]

PH3ImageBlocks

class diffusers.PH3ImageBlocks

< >

( )

P-H3-Image 的模块化流水线块:text2image,以及在传入 image 时基于指令的编辑(image_conditioned)。prompt 会先经过提示词增强器;若移除 prompt_upsampler 步骤,则按原样渲染。

支持的工作流:

  • text2image:需要 prompt
  • image_conditioned:需要 prompt、image

组件: image_processor (VaeImageProcessor) prompt_upsampler (Qwen3_5ForConditionalGeneration):提示词上采样器。 prompt_upsampler_processor (AutoProcessor):其处理器。 text_encoder (Qwen3VLForConditionalGeneration) text_connector (PH3ImageTextConnector) tokenizer (Qwen2Tokenizer) processor (Qwen3VLProcessor) vae (AutoencoderKLPH3Image) scheduler (MiniMaxH3Scheduler) audio_scheduler (MiniMaxH3Scheduler) transformer (MiniMaxH3Transformer3DModel)

配置: reference_min_pixels(默认值:1048576)reference_max_pixels(默认值:8388608)canvas_min_pixels(默认值: 4194304)vision_pixels(默认值:1000000)sample_sigmas(默认值:[1.0, 0.984753, 0.967905, 0.951688, 0.925372, 0.881923, 0.810083, 0.528718, 0.0]):检查点的采样网格,在未传入 sigmas 时使用。

输入: image (Image | list, 可选): 要编辑的图像,或最多 8 张图像的列表:第一张将被编辑,其余作为参考。 height (int, 可选): 生成图像的高度(以像素为单位),会四舍五入到 32 的倍数。对于 text2image,默认值为 2912, 在 800 万像素下效果最佳。编辑操作的默认值为第一张图像的尺寸,至少为 canvas_min_pixels,在 400 万或 800 万像素下效果最佳。 width (int, 可选): 生成图像的宽度(以像素为单位),会四舍五入到 32 的倍数。对于 text2image,默认值为 2912, 在 800 万像素下效果最佳。编辑操作的默认值为第一张图像的尺寸,至少为 canvas_min_pixels,在 400 万或 800 万像素下效果最佳。 prompt (str): 提示词,或者当传入 image 时的编辑指令。单个字符串。 max_new_tokens (int, 可选,默认值为 1536 或 1024,取决于工作流): 上采样器(包括其推理过程)可能生成的最大 token 数。 vision_images (list, 可选): 为文本编码器调整大小的编辑图像,待编辑的图像排在第一位。 reference_images (list, 可选): 为 VAE 调整大小的编辑图像,待编辑的图像排在第一位。 condition_latents (list, 可选): 编辑图像的条件潜变量。它们的形状决定了参考块的几何结构。 generator (Generator, 可选): 请求的生成器。条件噪声首先从中抽取,每个条件抽取一次, 然后才是生成行的噪声。 latents (Tensor): 形状为 (1, latent_channels, 1, latent_height, latent_width) 的预生成图像噪声,用于替代随机抽取。 sigmas (list, 可选): 自定义采样网格,严格递减并以 0 结尾。默认值为检查点的 sample_sigmas。 *denoiser_input_fields (None,可选): Transformer 按名称读取的打包序列的结构描述:token_tags、position_ids 以及三个行索引张量。 attention_kwargs (dict,可选): 用于注意力处理器的额外 kwargs。 output_type (str,可选*,默认值为 pil): 输出格式:‘pil’、‘np’、‘pt’。

输出: images (list): 生成的图像。

PH3ImageTextConnector

class diffusers.PH3ImageTextConnector

< >

( hidden_state_indices: tuple = (13, 19, 25, 31, 36)text_hidden_size: int = 2560out_channels: int = 5120 )

参数

  • hidden_state_indices (tuple[int, ...],默认为 (13, 19, 25, 31, 36)) — 读取文本编码器 hidden_states 中的哪些条目,编号方式与 output_hidden_states 一致 (0 为嵌入输出,i 为解码器第 i 层的输出,最后一个为最终归一化后的隐藏状态)。
  • text_hidden_size (int,默认为 2560) — 文本编码器的隐藏层大小。
  • out_channels (int,默认为 5120) — MiniMax-H3 的 transformer 读取的条件信息的通道数。

将 P-H3-Image 的 Qwen3-VL 文本编码器的隐藏状态映射到其 Transformer 所读取的文本条件。

hidden_state_indices 中列出的隐藏状态会被拼接、标准化、线性投影,然后去标准化。第一个 token 是一个注意力汇聚点(attention sink),对于每个 prompt 都具有相同的条件,因此它会被替换为 sink_embedding。

forward

< >

( hidden_states: tuple ) → torch.Tensor

参数

  • hidden_states (tuple[torch.Tensor, ...]) — 文本编码器的隐藏状态,即 output_hidden_states=True 返回的内容:每个条目为一个形状为 (batch_size, num_tokens, text_hidden_size) 的张量。

返回值

torch.Tensor

条件输入,形状为 (batch_size, num_tokens, out_channels),数据类型与连接器的参数一致。

Update on GitHub