How to Build an AI Image Style Transfer System
Apply consistent brand styles to any image using AI style transfer.
Jay Banlasan
The AI Systems Guy
An ai image style transfer system for brand consistency applies your visual identity to any source image. I build these for brands that want every photo, screenshot, and graphic to feel cohesive. Upload a raw photo, the system applies your brand's color grading, overlay style, and treatment, and outputs an on-brand version.
This is how brands maintain visual consistency across thousands of pieces of content.
What You Need Before Starting
- Reference images that define your brand style (5-10 examples)
- Python 3.8+ with an image generation API and Pillow
- A clear description of your visual style
- Source images to transform
Step 1: Define Your Brand Style
BRAND_STYLE = {
"name": "Modern Professional",
"description": "Clean, high-contrast. Cool blue tones. Minimal compositions. Sharp focus with subtle depth of field.",
"color_grade": "Cool shadows, warm highlights. Slight desaturation except for brand blue.",
"overlays": "Subtle dark gradient at bottom for text placement",
"treatment": "Slight vignette. Clean whites. No heavy filters.",
"reference_images": ["style_ref_1.jpg", "style_ref_2.jpg", "style_ref_3.jpg"]
}
def build_style_prompt(brand_style):
return f"""Apply this visual style to the image:
Style: {brand_style['description']}
Color grading: {brand_style['color_grade']}
Treatment: {brand_style['treatment']}
Maintain the original subject and composition. Only change the visual treatment."""
Step 2: Apply Style with AI
from openai import OpenAI
import base64
client = OpenAI()
def apply_style_transfer(source_image_path, brand_style):
with open(source_image_path, "rb") as f:
image_data = base64.b64encode(f.read()).decode()
style_prompt = build_style_prompt(brand_style)
response = client.images.edit(
model="gpt-image-1",
image=open(source_image_path, "rb"),
prompt=f"Restyle this image: {style_prompt}",
size="1024x1024"
)
return response.data[0].url
Step 3: Build Color Grading with Pillow
For simpler style transfers, apply color grading programmatically:
from PIL import Image, ImageEnhance, ImageFilter
def apply_brand_color_grade(image_path, output_path):
img = Image.open(image_path)
# Adjust contrast
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(1.2)
# Adjust saturation (slight desaturation)
enhancer = ImageEnhance.Color(img)
img = enhancer.enhance(0.85)
# Cool tone shift
r, g, b = img.split()
r = r.point(lambda x: int(x * 0.95)) # Reduce red slightly
b = b.point(lambda x: min(255, int(x * 1.05))) # Boost blue slightly
img = Image.merge("RGB", (r, g, b))
# Subtle vignette
img = add_vignette(img)
img.save(output_path)
return output_path
def add_vignette(img, strength=0.3):
from PIL import ImageDraw
width, height = img.size
vignette = Image.new("L", (width, height), 255)
draw = ImageDraw.Draw(vignette)
for i in range(min(width, height) // 4):
opacity = int(255 * (1 - strength * (1 - i / (min(width, height) // 4))))
draw.ellipse([i, i, width - i, height - i], fill=opacity)
img.putalpha(vignette)
return img.convert("RGB")
Step 4: Batch Process Images
def batch_style_transfer(input_folder, output_folder, brand_style, method="color_grade"):
import os
os.makedirs(output_folder, exist_ok=True)
results = []
for filename in os.listdir(input_folder):
if not filename.lower().endswith((".jpg", ".jpeg", ".png")):
continue
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, f"styled_{filename}")
if method == "ai":
url = apply_style_transfer(input_path, brand_style)
download_image(url, output_path)
else:
apply_brand_color_grade(input_path, output_path)
results.append(output_path)
return results
Step 5: Create Style Presets
STYLE_PRESETS = {
"corporate": {"contrast": 1.1, "saturation": 0.9, "warmth": -0.05, "vignette": 0.2},
"vibrant": {"contrast": 1.3, "saturation": 1.2, "warmth": 0.1, "vignette": 0.1},
"minimal": {"contrast": 1.0, "saturation": 0.7, "warmth": -0.1, "vignette": 0.3},
"warm": {"contrast": 1.15, "saturation": 1.0, "warmth": 0.15, "vignette": 0.15},
}
def apply_preset(image_path, preset_name, output_path):
preset = STYLE_PRESETS[preset_name]
img = Image.open(image_path)
img = ImageEnhance.Contrast(img).enhance(preset["contrast"])
img = ImageEnhance.Color(img).enhance(preset["saturation"])
img.save(output_path)
return output_path
What to Build Next
Add style consistency scoring. After applying style transfer, compare the output to your reference images using embedding similarity. Flag any outputs that drift too far from the brand style for manual review.
Related Reading
- AI for Creative Strategy and Testing - consistent visual identity across creative tests
- AI for Content Creation at Scale - maintaining brand consistency at volume
- The Feedback Loop That Powers Everything - style feedback improving the transfer system
Want this system built for your business?
Get a free assessment. We will map every system your business needs and show you the ROI.
Get Your Free Assessment