Instructions to use neuralvfx/LibreFlux-IP-Adapter-SAM-ControlNet with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use neuralvfx/LibreFlux-IP-Adapter-SAM-ControlNet with Diffusers:
pip install -U diffusers transformers accelerate
import torch from diffusers import DiffusionPipeline # switch to "mps" for apple devices pipe = DiffusionPipeline.from_pretrained("neuralvfx/LibreFlux-IP-Adapter-SAM-ControlNet", dtype=torch.bfloat16, device_map="cuda") prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" image = pipe(prompt).images[0] - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- Draw Things
- DiffusionBee
| license: | |
| - apache-2.0 | |
| - other | |
| license_name: flux-1-dev-non-commercial-license | |
| license_link: https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/LICENSE.md | |
| library_name: diffusers | |
| pipeline_tag: text-to-image | |
| datasets: | |
| - SA1B | |
| - opendiffusionai/laion2b-squareish-1024px | |
| base_model: | |
| - jimmycarter/LibreFLUX | |
| # LibreFLUX-IP-Adapter-ControlNet | |
|  | |
| This model/pipeline combines my [LibreFlux-IP-Adapter](https://huggingface.co/neuralvfx/LibreFlux-IP-Adapter) and [LibreFlux ControlNet](https://huggingface.co/neuralvfx/LibreFlux-ControlNet), into a single pipeline. [LibreFLUX](https://huggingface.co/jimmycarter/LibreFLUX) is used as the underlying Transformer model. | |
| # How does this relate to LibreFLUX? | |
| - Base model is [LibreFLUX](https://huggingface.co/jimmycarter/LibreFLUX) | |
| - Trained in same non-distilled fashion | |
| - Uses Attention Masking | |
| - Uses CFG during Inference | |
| # Compatibility | |
| ```py | |
| pip install -U diffusers==0.35.2 | |
| pip install -U transformers==4.57.1 | |
| ``` | |
| Low VRAM: | |
| ```py | |
| pip install optimum.quanto | |
| ``` | |
| # Load Pipeline | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| from huggingface_hub import hf_hub_download | |
| model_id = "neuralvfx/LibreFlux-IP-Adapter-ControlNet" | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| dtype = torch.bfloat16 if device == "cuda" else torch.float32 | |
| pipe = DiffusionPipeline.from_pretrained( | |
| model_id, | |
| custom_pipeline=model_id, | |
| trust_remote_code=True, | |
| torch_dtype=dtype, | |
| safety_checker=None | |
| ) | |
| # Optional way to download the weights | |
| hf_hub_download(repo_id="neuralvfx/LibreFlux-IP-Adapter-ControlNet", | |
| filename="ip_adapter.pt", | |
| local_dir=".", | |
| local_dir_use_symlinks=False) | |
| pipe.load_ip_adapter('ip_adapter.pt') | |
| pipe.to(device) | |
| ``` | |
| # Inference | |
| ```py | |
| from PIL import Image | |
| from torchvision.transforms import ToTensor | |
| # Optional way to download test Control Net Image | |
| hf_hub_download(repo_id="neuralvfx/LibreFlux-IP-Adapter-ControlNet", | |
| filename="examples/libre_flux_control_image.png", | |
| local_dir=".", | |
| local_dir_use_symlinks=False) | |
| # Load Control Image | |
| cond = Image.open("examples/libre_flux_control_image.png").convert("RGB") | |
| cond = cond.resize((1024, 1024)) | |
| # Optional way to download test IP Adapter Image | |
| hf_hub_download(repo_id="neuralvfx/LibreFlux-IP-Adapter-ControlNet", | |
| filename="examples/merc.jpeg", | |
| local_dir=".", | |
| local_dir_use_symlinks=False) | |
| # Load IP Adapter Image | |
| ip_image = Image.open("examples/merc.jpeg").convert("RGB") | |
| ip_image = ip_image.resize((512, 512)) | |
| out = pipe( | |
| prompt="the words libre flux", | |
| negative_prompt="blurry", | |
| control_image=cond, # Use the tensor here | |
| num_inference_steps=75, | |
| guidance_scale=4.0, | |
| controlnet_conditioning_scale=1.0, | |
| ip_adapter_image=ip_image, | |
| ip_adapter_scale=1.0, | |
| num_images_per_prompt=1, | |
| generator= torch.Generator().manual_seed(74), | |
| return_dict=True, | |
| ) | |
| out.images[0] | |
| ``` | |
| # Load Pipeline ( Low VRAM ) | |
| ```py | |
| import torch | |
| from huggingface_hub import hf_hub_download | |
| from diffusers import DiffusionPipeline | |
| from optimum.quanto import freeze, quantize, qint8 | |
| model_id = "neuralvfx/LibreFlux-IP-Adapter-ControlNet" | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| dtype = torch.bfloat16 if device == "cuda" else torch.float32 | |
| pipe = DiffusionPipeline.from_pretrained( | |
| model_id, | |
| custom_pipeline=model_id, | |
| trust_remote_code=True, | |
| torch_dtype=dtype, | |
| safety_checker=None | |
| ) | |
| # Optional way to download the weights | |
| hf_hub_download(repo_id="neuralvfx/LibreFlux-IP-Adapter-ControlNet", | |
| filename="ip_adapter.pt", | |
| local_dir=".", | |
| local_dir_use_symlinks=False) | |
| # Load the IP Adapter First | |
| pipe.load_ip_adapter('ip_adapter.pt') | |
| # Quantize and Freeze | |
| quantize( | |
| pipe.transformer, | |
| weights=qint8, | |
| exclude=[ | |
| "*.norm", "*.norm1", "*.norm2", "*.norm2_context", | |
| "proj_out", "x_embedder", "norm_out", "context_embedder", | |
| ], | |
| ) | |
| quantize( | |
| pipe.ip_adapter, | |
| weights=qint8, | |
| exclude=[ | |
| "*.norm", "*.norm1", "*.norm2", "*.norm2_context", | |
| "proj_out", "x_embedder", "norm_out", "context_embedder", | |
| ], | |
| ) | |
| quantize( | |
| pipe.controlnet, | |
| weights=qint8, | |
| exclude=[ | |
| "*.norm", "*.norm1", "*.norm2", "*.norm2_context", | |
| "proj_out", "x_embedder", "norm_out", "context_embedder", | |
| ], | |
| ) | |
| freeze(pipe.transformer) | |
| freeze(pipe.ip_adapter) | |
| freeze(pipe.controlnet) | |
| # Enable Model Offloading | |
| pipe.enable_model_cpu_offload() | |
| ``` | |