PhotoMaker README

The project's README from github.com/TencentARC/PhotoMaker. As one markdown file: README.md.

PhotoMaker: Customizing Realistic Human Photos via Stacked ID Embedding Paper page

[Paper]   [Project Page]   [Model Card]

[💥New 🤗 Demo (PhotoMaker V2)]   [🤗 Demo (Realistic)]   [🤗 Demo (Stylization)]

[Replicate Demo (Realistic)]   [Replicate Demo (Stylization)]   [Jittor version]

PhotoMaker-V2 is supported by the HunyuanDiT team.

🥳 We release PhotoMaker V2. Please refer to comparisons between PhotoMaker V1, PhotoMaker V2, IP-Adapter-FaceID-plus-V2, and InstantID. Please watch this video for how to use our demo. For PhotoMaker V2 ComfyUI nodes, please refer to the Related Resources


🌠 Key Features:

  1. Rapid customization within seconds, with no additional LoRA training.
  2. Ensures impressive ID fidelity, offering diversity, promising text controllability, and high-quality generation.
  3. Can serve as an Adapter to collaborate with other Base Models alongside LoRA modules in community.

TencentARC%2FPhotoMaker | Trendshift

❗❗ Note: If there are any PhotoMaker based resources and applications, please leave them in the discussion and we will list them in the Related Resources section in README file. Now we know the implementation of Replicate, Windows, ComfyUI, and WebUI. Thank you all!

photomaker_demo_fast

🚩 New Features/Updates


🔥 Examples

Realistic generation

Stylization generation

Note: only change the base model and add the LoRA modules for better stylization

🔧 Dependencies and Installation

conda create --name photomaker python=3.10
conda activate photomaker
pip install -U pip

# Install requirements
pip install -r requirements.txt

# Install photomaker
pip install git+https://github.com/TencentARC/PhotoMaker.git

Then you can run the following command to use it

from photomaker import PhotoMakerStableDiffusionXLPipeline

⏬ Download Models

The model will be automatically downloaded through the following two lines:

from huggingface_hub import hf_hub_download
photomaker_path = hf_hub_download(repo_id="TencentARC/PhotoMaker", filename="photomaker-v1.bin", repo_type="model")

You can also choose to download manually from this url.

💻 How to Test

Use like diffusers

import torch
import os
from diffusers.utils import load_image
from diffusers import EulerDiscreteScheduler
from photomaker import PhotoMakerStableDiffusionXLPipeline

### Load base model
pipe = PhotoMakerStableDiffusionXLPipeline.from_pretrained(
    base_model_path,  # can change to any base model based on SDXL
    torch_dtype=torch.bfloat16, 
    use_safetensors=True, 
    variant="fp16"
).to(device)

### Load PhotoMaker checkpoint
pipe.load_photomaker_adapter(
    os.path.dirname(photomaker_path),
    subfolder="",
    weight_name=os.path.basename(photomaker_path),
    trigger_word="img"  # define the trigger word
)     

pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config)

### Also can cooperate with other LoRA modules
# pipe.load_lora_weights(os.path.dirname(lora_path), weight_name=lora_model_name, adapter_name="xl_more_art-full")
# pipe.set_adapters(["photomaker", "xl_more_art-full"], adapter_weights=[1.0, 0.5])

pipe.fuse_lora()
### define the input ID images
input_folder_name = './examples/newton_man'
image_basename_list = os.listdir(input_folder_name)
image_path_list = sorted([os.path.join(input_folder_name, basename) for basename in image_basename_list])

input_id_images = []
for image_path in image_path_list:
    input_id_images.append(load_image(image_path))

# Note that the trigger word `img` must follow the class word for personalization
prompt = "a half-body portrait of a man img wearing the sunglasses in Iron man suit, best quality"
negative_prompt = "(asymmetry, worst quality, low quality, illustration, 3d, 2d, painting, cartoons, sketch), open mouth, grayscale"
generator = torch.Generator(device=device).manual_seed(42)
images = pipe(
    prompt=prompt,
    input_id_images=input_id_images,
    negative_prompt=negative_prompt,
    num_images_per_prompt=1,
    num_inference_steps=num_steps,
    start_merge_step=10,
    generator=generator,
).images[0]
gen_images.save('out_photomaker.png')

Start a local gradio demo

Run the following command:

python gradio_demo/app.py

You could customize this script in this file.

If you want to run it on MAC, you should follow this Instruction and then run the app.py.

Usage Tips:

Related Resources

Replicate demo of PhotoMaker:

  1. Demo link, run PhotoMaker on replicate, provided by @yorickvP and @jd7h.
  2. Demo link (style version).

WebUI version of PhotoMaker:

  1. stable-diffusion-webui-forge: https://github.com/lllyasviel/stable-diffusion-webui-forge provided by @Lvmin Zhang
  2. Fooocus App: Fooocus-inswapper provided by @machineminded

Windows version of PhotoMaker:

  1. bmaltais/PhotoMaker by @bmaltais, easy to deploy PhotoMaker on Windows. The description can be found in this link.
  2. sdbds/PhotoMaker-for-windows by @sdbds.

ComfyUI:

  1. 🔥 Official Implementation by ComfyUI: https://github.com/comfyanonymous/ComfyUI/commit/d1533d9c0f1dde192f738ef1b745b15f49f41e02
  2. https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker
  3. https://github.com/StartHua/Comfyui-Mine-PhotoMaker
  4. https://github.com/shiimizu/ComfyUI-PhotoMaker

ComfyUI (for PhotoMaker V2):

  1. https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus
  2. https://github.com/edwios/ComfyUI-PhotoMakerV2-ZHO/tree/main
  3. https://openart.ai/workflows/shalacai/photomakerv2/fttT4ztRM85JxBJ2eUyr
  4. https://github.com/zhangp365/ComfyUI_photomakerV2_native

Purely C/C++/CUDA version of PhotoMaker:

  1. stable-diffusion.cpp by @bssrdf.

Other Applications / Web Demos

  1. Wisemodel 始智 (Easy to use in China) https://wisemodel.cn/space/gradio/photomaker
  2. OpenXLab (Easy to use in China): https://openxlab.org.cn/apps/detail/camenduru/PhotoMaker Open in OpenXLab by @camenduru.
  3. Colab: https://github.com/camenduru/PhotoMaker-colab by @camenduru
  4. Monster API: https://monsterapi.ai/playground?model=photo-maker
  5. Pinokio: https://pinokio.computer/item?uri=https://github.com/cocktailpeanutlabs/photomaker

Graido demo in 45 lines

Provided by @Gradio

🤗 Acknowledgements

Disclaimer

This project strives to impact the domain of AI-driven image generation positively. Users are granted the freedom to create images using this tool, but they are expected to comply with local laws and utilize it responsibly. The developers do not assume any responsibility for potential misuse by users.

BibTeX

If you find PhotoMaker useful for your research and applications, please cite using this BibTeX:

@inproceedings{li2023photomaker,
  title={PhotoMaker: Customizing Realistic Human Photos via Stacked ID Embedding},
  author={Li, Zhen and Cao, Mingdeng and Wang, Xintao and Qi, Zhongang and Cheng, Ming-Ming and Shan, Ying},
  booktitle={IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
  year={2024}
}

PhotoMaker (TencentARC/PhotoMaker)

controlnet
Searching Database…

What is this?PhotoMaker is an AI tool from Tencent ARC (CVPR 2024) that generates new images of a specific person: you feed in a few reference photos of the face plus a text prompt, and it renders that identity in new scenes, poses, or styles.
Is this an app I install, or a model I call from code?It's research code plus a model rather than a packaged app: you use it like a diffusers pipeline in Python or start a local gradio demo in your browser. Hosted HuggingFace and Replicate demos also exist.
How do I get it running locally?Install Python 3.8 or newer (Anaconda or Miniconda recommended) and PyTorch 2.0 or newer, then run the provided notebook or app.py — the model weights download automatically on first use.
Any tricks for getting a closer likeness of the person?Upload more photos of the person to improve ID fidelity, and for Asian faces add 'Asian' before the class word (e.g. 'Asian woman img'). Reducing sampling steps speeds things up but weakens the likeness.
What GPU do I need, and how fast does it generate?At least 11GB of GPU memory. On GPUs without bfloat16 support, switch to float16 — on a V100 that cut generation from 1 minute per image to 14 seconds.
What's new in PhotoMaker V2?V2 (July 2024) improves ID fidelity while keeping V1's generation quality, editability, and compatibility with existing plugins. A technical report is planned.
Can I use it without writing any code?Yes — there are hosted demos on HuggingFace and Replicate (realistic and stylization versions), a Colab notebook, official ComfyUI nodes for V2, WebUI builds via stable-diffusion-webui-forge and Fooocus, plus ready-made Windows packages.
Does it only make realistic photos, or can it stylize faces too?Both: for stylization you swap the base model and add LoRA modules. If the face comes out too realistic, raise Style strength to 30-50 — the higher the number, the better the stylization but the lower the ID fidelity.
Does it play well with other base models and community LoRAs?Yes — PhotoMaker can serve as an adapter alongside other base models and community LoRA modules. V2 also ships integration scripts for ControlNet, T2I-Adapter, and IP-Adapter, and can be combined with LCM for faster sampling.
Creator
TencentARC
Size
10.2 MB
Stars
10.1K
Updated
CommitOct 31
Age
2y
Commits · 90 Days