--- id: wiki-2026-0508-brand-consistency-ai title: Brand Consistency in AI Image Generation category: 10_Wiki/Topics status: verified canonical_id: self aliases: [브랜드 일관성, AI brand consistency, sref, cref, oref, IP-Adapter, ControlNet, LoRA, character consistency] duplicate_of: none source_trust_level: B confidence_score: 0.85 verification_status: applied tags: [generative-ai, brand, consistency, midjourney, stable-diffusion, lora, ip-adapter, controlnet, marketing] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: prompt + diffusion framework: Midjourney / Stable Diffusion / ComfyUI / Flux --- # Brand Consistency in AI Image Generation ## 📌 한 줄 통찰 > **"매 visual identity 의 generation 의 lock"**. 매 prompt 만 의 X — 매 reference image (sref/cref/oref) + 매 LoRA + 매 IP-Adapter 의 결합. 매 marketing campaign / product line / character series 의 essential. 매 modern 의 single-image train 의 가능. ## 📖 핵심 ### 매 dimension 1. **Visual style** (sref): 매 color, lighting, texture. 2. **Character** (cref): 매 person identity. 3. **Object** (oref / IP-Adapter): 매 specific product. 4. **Composition**: 매 layout, 매 angle. 5. **Typography**: 매 font, 매 logo. 6. **Mood**: 매 emotion, atmosphere. ### Midjourney 의 reference param - **`--sref`** (Style Reference): 매 image / moodboard 의 style. - **`--cref`** (Character Reference): 매 character identity. - **`--oref`** (Omni Reference, V7): 매 specific object 의 form. - **`--sw`** (style weight): 매 0-1000. - **`--cw`** (character weight): 매 0-100. ### Stable Diffusion / Flux 의 tool #### IP-Adapter - 매 image prompt → 매 conditioning. - 매 SDXL / Flux 지원. - 매 face / object / style. #### ControlNet - 매 pose, depth, edge 의 guide. - 매 character pose 의 control. #### LoRA (custom) - 매 specific identity 의 학습. - 매 5-10 image 만 으로. - 매 portable (50 MB). #### Textual Inversion / Dreambooth - 매 token / model 의 fine-tune. - 매 expensive 가 매 high quality. #### InstantID / PhotoMaker - 매 single face image 의 instant clone. - 매 fine-tune X. ### 매 best practice 1. **Reference set first**: 매 3-5 brand-safe image. 2. **Single style reference**: 매 multiple 의 confusion. 3. **Low stylize** (`--stylize 0-50`): 매 product clarity. 4. **Don't mix everything**: 매 sref + cref + oref 의 동시 의 careful. 5. **Iterate from draft**: 매 weak first → 매 refine. 6. **Document the recipe**: 매 reproducible. ### 매 modern workflow - Phase 1: 매 brand asset (logo, color palette, style guide). - Phase 2: 매 reference selection. - Phase 3: 매 LoRA / IP-Adapter / sref. - Phase 4: 매 batch generation. - Phase 5: 매 human selection + manual refine. - Phase 6: 매 brand approval. ### 매 use case 1. **Marketing campaign**: 매 ad set. 2. **Product line**: 매 catalog. 3. **Character series**: 매 mascot, 매 graphic novel. 4. **E-commerce**: 매 model 의 다양한 angle. 5. **Storyboard**: 매 film pre-vis. 6. **Game asset**: 매 NPC variation. ## 💻 패턴 ### Midjourney sref + cref ``` /imagine A futuristic city at night, neon reflections, rain --sref https://my-cdn/style1.jpg --cref https://my-cdn/character.jpg --sw 200 --cw 80 --ar 16:9 --stylize 100 ``` ### Stable Diffusion + IP-Adapter (ComfyUI / Diffusers) ```python from diffusers import StableDiffusionXLPipeline, AutoencoderKL from PIL import Image import torch pipe = StableDiffusionXLPipeline.from_pretrained( 'stabilityai/stable-diffusion-xl-base-1.0', torch_dtype=torch.float16, ).to('cuda') # 매 IP-Adapter 의 load pipe.load_ip_adapter('h94/IP-Adapter', subfolder='sdxl_models', weight_name='ip-adapter_sdxl.bin') pipe.set_ip_adapter_scale(0.6) ref_image = Image.open('brand_style.jpg') result = pipe( prompt='a product photo, studio lighting', ip_adapter_image=ref_image, num_inference_steps=30, guidance_scale=7, ).images[0] ``` ### LoRA training (Kohya / Diffusers) ```python from diffusers import DDPMScheduler, AutoencoderKL, UNet2DConditionModel from peft import LoraConfig # 매 5-10 image (브랜드 character) training_data = ['brand_char_01.jpg', ..., 'brand_char_10.jpg'] # 매 LoRA config lora_config = LoraConfig( r=16, lora_alpha=16, target_modules=['to_q', 'to_k', 'to_v', 'to_out.0'], init_lora_weights='gaussian', ) # 매 train (단순화) unet.add_adapter(lora_config) # ... train loop ... unet.save_pretrained('./brand-character-lora') ``` ### Character consistency (multi-shot) ```python # 매 LoRA 로 학습 한 character 의 다양한 scene 의 generate prompts = [ " portrait of mascot, smiling, office background", " mascot waving, beach background, sunset", " mascot at desk, laptop, focused", ] results = [pipe(p, num_inference_steps=30).images[0] for p in prompts] ``` ### InstantID (face cloning) ```python from diffusers import StableDiffusionXLInstantIDPipeline pipe = StableDiffusionXLInstantIDPipeline.from_pretrained( 'stabilityai/stable-diffusion-xl-base-1.0', ).to('cuda') pipe.load_instantid('InstantX/InstantID') face = Image.open('brand_ambassador.jpg') faceid_embeds, face_kps = extract_face(face) result = pipe( prompt='in a luxury hotel, evening', image_embeds=faceid_embeds, image=face_kps, num_inference_steps=30, ).images[0] ``` ### Brand prompt template ```python BRAND_STYLE = """ {subject}, brand: ACME corp, style: minimalist, white background, soft natural light, color palette: navy blue, off-white, warm gold accent, composition: rule of thirds, centered subject, typography (if any): sans-serif, geometric, quality: 4k, professional photography """ def generate_brand(subject): return pipe(BRAND_STYLE.format(subject=subject), guidance_scale=7).images[0] ``` ### Style guide YAML (recipe lock) ```yaml brand: ACME version: 1.2 style_reference: cdn://acme/style/v2.jpg sref_weight: 200 character_reference: cdn://acme/mascot/v3.png cref_weight: 80 stylize: 100 aspect_ratio: 16:9 negative_prompt: "blurry, low quality, watermark, deformed" loras: - name: brand-char weight: 0.8 ip_adapter_scale: 0.6 ``` ### Quality check (auto) ```python from PIL import Image import torch def brand_consistency_check(reference, generated, threshold=0.7): """매 CLIP 의 similarity 의 measure.""" from transformers import CLIPProcessor, CLIPModel model = CLIPModel.from_pretrained('openai/clip-vit-base-patch32') proc = CLIPProcessor.from_pretrained('openai/clip-vit-base-patch32') inputs = proc(images=[reference, generated], return_tensors='pt') embeds = model.get_image_features(**inputs) sim = torch.cosine_similarity(embeds[0:1], embeds[1:2]).item() return sim, sim >= threshold ``` ## 🤔 결정 기준 | 상황 | Tool | |---|---| | Quick brand iteration | Midjourney `--sref` | | Full control | SD + ComfyUI + IP-Adapter | | Single character | LoRA (5-10 image) | | Single face | InstantID / PhotoMaker | | Specific object | Omni Reference / Dreambooth | | Multiple variations | LoRA + prompt template | | Studio production | LoRA + ControlNet pose | **기본값**: 매 sref / IP-Adapter 의 baseline. 매 character = LoRA. 매 face = InstantID. ## 🔗 Graph - 부모: [[AI Image Generation]] · [[Marketing]] - 변형: [[Style Reference]] · [[Character Reference]] · [[IP-Adapter]] · [[ControlNet]] - 응용: [[LoRA]] · [[InstantID]] · [[PhotoMaker]] · [[Midjourney]] - Adjacent: [[CFG 스케일(Classifier-Free Guidance Scale)]] · [[Stable-Diffusion]] · [[Flux]] · [[Authenticity]] · [[Arts]] ## 🤖 LLM 활용 **언제**: 매 brand image campaign. 매 product catalog. 매 character series. 매 storyboard. **언제 X**: 매 unique 매 single image. 매 random creative explore. ## ❌ 안티패턴 - **모든 reference 의 동시 의 max weight**: 매 visual chaos. - **No reference set**: 매 drift. - **Stylize too high (product)**: 매 product 의 distort. - **Mix multiple LoRA without test**: 매 conflict. - **No quality check (CLIP)**: 매 silent drift. - **Recipe 의 document X**: 매 reproducibility X. ## 🧪 검증 / 중복 - Verified (Midjourney docs, IP-Adapter paper, InstantID). - 신뢰도 B. - Related: [[CFG 스케일(Classifier-Free Guidance Scale)]] · [[AI Image Generation]] · [[LoRA]] · [[Authenticity]] · [[Stable-Diffusion]]. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-04-30 | Auto-mapped | | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — sref/cref/oref + LoRA + IP-Adapter + 매 SDXL / Midjourney code |