Technical Article

P-H3-Image: Turning a SOTA Video Model into an Efficient Open Image Model

We are releasing P-H3-Image, an open-weights model for text-to-image generation and image editing, built on the MiniMax-H3 video model. It renders images from 2 to 16 megapixels, edits with up to 9 input images, and shines at photorealism and cinematic scenes.

To get there, we reworked every part of H3: the prompt upsampler, the text encoder, the diffusion schedule, the transformer backbone, and the decoder. The result is 7x smaller than H3 (20 GB instead of 143 GB in its smallest version) and 5x faster (2.6 s instead of 12.4 s for a 4 MP image on one B200), and it runs in about 21 GB of VRAM for 8 MP images.

Weights PrunaAI/P-H3-Image · ComfyUI P-H3-Image-Comfy · Playground Hugging Face Spaces

Why start from a video model?

To keep its frames consistent, a video model has to learn how objects look from different angles, how light falls on materials, and how bodies move. That makes it a strong starting point for an image model. We already tested this idea with Wan Image, built on Wan 2.1. When MiniMax released H3 with open weights this summer, we wanted to see how far it could go.

Out of the box, H3 can already produce single images, but they come out soft and blurry, and the model is too large and slow for most people to run. P-H3-Image fixes both.

How it works

We updated every component of H3. Below is a breakdown of each component, presented in the order it's used during image generation.

  • Prompt upsampler. H3 is very sensitive to how prompts are written. We trained a small upsampler, based on Qwen3.5-9B, that turns a short request into a prompt that H3 understands well. Compared to other upsamplers, it keeps prompts short and images natural rather than glossy.

The same short request and seed, rewritten by Qwen-Image 2.1's prompt enhancer (left) and by our upsampler (right).

  • Text encoder. H3 reads prompts with a 32B text encoder, as large as the image model itself. We reduced it to 4B with distillation, training the small encoder to produce the same signal as the large one. It weighs 9 GB instead of 67 GB, and images keep the same quality.

  • Diffusion. H3's schedule is tuned for video and settles most of the image at high noise. We adapted it to bring out fine detail. Further, we reduced the number of steps from 50 to 8 with advanced DMD distillation. It makes the model about 5x faster, while keeping H3's natural look. Because H3 compresses images strongly, it also needs higher resolutions: 8 MP gives the best quality; 4 MP is a good trade-off for speed.

  • Transformer backbone. We replaced the block that processes the timestep, representing 40% of H3's transformer, with a much smaller equivalent that yields almost identical results without retraining. The backbone goes from 33B to 20B parameters.

  • Decoder. H3's decoder was trained to decode video, several frames at a time. Given a single frame, it returns blurry images, or might be slow. Instead, we trained a decoder that turns one frame directly into one sharp image, while keeping fast decoding.

  • Quantization. Finally, we quantized all relevant components to 8-bit and 4-bit for minimal size. The smallest set is a 20 GB download, instead of 143 GB for H3.

How it performs

Quality

P-H3-Image is the strongest at documentary and editorial photography, portraits with real skin texture, film stills, anime frames, drawings, prints, and graphic design with short text.

Risograph print, child's crayon drawing, 1960s color photograph, 1970s film still.

For most prompts, the 8-step model matches the 50-step original.

Same prompt and seed at 8 MP: MiniMax-H3 as released (50 steps) and P-H3-Image (8 steps).

It can also edit images and combine up to 8 references into one scene, a skill inherited from H3's training to build videos from reference images.

Eight public-domain portraits composed into one dinner party from a one-sentence request.

Limitations. Very short, overly long, or hype-heavy prompts can weaken results. Hands, small background figures, and fine details may appear distorted, especially below 8 MP. Small or dense text, such as body copy or code, is unreliable; short quoted text works well.

Speed

Time per image

MiniMax-H3

P-H3-Image

4 MP, B200, bf16

12.4 s

2.6 s

8 MP, B200, bf16

30.6 s

5.8 s

4 MP, L40S (48 GB)

19 s (bf16, offloaded)

6.3 s (4-bit)

B200 numbers compare 50 and 8 steps without further optimizations. L40S numbers compare our bf16 and 4-bit ComfyUI sets.

Memory


MiniMax-H3

P-H3-Image bf16

P-H3-Image 4-bit

Download size

143 GB

55 GB

20 GB

Peak VRAM at 8 MP

–

56 GB

21 GB

The 8-bit version maintains high fidelity to bf16. The 4-bit version keeps the quality but can change small details and sometimes the composition.

The same prompts and seed in bf16, int8 and 4-bit, at 8 MP.

How to use it

Diffusers. P-H3-Image ships as a Modular Diffusers pipeline, with the prompt upsampler on by default.

import torch
from diffusers import ModularPipeline

pipe = ModularPipeline.from_pretrained("PrunaAI/p-h3-image")
pipe.load_components(dtype=torch.bfloat16)
pipe.to("cuda")

# Generate at 8 MP
image = pipe(prompt="a red fox in fresh snow at first light",
             height=2912, width=2912, output="images")[0]

# Edit with one image, or a list of up to nine
edited = pipe(prompt="make it night, with a full moon", image=image, output="images")[0]
import torch
from diffusers import ModularPipeline

pipe = ModularPipeline.from_pretrained("PrunaAI/p-h3-image")
pipe.load_components(dtype=torch.bfloat16)
pipe.to("cuda")

# Generate at 8 MP
image = pipe(prompt="a red fox in fresh snow at first light",
             height=2912, width=2912, output="images")[0]

# Edit with one image, or a list of up to nine
edited = pipe(prompt="make it night, with a full moon", image=image, output="images")[0]
import torch
from diffusers import ModularPipeline

pipe = ModularPipeline.from_pretrained("PrunaAI/p-h3-image")
pipe.load_components(dtype=torch.bfloat16)
pipe.to("cuda")

# Generate at 8 MP
image = pipe(prompt="a red fox in fresh snow at first light",
             height=2912, width=2912, output="images")[0]

# Edit with one image, or a list of up to nine
edited = pipe(prompt="make it night, with a full moon", image=image, output="images")[0]

In bf16, the diffusers pipeline needs a large GPU (about 100 GB at 8 MP with the upsampler). On smaller GPUs, use the quantized ComfyUI weights.

ComfyUI. Download the weights from PrunaAI/P-H3-Image-Comfy in bf16, 8-bit or 4-bit. ComfyUI supports P-H3-Image natively so no custom nodes are required

Prompting tips. The upsampler handles this for you, but if you write prompts yourself:

  • Start by saying what the image is: "a photograph by a street photographer", "a frame from an anime TV series".

  • Describe one scene: a viewpoint, one main subject, and where the light comes from.

  • Put any text you want in the image in quotes, and keep it short.

  • Skip hype words like "stunning", "8k" or "masterpiece". They make images glossy and oversaturated.

  • For edits, describe the finished result and say what must stay unchanged: "Edit <Picture 1>. The pickup truck is red. Keep everything else exactly as it is."

The first sentence says what the image is (bold), and every string that must appear is quoted (blue). The handwriting follows the quoted text almost word for word.

Enjoy the Quality and Efficiency!


—


License. P-H3-Image is based on MiniMax-H3 and released under the MiniMax H3 Community License. Please read it before use. Among other terms, it excludes the European Union, the United Kingdom, the Republic of Korea, and the United States unless you have a separate license from MiniMax, and products built on it must show "Powered by MiniMax H3". The text encoder's Qwen3-VL-4B parts and the prompt upsampler, based on Qwen3.5-9B, are under the Apache License 2.0. See NOTICE for details. The ComfyUI nodes are MIT-licensed.

Curious what Pruna can do for your models?

Whether you're running GenAI in production or exploring what's possible, Pruna makes it easier to move fast and stay efficient.

Curious what Pruna can do for your models?

Whether you're running GenAI in production or exploring what's possible, Pruna makes it easier to move fast and stay efficient.

Curious what Pruna can do for your models?

Whether you're running GenAI in production or exploring what's possible, Pruna makes it easier to move fast and stay efficient.