--- id: wiki-2026-0508-소셜-미디어-그래픽-및-마케팅-캠페인-제작 title: 소셜 미디어 그래픽 및 마케팅 캠페인 제작 category: 10_Wiki/Topics status: verified canonical_id: self aliases: [Social Media Graphic, Marketing Campaign Creation, AI Marketing Asset Pipeline] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [ai-image-generation, marketing, social-media, brand-identity, workflow, batch-pipeline] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: python framework: comfyui-and-flux --- # 소셜 미디어 그래픽 및 마케팅 캠페인 제작 ## 매 한 줄 > **"매 brand-locked aesthetic + multi-aspect-ratio + 매 hundreds of variants in hours"**. 매 2026 의 marketing team 의 매 standard pipeline: FLUX 1.2 + brand LoRA + automated aspect ratio generation + Recraft text rendering — 매 manual designer 작업 의 80% 자동화, 매 final taste judgment 만 human. ## 매 핵심 ### 매 Campaign asset 의 종류 - **Hero image** (1:1, 16:9, 9:16): Instagram, Facebook, Story/Reel. - **Thumbnail variants**: A/B test 용 다양한 angle/composition. - **Banner ad** (Google Display, Meta): typography-heavy. - **Carousel** (Instagram, LinkedIn): 매 narrative sequence. - **Animated**: Reel, TikTok — Sora 2 / Runway Gen-4. ### 매 Brand consistency 의 lever - **Brand LoRA**: 매 logo, color palette, mascot 의 LoRA 학습 (50-200 images). - **Style reference (--sref / IP-Adapter)**: 매 fixed aesthetic vector. - **Color palette enforcement**: post-processing color quantization. - **Typography**: Recraft v4 / Imagen 4 의 native text rendering, 매 final composite 은 Figma/After Effects. ### 매 응용 1. **Campaign brief → 100 variants in 2 hours** (concept exploration). 2. **Personalization at scale** — segment 별 visual variant. 3. **Localization** — 매 region 별 typography + cultural cue swap. ## 💻 패턴 ### Campaign generator pipeline ```python from dataclasses import dataclass from pathlib import Path @dataclass class CampaignBrief: product: str audience: str mood: list[str] aspect_ratios: list[str] variants_per_ratio: int brand_lora: str style_ref: str | None def generate_campaign(brief: CampaignBrief, out: Path): pipe = load_flux_with_lora(brief.brand_lora) if brief.style_ref: pipe = attach_ip_adapter(pipe, brief.style_ref) for ar in brief.aspect_ratios: w, h = aspect_to_dims(ar) for i in range(brief.variants_per_ratio): prompt = build_prompt(brief, variant_seed=i) img = pipe(prompt, width=w, height=h, generator=torch.Generator("cuda").manual_seed(1000 + i)).images[0] img.save(out / f"{ar}/{i:03d}.png") ``` ### Aspect ratio dispatch ```python ASPECTS = { "1:1": (1024, 1024), # IG feed "4:5": (1024, 1280), # IG portrait "9:16": (768, 1344), # Story / Reel "16:9": (1344, 768), # YT thumb / banner "21:9": (1536, 640), # LinkedIn banner } ``` ### Brand LoRA training (kohya-ss / sd-scripts) ```bash accelerate launch flux_train_network.py \ --pretrained_model_name_or_path=black-forest-labs/FLUX.1.2-dev \ --train_data_dir=./brand-imgs \ --output_dir=./loras/brand-v1 \ --network_module=networks.lora_flux \ --network_dim=32 \ --learning_rate=1e-4 \ --max_train_steps=2000 \ --resolution=1024 \ --train_batch_size=1 ``` ### Prompt template + variant seed ```python def build_prompt(b: CampaignBrief, variant_seed: int) -> str: angles = ["overhead flat lay", "three-quarter hero", "macro close-up"] moods = b.mood angle = angles[variant_seed % len(angles)] mood = moods[variant_seed % len(moods)] return ( f"{b.product}, {angle}, {mood}, " f"clean studio lighting, brand_v1 aesthetic, " f"target audience: {b.audience}, professional commercial photography" ) ``` ### Post-process — palette enforcement ```python from PIL import Image import numpy as np from sklearn.cluster import KMeans BRAND_PALETTE = np.array([[27, 38, 59], [65, 90, 119], [224, 225, 221], [119, 141, 169]]) def snap_to_palette(img: Image.Image, palette=BRAND_PALETTE) -> Image.Image: arr = np.array(img).reshape(-1, 3) dists = np.linalg.norm(arr[:, None] - palette[None], axis=2) snapped = palette[dists.argmin(axis=1)] return Image.fromarray(snapped.reshape(img.size[1], img.size[0], 3).astype(np.uint8)) ``` ### Text overlay (Pillow → Figma export) ```python from PIL import ImageDraw, ImageFont def add_headline(img: Image.Image, text: str, font_path: str) -> Image.Image: draw = ImageDraw.Draw(img) font = ImageFont.truetype(font_path, size=72) box = draw.textbbox((0, 0), text, font=font) x = (img.width - (box[2] - box[0])) // 2 y = img.height - (box[3] - box[1]) - 80 draw.rectangle([x - 20, y - 20, x + box[2] + 20, y + box[3] + 20], fill=(0, 0, 0, 180)) draw.text((x, y), text, font=font, fill="white") return img ``` ### A/B variant export with metadata ```python import json def export_variant(img, variant_id, brief, out): img.save(out / f"{variant_id}.png") with open(out / f"{variant_id}.json", "w") as f: json.dump({ "id": variant_id, "model": "flux-1.2-dev", "lora": brief.brand_lora, "prompt": ..., "seed": ..., "created": datetime.utcnow().isoformat(), }, f, indent=2) ``` ### Animated extension (Sora 2 / Kling) ```python # image-to-video video = sora_client.create_video( image=hero_image_url, prompt="subtle camera push-in, gentle product rotation", duration=4, resolution="1080p", ) ``` ## 매 결정 기준 | 자산 종류 | 권장 도구 (2026) | |---|---| | Hero photoreal | FLUX 1.2 + brand LoRA | | Typography-heavy banner | Imagen 4 / Recraft v4 | | Vector / icon | Recraft v4 | | Animated reel | Sora 2 / Kling 2 / Runway Gen-4 | | Localization variants | LLM prompt translate + Imagen 4 (text) | | Final composite | Figma / Photoshop generative fill | **기본값**: FLUX 1.2 + brand LoRA + IP-Adapter style ref + Pillow text overlay (or Figma final composite). 매 batch 100+ 변형 의 cost ~$5-20. ## 🔗 Graph - 부모: [[AI 이미지 생성 및 편집 워크플로우 (AI Image Generation & Editing Workflow)]] - 변형: [[Style_Reference_(--sref)]] - Adjacent: [[버전 및 모델 (Versions and Models)]] ## 🤖 LLM 활용 **언제**: campaign brief → prompt template, headline/CTA copy 의 variant generation, brief → asset checklist. **언제 X**: 매 final aesthetic taste — 매 brand director 의 review 필수. LLM 의 visual judgment hallucination. ## ❌ 안티패턴 - **No brand LoRA, free-floating prompts**: 매 inconsistent style — 매 brand erosion. - **Single seed batch**: 매 variant 의 의미 없음. Seed sweep 필수. - **Text rendering in FLUX direct**: 매 still error-prone (2026). Imagen 4 / Recraft / final overlay 권장. - **No metadata trail**: 매 후속 reproduction / audit 불가. - **Skipping color palette enforcement**: brand color 의 drift. ## 🧪 검증 / 중복 - Verified (Black Forest Labs FLUX 1.2 docs, Recraft v4 docs, kohya-ss flux training, Meta/Google ad spec sheets 2026). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — campaign pipeline, brand LoRA, multi-aspect, Sora 2 extension |