2.9 KiB
2.9 KiB
Style Transfer
Transform image style while preserving content.
Techniques
img2img (Stable Diffusion)
from diffusers import StableDiffusionImg2ImgPipeline
import torch
pipe = StableDiffusionImg2ImgPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
)
pipe.to("cuda")
result = pipe(
prompt="oil painting style, impressionist",
image=init_image,
strength=0.6, # 0=no change, 1=full generation
guidance_scale=7.5
).images[0]
Strength parameter:
- 0.3-0.4 — Light style, preserves most detail
- 0.5-0.6 — Balanced transformation
- 0.7-0.8 — Heavy restyle, may lose detail
ControlNet
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/sd-controlnet-canny",
torch_dtype=torch.float16
)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
controlnet=controlnet,
torch_dtype=torch.float16
)
# Extract edges for structure guidance
import cv2
canny = cv2.Canny(image, 100, 200)
result = pipe(
prompt="anime style illustration",
image=canny,
num_inference_steps=30
).images[0]
ControlNet modes:
canny— Edge detectiondepth— Depth mappose— Human poselineart— Line drawing
IP-Adapter (Style Reference)
from diffusers import StableDiffusionPipeline
from transformers import CLIPVisionModelWithProjection
# Use reference image as style guide
pipe.load_ip_adapter("h94/IP-Adapter", subfolder="models")
pipe.set_ip_adapter_scale(0.6)
result = pipe(
prompt="a portrait",
ip_adapter_image=style_reference, # Your style image
image=content_image
).images[0]
Style Types
| Style | Prompt Keywords |
|---|---|
| Oil painting | oil painting, brushstrokes, impasto |
| Watercolor | watercolor, soft edges, wet medium |
| Anime | anime style, cel shaded, studio ghibli |
| Pencil sketch | pencil drawing, graphite, sketch |
| 3D render | 3D render, octane, blender |
| Pixel art | pixel art, 8-bit, retro |
| Photorealistic | hyperrealistic, photography, DSLR |
Workflow
- Choose technique based on control needed
- Start with low strength (0.3-0.4)
- Iterate — adjust strength and prompt
- ControlNet for precise structure preservation
- Post-process — color match to original if needed
Best Practices
- Lower strength = more original — start low
- ControlNet for precision — when structure matters
- Style reference images — IP-Adapter for specific styles
- Consistent results — lock seed, batch variations
- Resolution — match input resolution
Common Issues
- Lost detail — reduce strength
- Wrong style — add more specific keywords
- Artifacts — increase steps, reduce guidance
- Color shift — color correct after