
Diffusers 中的 JoyAI-Image-Edit 管线指令引导图像编辑与空间操控实战指南【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusersJoyAI-Image-Edit 是 Diffusers 仓库中集成的统一多模态图像编辑管线它在一个模型框架内同时完成图像理解、文本生成图像与指令引导的图像编辑并额外支持对象移动、对象旋转与相机控制三类空间编辑能力。本文以 docs/source/en/api/pipelines/joyimage_edit.md 为骨架结合src/diffusers/pipelines/joyimage/下的源码实现完整讲解JoyImageEditPipeline的加载、调用、参数语义与空间编辑提示模板帮助读者快速上手可复现的指令式图像编辑流程。模型背景理解、生成、编辑的闭环JoyAI-Image 是一个统一的多模态基础模型核心设计理念是理解—生成—编辑三者间的闭环协作。它由两部分组成8B 多模态大语言模型MLLM负责理解输入图像与文本指令将指令与视觉信息编码为条件向量16B 多模态扩散 TransformerMMDiT负责在潜空间中完成去噪生成输出与条件对齐的编辑结果。从当前仓库源码看这一架构在JoyImageEditPipeline中对应为以下五个子模块见 pipeline_joyimage_edit.py子模块类型职责text_encoderQwen3VLForConditionalGeneration多模态文本编码器理解图文指令tokenizerQwen2Tokenizer与文本编码器配套的分词器processorQwen3VLProcessor处理含内联图像 token 的多图提示transformerJoyImageEditTransformer3DModel3D Transformer 去噪网络MMDiTvaeAutoencoderKLWan潜空间与像素空间互转的编解码器schedulerFlowMatchEulerDiscreteScheduler流匹配 Euler 离散采样器JoyAI-Image-Edit 支持通用图像编辑也支持对象移动、对象旋转、相机控制等空间编辑能力。管线在__init__中注册了全部子模块并声明模型卸载顺序为text_encoder - transformer - vae即model_cpu_offload_seq text_encoder-transformer-vae便于在显存受限时按序将模型逐层卸载到 CPU。快速开始加载管线并完成一次编辑官方文档给出的最小可用示例见 joyimage_edit.md如下通过diffusers直接导入管线即可import torch from diffusers import JoyImageEditPipeline from diffusers.utils import load_image pipeline JoyImageEditPipeline.from_pretrained( jdopensource/JoyAI-Image-Edit-Diffusers, dtypetorch.bfloat16 ) pipeline.to(cuda) # or mps, xpu, cpu image load_image(https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg) prompt Add wings to the astronaut. output pipeline( imageimage, promptprompt, num_inference_steps40, guidance_scale4.0, generatortorch.Generator(cuda).manual_seed(0), ).images[0] output.save(joyimage_edit_output.png)要点说明模型标识权重仓库为jdopensource/JoyAI-Image-Edit-Diffusersfrom_pretrained会自动加载上面表格中的全部组件无需手动拼装。精度选择文档示例使用dtypetorch.bfloat16即源码 docstring 中的torch_dtypetorch.bfloat16大幅降低显存占用是官方推荐的推理精度。设备支持pipeline.to(...)支持cuda、mps、xpu、cpu四种目标设备按实际硬件选择。image为可选参数从 pipeline_joyimage_edit.py 的__call__签名可以看到image传入时管线进入参考图编辑模式源码中num_items 2省略image时则退化为纯文本到图像生成num_items 1实现一条管线两种用法。输出对象返回的是JoyImageEditPipelineOutput取.images[0]得到第一张 PIL 图像再调用save()落盘。空间编辑三类官方提示模板空间编辑是 JoyAI-Image 的特色能力官方文档强调尽可能严格遵循以下提示模板以获得最佳效果。模板中的object为对象描述view为视角取值。对象移动Object Move将目标对象移动到输入图像中红色方框标记的指定区域Move the object into the red box and finally remove the red box.该模板的语义是移动对象进红框并最终移除红框即红框只作为空间目标标记不应残留在结果中。对象旋转Object Rotation将对象旋转到指定的规范视角canonical view。view支持八种取值frontrightleftrearfront rightfront leftrear rightrear left对应提示模板Rotate the object to show the view side view.例如Rotate the car to show the rear right side view.会把汽车旋转到右后方视角。相机控制Camera Control在保持 3D 场景不变的前提下改变相机视角Move the camera. - Camera rotation: Yaw {y_rotation}°, Pitch {p_rotation}°. - Camera zoom: in/out/unchanged. - Keep the 3D scene static; only change the viewpoint.模板以结构化清单形式描述旋转角度Yaw/Pitch单位为度、缩放方向in/out/unchanged并强调场景静止、仅视角变化这一约束帮助模型将编辑意图限定在相机位姿层面。以上模板源于 joyimage_edit.md 的 Spatial editing 一节其背后对应的评测与提示工程规范可参考该节提及的 SpatialEdit 相关工作。源码视角JoyImageEditPipeline的核心实现图文条件编码Qwen3-VL 的双路径管线对提示词的处理分为两条路径均由 pipeline_joyimage_edit.py 中的encode_prompt与encode_prompt_multiple_images实现纯文本路径_get_qwen_prompt_embeds用系统模板包裹提示词送入 Qwen3-VL 编码后截掉开头的系统提示 tokenprompt_template_encode_start_idx中记录的 34 个 token再按text_token_max_length默认 2048做 padding 与截断。多图路径encode_prompt_multiple_images将提示中的image\n占位符替换为 Qwen 视觉专用 token|vision_start||image_pad||vision_end|通过Qwen3VLProcessor将图像与文本一起送入多模态编码器。值得注意的一个实现细节是_get_last_decoder_hidden_states辅助函数它通过前向钩子直接挂接 Qwen3-VL 最后一个 decoder 层取回归一化前的隐状态。源码注释说明由于 transformers 版本演进从 4.57 的check_model_inputs到 5.x 的capture_outputs迁移hidden_states[-1]的语义可能从 pre-norm 变为 post-norm二者存在约 10 倍的数值尺度差异std ≈ 2 vs ≈ 21会直接破坏推理。该辅助函数绕开了两个版本机制保证跨 transformers 版本的稳定性。输入预处理Bucket 分辨率与居中裁剪管线使用自定义的 JoyImageEditImageProcessor 完成输入规范化Bucket 分辨率选择get_default_height_width将输入图像或显式指定的 height/width缺省时取 1024×1024映射到BUCKETS中面积最接近 1024² 的预定义分辨率桶find_best_bucket按宽高比最近原则选择。桶列表覆盖从 512×2048 到 2048×512 的数十种宽高组合保证任意输入都能找到合适的训练分布内分辨率。Resize Center Cropresize_center_crop先按覆盖目标尺寸的比例放大再做居中裁剪避免内容形变。该处理器是VaeImageProcessor的子类vae_scale_factor默认为 8与 WAN VAE 的空间下采样倍数一致。潜空间准备与归一化prepare_latentspipeline_joyimage_edit.py完成两类潜变量的构造目标噪声潜变量形状为(B, 1, C, T, H, W)其中时间维T对图像推理固定为 1空间维按 VAE 缩放因子下采样未提供latents时使用randn_tensor采样标准高斯噪声传入generator可复现结果。参考图潜变量若传入image则将 PIL 图转为[-1, 1]的 RGB 张量经 VAE 编码后按通道统计量归一化normalize_latents使用latents_mean/latents_std否则退化为乘scaling_factor。编辑模式下二者沿第 1 维拼接参考图槽位在每步去噪前会被重新写回确保条件信息不被采样器覆盖。去噪循环与 CFG去噪过程由FlowMatchEulerDiscreteScheduler驱动retrieve_timesteps支持三种调度指定方式num_inference_steps、自定义timesteps、自定义sigmas三者互斥后两者需要调度器原生支持。在guidance_scale 1时启用 classifier-free guidanceCFG未提供负向提示时管线自动以空字符串构造负向条件pipeline_joyimage_edit.py计算条件与无条件预测后按noise_pred_uncond guidance_scale * (noise_pred - noise_pred_uncond)组合额外执行guidance rescaling将组合预测的范数重新缩放到与条件预测一致抑制 CFG 导致的过曝。每步结束时支持callback_on_step_end回调可获取latents、prompt_embeds等张量也可通过interrupt属性中断循环。解码与输出去噪结束后潜变量经denormalize_latents还原尺度由 WAN VAE 解码为像素图随后从多槽位结果中取出目标槽最后一个 item[:, -1]经VaeImageProcessor.postprocess输出。output_type支持pil默认与latent返回原始潜变量return_dictFalse时直接返回张量元组否则返回 JoyImageEditPipelineOutput其唯一字段images为 PIL 图像列表或np.ndarray。__call__关键参数速查综合官方文档与源码签名pipeline_joyimage_edit.pyJoyImageEditPipeline调用时最常用的参数如下参数默认值说明imageNone参考图像传入即进入编辑模式省略则纯文生图promptNone文本指令与prompt_embeds二选一height/width由 bucket 决定输出分辨率会被就近映射到 1024 桶列表num_inference_steps40去噪步数越多质量越高但耗时越长timesteps/sigmasNone自定义采样调度与num_inference_steps互斥guidance_scale4.0CFG 强度1 时启用 classifier-free guidancenegative_prompt空字符串负向提示抑制不希望出现的内容num_images_per_prompt1每个提示生成的样本数generatorNone随机数生成器保证可复现latentsNone预生成的初始噪声用于从特定噪声起步prompt_embeds/prompt_embeds_maskNone预计算提示嵌入绕过在线编码max_sequence_length4096提示编码的最大序列长度output_typepilpil或latentreturn_dictTrue是否返回JoyImageEditPipelineOutputcallback_on_step_endNone每步结束回调可修改latents等张量enable_denormalizationTrue解码前是否对潜变量做反归一化其中check_inputs会校验若干约束prompt与prompt_embeds不能同时传入、二者必须至少提供一个、提供prompt_embeds时必须同时提供prompt_embeds_mask、负向提示同理。从测试用例看行为边界仓库中 tests/pipelines/joyimage/test_joyimage_edit.py 对管线行为做了系统验证可作为理解实现边界的参考测试配置类将管线归类为TEXT_GUIDED_IMAGE_VARIATION_PARAMS文本引导的图像变体支持prompt与image的批量输入输出形状为(3, 32, 32)由于find_best_bucket只认识 1024 分辨率桶测试用patch将其固定返回(32, 32)侧面印证了 bucket 映射是管线中强制执行的预处理环节测试通过tiny-random的 Qwen3-VL 权重与极小尺寸的JoyImageEditTransformer3DModel、AutoencoderKLWan构造哑组件验证了组件间接口契约MemoryTesterMixin派生类专门覆盖 CPU offload、group offload、layerwise casting 等显存优化路径。此外tests/models/transformers/test_models_transformer_joyimage.py覆盖了 3D Transformer 网络本身管线模块的公开接口JoyImageEditPipeline、JoyImageEditPipelineOutput等均已在 src/diffusers/init.py 中导出可直接从diffusers顶层导入。结语JoyAI-Image-Edit 把理解—生成—编辑闭环压缩进一条 Diffusers 管线Qwen3-VL 负责图文理解16B MMDiT 负责条件去噪WAN VAE 负责像素还原配合 bucket 分辨率适配、潜变量归一化与 guidance rescaling 等工程细节使得对象移动、旋转、相机控制等空间编辑只需一条结构化的提示模板即可完成。上手时建议从官方示例开始逐步调整num_inference_steps、guidance_scale与空间编辑模板并在显存受限场景下启用 bfloat16 精度与 CPU offload。【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考