# Image-Video Bridge — Frame Chaining M3 → M4

> Cầu nối giữa M3 (image, Nano Banana Pro) và M4 (video, Seedance 2.0 mặc định, Veo 3.1 backup, Sora 2 alt).
> Pattern: cùng ref pack → 1 still hi-res (M3) → still đó thành **First Frame** cho video (M4).
> Honest: image-to-video là pattern "transfer ~70%" — không phải lock cứng 100%. 30% lần chain không cải thiện gì, đọc §6 trước khi force.

---

## Cách dùng file này

- Khi M3 output sẽ feed M4 video → đọc file này.
- Đã quyết định không chain (chỉ làm still riêng, hoặc chỉ làm video riêng) → bỏ qua, dùng `06-prompt-recipes.md` (M3) hoặc `prompt-library/M4-video-prompts.md` (M4) độc lập.
- Lợi ích khi chain đúng: visual consistency xuyên 1 campaign — still ad + reel + landing video đều khớp tower silhouette + horizon + grade.

---

## Quy tắc vàng (non-negotiable)

- M3 output **hi-res still ≥ 1024px** → upload vào M4 ô First Frame
- **Cùng persona** P1–P5 trên cả image và video
- **Cùng lighting register** — sunset thì sunset cả hai, không mismatch (sunset still + noon video = artifacts)
- **Cùng color palette** — kéo hex từ `02-fact-anchors.md` §1 cho cả M3 và M4
- **Cùng architectural anchor** — nếu still có 2 curved-glass towers, video cũng phải giữ 2 towers visible
- **Cùng ref pack** — 2–3 file từ `refs/` dùng chung cả 2 module

---

## §1 · Workflow A → B → C

```
A. Generate M3 still (Nano Banana Pro)
   - CRAFT-V prompt theo 06-prompt-recipes.md
   - 2–3 ref images từ refs/ (hero ref đứng đầu)
   - Output: 1 still hi-res, ≥1024px, lưu lại file name rõ ràng

B. Use M3 still làm Seedance First Frame
   - Mở Seedance 2.0 playground (OpenRouter "Try Seedance 2.0")
   - Upload still vào ô "First Frame" (hoặc fal.ai / Higgsfield image-to-video)
   - Set Size + Seconds qua dropdown (KHÔNG đưa vào prompt)

C. Viết Seedance prompt — chỉ phần motion
   - Subject + Action: minimal — chỉ tả gì DI CHUYỂN
   - Camera: ONE move (theo seedance-prompt skill)
   - Style: match grade của still (warm filmic / golden hour CGI)
   - Avoid: ràng buộc giữ composition của still
```

---

## §2 · Pairing matrix — M3 type → M4 use

| M3 image type | M4 use tốt nhất | Why |
|---|---|---|
| §1 Hero render (aerial, sunset) | Video opening (0–3s) — slow pull-back | Hero định vị campaign, motion pull-back để reveal |
| §2 Lifestyle (balcony, P1 family) | Mid-video (5–10s) — slow push-in | Khoảnh khắc cảm xúc, viewer lean in |
| §3 Banner ad (1:1 hoặc 4:5) | Closing CTA frame (last 2s) | Static brand mark trước fade-out |
| §4 Infographic | KHÔNG dùng cho video | Static info, motion làm distort data |
| §5 Interior (Dewan, villa pool) | B-roll giữa hero shots | Texture-rich, giữ attention 3–5s |
| §6 One-pager / brochure | KHÔNG dùng cho video | Quá nhiều text, motion làm rách layout |

---

## §3 · Frame-chain prompts (paste-ready)

### Example 1 — Hero render → Hero reveal video

**M3 prompt (Nano Banana Pro):**
```
[Subject + Adjectives: coastal Maia resort, two curved blue-glass towers,
low-rise villa cluster in front, palm belt, turquoise water beyond]
[Action: static — towers stand above villas at golden hour]
[Location: Hồ Tràm coastline, late golden hour, pink-purple sunset sky]
[Composition: low aerial, horizon line at upper third, vertical 9:16]
[Lighting: warm amber side-light catching glass facade, lit windows]
[Style: architectural CGI render aesthetic, photoreal but pristine,
palette #F4B97A → #7B5BA1 sky, #4A90B8 glass, #E6D5B0 sand]
Reference images: refs/01-aerial-hero-9x16.jpg (canonical), refs/03-aerial-alt-9x16.jpg
Output: 1 still hi-res, save as M3-hero-pull-back-frame1.jpg (≥1024px)
```

**M4 prompt (Seedance, image-to-video — upload still vào First Frame):**
```
First Frame: M3-hero-pull-back-frame1.jpg
Subject: same coastal resort scene, environmental motion only
Action: gentle wave rolls into wet sand at base of frame, palm fronds sway softly
Environment: same Hồ Tràm coastline, late golden hour preserved, no light change
Camera: slow pull-back from low angle, locked to horizon line, no pan
Style: match still's grade — warm amber, photoreal CGI register, vertical 9:16
Avoid: no lighting change, no human appearance, no flying objects, no jitter, no warped reflections
```
Settings: Size `720×1280`, Seconds `15`, First Frame uploaded.

---

### Example 2 — Lifestyle still → Lifestyle reel

**M3 still:** P1 (mom, early 40s, linen wrap dress) đứng balcony, late golden hour, glass railing, teak deck, tower silhouette soft focus phía xa. Save: `M3-lifestyle-balcony-frame1.jpg`.

**M4 prompt (Seedance):**
```
First Frame: M3-lifestyle-balcony-frame1.jpg
Subject: same woman, same balcony, same outfit
Action: she gazes at horizon, small smile, breeze lifts hair gently
Environment: late golden hour preserved, warm side-light from frame right
Camera: very slow push-in from chest height toward her shoulder, ONE move only
Style: match still — warm filmic grade, shallow depth, vertical 9:16
Avoid: jitter, warped hands, extra people, text on screen, logos, animals
```

---

### Example 3 — Banner still → Last-2s CTA frame

**M3 still:** banner 1:1 — tower silhouette ¾ frame, cream `#F0E6D2` safe-zone bên phải cho text overlay, không có text trong ảnh (post-overlay sau). Save: `M3-banner-cta-frame1.jpg`.

**M4 prompt (Seedance):**
```
First Frame: M3-banner-cta-frame1.jpg
Subject: same banner composition, towers and safe-zone preserved
Action: subtle palm fronds sway, faint atmospheric haze drift
Environment: same golden hour, same color palette
Camera: locked, no movement at all (tripod-style)
Style: match still — architectural CGI, square 1:1
Avoid: any composition shift, any new objects, jitter, lighting change
```
Note: text overlay add bằng Canva/Figma sau khi video render — không nhờ AI render text.

---

## §4 · Cái gì làm vỡ frame chaining

- ❌ **Lighting mismatch** — M3 sunset still + M4 prompt "noon harsh light" → motion artifacts ở frame transition
- ❌ **Subject drift** — M3 có 2 towers, M4 prompt drop xuống 1 tower → AI rebuild geometry, identity vỡ
- ❌ **Aspect mismatch** — M3 16:9 still + M4 force 9:16 → crop artifacts, content cắt nửa
- ❌ **Different ref pack** giữa M3 và M4 → brand drift xuyên campaign, FB feed nhìn không liên quan nhau
- ❌ **Multi-camera move** trong M4 prompt ("push-in then pan") → jitter ở frame boundary
- ❌ **Adding new objects** ở M4 (M3 có 0 người, M4 prompt thêm family) → identity lock vỡ, AI render lại từ đầu
- ❌ **VN text on-image** trong M3 still → motion làm distort diacritics càng nặng hơn còn ở dạng video

---

## §5 · Compatibility checklist trước khi chain

5 câu hỏi trước khi paste M3 still vào Seedance First Frame slot:

1. **Resolution** — M3 still ≥1024px? (Leonardo + Magic Hour: bắt buộc, dưới ngưỡng → error preservation kém)
2. **Aspect** — M3 aspect khớp M4 target aspect? (9:16 ↔ 9:16, hoặc 16:9 ↔ 16:9 — không mismatch)
3. **Lighting/grade** — M3 light/grade là cái M4 motion sẽ giữ nguyên? (không đổi time-of-day giữa chừng)
4. **Subject set** — M3 subject set là cái M4 sẽ giữ? (không add/subtract người, tower, palm)
5. **Ref pack** — 2–3 file `refs/` dùng cho M3 đã save kèm still cho M4 documentation?

Pass cả 5 → chain. Fail bất kỳ câu → fix M3 hoặc viết M4 độc lập (xem §6).

---

## §6 · Khi NÀO không nên chain (30% trường hợp)

Honest: chain không phải silver bullet. Các case sau, force chain → tệ hơn.

- **Master architectural CGI for sales floor** — M3 đã compromise (AI không đủ accurate cho master plan / facade authoritative); video amplify cái compromise. Dùng render gốc của CĐT, không AI.
- **Ads cần text overlay >25% frame** — motion làm distort text, kể cả Vietnamese không dấu. Generate still riêng, post-overlay Canva.
- **Long-form (30s+) videos** — M3 still chỉ lock 1 frame; sau ~10s video drift bất kể có First Frame hay không.
- **VN dialogue MC ảo / talking head** — M3 stills không giúp gì cho lip-sync. Đó là pure M4 với Seedance + ElevenLabs VN voiceover dub trong CapCut.
- **Floor plan / technical drawing animation** — AI break down trên line-art motion. Dùng After Effects manual, không AI.
- **Hai persona khác nhau trong cùng campaign** — không chain stills của P1 family sang video của P3 retiree; ref pack khác → brand drift hơn là brand lock.

→ Khi chain không help, viết M3 + M4 prompts độc lập, **chỉ share ref pack** (cùng `refs/01-aerial-hero-9x16.jpg` + cùng color palette `02-fact-anchors.md` §1).

---

## §7 · Reference pack handoff M3 → M4

**Pass (cần truyền sang):**
- 2–3 ref images canonical (cùng file `refs/` mà M3 dùng — hero đứng đầu)
- M3 hi-res still output (file name rõ ràng → trở thành First Frame trong Seedance)
- Color palette anchors (hex từ `02-fact-anchors.md` §1)
- Persona tag (P1–P5) — để M4 giữ identity register

**Don't pass (không truyền verbatim):**
- M3 prompt verbatim — M4 có formula khác (`Subject + Action + Environment + Camera + Style + Avoid`, theo `40-artifacts/skills/seedance-prompt/references/formula.md`)
- M3 constraint list — M4 có Avoid line riêng, ngắn hơn, concrete failure modes only
- M3 text overlay specs — text overlay là post-production, không vào prompt M4

---

End file. Bridge này cố tình ngắn — job là "khi chain giúp, đây là cách" và "khi chain không giúp, đừng force". Reference fidelity vẫn là audit checkpoint #1: mỗi visual claim trên cả image và video phải trace về `02-fact-anchors.md`.
