Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
a082315
feat: add image edit plus
Jun 18, 2026
d6375a8
refactor: remove debug code
Jun 22, 2026
885186a
fix: address review issues for JoyImage Edit Plus
Jun 23, 2026
aa2f563
fix: add missing newline at end of pipeline_output.py
Jun 23, 2026
8a911e5
fix: add missing newline at end of pipeline_output.py
Jun 23, 2026
1344fd0
doc: add joyimage-edit-plus doc
Jun 24, 2026
53d0b33
refactor: update code format
Jun 24, 2026
4f6cb76
refactor: update code formate
Jun 25, 2026
d63e322
refactor: merge edit-plus conversion script into convert_joyimage_edi…
Jul 2, 2026
f170222
revert: remove unnecessary attention_mask change from transformer_joy…
Jul 2, 2026
b653dc4
Merge branch 'main' into add-joyimage-edit-plus
dg845 Jul 3, 2026
31421c1
Apply style fixes
github-actions[bot] Jul 3, 2026
33f550d
fix: remove stale Copied-from annotations that diverged from source
Jul 3, 2026
2612cb6
Merge branch 'main' into add-joyimage-edit-plus
dg845 Jul 3, 2026
ac7a4b6
fix: address CI check failures for edit-plus PR
Jul 3, 2026
46bb713
Merge branch 'main' into add-joyimage-edit-plus
tangyanf Jul 3, 2026
3fa516a
fix: use VAE dtype instead of float32 cast in edit-plus pipeline
Jul 3, 2026
1701f61
refactor: address dg845 review comments on edit-plus
Jul 6, 2026
6cbdd17
fix: guard against division-by-zero in CFG norm rescaling
Jul 6, 2026
cd1328f
Merge branch 'main' into add-joyimage-edit-plus
tangyanf Jul 6, 2026
da5c16c
Merge branch 'main' into add-joyimage-edit-plus
dg845 Jul 6, 2026
87920e8
style: run ruff format on edit-plus pipeline
Jul 7, 2026
4e93efc
Merge branch 'main' into add-joyimage-edit-plus
tangyanf Jul 7, 2026
8822e45
Merge branch 'main' into add-joyimage-edit-plus
dg845 Jul 7, 2026
967a4ba
refactor: address dg845 second-round review comments
Jul 7, 2026
5a831a3
Merge branch 'main' into add-joyimage-edit-plus
tangyanf Jul 7, 2026
1be91a0
Merge branch 'main' into add-joyimage-edit-plus
dg845 Jul 7, 2026
c9a6f17
Apply style fixes
github-actions[bot] Jul 7, 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
4 changes: 4 additions & 0 deletions docs/source/en/_toctree.yml
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,8 @@
title: Ideogram4Transformer2DModel
- local: api/models/transformer_joyimage
title: JoyImageEditTransformer3DModel
- local: api/models/transformer_joyimage_edit_plus
title: JoyImageEditPlusTransformer3DModel
- local: api/models/krea2_transformer2d
title: Krea2Transformer2DModel
- local: api/models/latte_transformer3d
Expand Down Expand Up @@ -555,6 +557,8 @@
title: InstructPix2Pix
- local: api/pipelines/joyimage_edit
title: JoyImage Edit
- local: api/pipelines/joyimage_edit_plus
title: JoyImage Edit Plus
- local: api/pipelines/kandinsky
title: Kandinsky 2.1
- local: api/pipelines/kandinsky_v22
Expand Down
29 changes: 29 additions & 0 deletions docs/source/en/api/models/transformer_joyimage_edit_plus.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<!--Copyright 2025 The HuggingFace Team. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.
-->

# JoyImageEditPlusTransformer3DModel

The model can be loaded with the following code snippet.

```python
from diffusers import JoyImageEditPlusTransformer3DModel

transformer = JoyImageEditPlusTransformer3DModel.from_pretrained("jdopensource/JoyAI-Image-Edit-Plus-Diffusers", subfolder="transformer", torch_dtype=torch.bfloat16)
```

## JoyImageEditPlusTransformer3DModel

[[autodoc]] JoyImageEditPlusTransformer3DModel

## Transformer2DModelOutput

[[autodoc]] models.modeling_outputs.Transformer2DModelOutput
61 changes: 61 additions & 0 deletions docs/source/en/api/pipelines/joyimage_edit_plus.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<!--Copyright 2025 The HuggingFace Team. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.
-->

# JoyAI-Image-Edit-Plus

[JoyAI-Image](https://github.com/jd-opensource/JoyAI-Image) is a unified multimodal foundation model for image understanding, text-to-image generation, and instruction-guided image editing. It combines an 8B Multimodal Large Language Model (MLLM) with a 16B Multimodal Diffusion Transformer (MMDiT).

JoyAI-Image-Edit-Plus is a multi-image instruction-guided editing model that accepts **multiple reference images** and a text instruction to generate a new image that combines elements from the references according to the instruction. It supports 1–5 reference images per sample.

| Model | Description | Download |
|:-----:|:-----------:|:--------:|
| JoyAI-Image-Edit-Plus | Multi-image instruction-guided editing with element composition from multiple references | [Hugging Face](https://huggingface.co/jdopensource/JoyAI-Image-Edit-Plus-Diffusers) |

```python
import torch
from PIL import Image
from diffusers import JoyImageEditPlusPipeline

pipeline = JoyImageEditPlusPipeline.from_pretrained(
"jdopensource/JoyAI-Image-Edit-Plus-Diffusers", torch_dtype=torch.bfloat16
)
pipeline.to("cuda")

images = [
Image.open("reference_0.png").convert("RGB"),
Image.open("reference_1.png").convert("RGB"),
]

target_h, target_w = pipeline.vae_image_processor.get_default_height_width(images[-1])
Comment thread
tangyanf marked this conversation as resolved.
Outdated

output = pipeline(
images=images,
prompt="Combine the person from the second image with the scene from the first image.",
negative_prompt="low quality, blurry, deformed",
height=target_h,
width=target_w,
num_inference_steps=30,
guidance_scale=4.0,
generator=torch.Generator("cuda").manual_seed(42),
).images[0]
output.save("joyimage_edit_plus_output.png")
```

## JoyImageEditPlusPipeline

[[autodoc]] JoyImageEditPlusPipeline
- all
- __call__

## JoyImageEditPlusPipelineOutput

[[autodoc]] pipelines.joyimage.pipeline_output.JoyImageEditPlusPipelineOutput
Loading
Loading