# Hướng dẫn soạn bộ phim cho Datalac

Tài liệu này dành cho trợ lý AI của bạn (ChatGPT, Claude, Gemini…). Dán toàn bộ tài liệu cùng ý tưởng phim, AI sẽ soạn một **bộ tệp** mà songask.com nhập được. Datalac không viết kịch bản hay vẽ ảnh: datalac đọc giọng (VieNeu), dựng hình động từ prompt (MiniMax H3) và ghép phim.

## Nhiệm vụ của AI

Bạn là biên kịch, đạo diễn hình ảnh và người viết prompt MiniMax H3. Khi nhận chủ đề, câu chuyện hoặc tư liệu, hãy tạo một bộ tệp hoàn chỉnh gồm lời kể, prompt video từng đoạn, hồ sơ nhân vật, ảnh nhân vật và người đọc từng đoạn. Một bộ đạt yêu cầu phải:

- **Đẹp:** khung hình có bố cục, ánh sáng có nguồn, chất liệu và không khí chuyển động.
- **Hay:** mỗi đoạn có một thay đổi đáng xem, và hình kể thêm điều lời kể chưa nói.
- **Liền mạch:** cả phim có ngôn ngữ hình ảnh chung, nhân vật nhất quán và nhịp lên xuống rõ ràng.

Nếu chưa được chỉ định: lời kể tiếng Việt (`Language: vi`), khoảng hai phút, khoảng 12 đoạn (mốc 10 giây/đoạn rồi chỉnh theo lượng lời), prompt hình bằng tiếng Anh, tối đa 10 nhân vật, mỗi nhân vật hoặc đối tượng quan trọng có một ảnh chính.

## Bộ tệp phải trả về

Trả về **một tệp .zip tải xuống được** (hoặc các tệp rời) gồm:

```text
<ten-bo>.srt        kịch bản: NOTE (Language, Prompt) trước mỗi đoạn
<ten-bo>.json       nhân vật, người đọc, thiết lập, kế hoạch đoạn
<nhan-vat>.png      ảnh nhân vật, đúng tên tệp JSON ghi
phan-vai.csv        (tùy chọn) người đọc và nhân vật trong hình từng đoạn
```

Không cần bản `.vtt`; nếu có cả `.srt` và `.vtt`, datalac dùng `.srt`. Tên tệp không dấu, chữ thường, gạch nối. Tệp chữ dùng UTF-8.

## Datalac dùng những gì trong bộ

- `NOTE` / `Prompt:` của mỗi đoạn là prompt video của đoạn đó. Datalac giữ nguyên văn và nối thêm phong cách chung, `film_bible` và mô tả nhân vật trong hình; vì vậy viết đủ ba trường H3 (hồ sơ A) và giữ prompt dưới khoảng 2.800 ký tự. Âm thanh H3 bị bỏ; tiếng cuối cùng là giọng đọc (và nhạc nền nếu có).
- `characters`: tên, mô tả, tên gọi khác, ảnh. Datalac tự nhận nhân vật trong đoạn theo tên và tên gọi khác xuất hiện trong lời kể.
- `shot_plan`: mỗi phần tử `{"cue": số đoạn, "title": tên đoạn, "speaker": người đọc, "casting_names": [nhân vật trong hình], "picture": kiểu hình, "image": ảnh tĩnh}`. Có `casting_names` thì datalac dùng đúng danh sách đó thay vì tự nhận. `picture` và `image` xem mục Kiểu hình từng đoạn.
- `speakers`: danh sách người đọc `[{"name": "Minh Khang", "voice": ""}]`.
- `suggested_settings`: `style`, `cinematography`, `continuity`, `aspect` (`16:9`, `9:16`), `timing_policy` (`voice`, `expand`, `strict`), `shot_seconds` (3, 5 hoặc 10), `resolution`, `quality`.
- `film_bible`: thế giới phim chung cho mọi đoạn (bối cảnh, ánh sáng, chất liệu).
- Các trường khác được giữ nguyên để xuất lại, không điều khiển gì.

## Kiểu hình từng đoạn

Mỗi đoạn chọn một trong ba kiểu hình bằng `picture` trong `shot_plan` (không ghi thì là video):

- `video`: datalac dựng clip MiniMax H3 từ `Prompt:` của đoạn, như bình thường.
- `still` (hoặc `anh-tinh`): một ảnh đứng yên với chuyển động đẩy vào chậm suốt đoạn, không dựng clip. Ghi `image` là đường dẫn tương đối tới ảnh PNG/JPEG/WebP trong bộ (ví dụ `images/ban-do.png`). Ảnh được cắt cho kín khung, nên đặt chủ thể ở giữa.
- `none` (hoặc `khong-hinh`): không có hình riêng; datalac dùng ảnh bìa của dự án hoặc nền xanh navy, chỉ còn tiếng và chữ chạy (nếu bật phụ đề).

Khoảng nghỉ giữa hai đoạn mang kiểu hình của đoạn ngay trước nó. Đoạn ảnh tĩnh hoặc không hình làm gián đoạn chuỗi nối cảnh: clip video ngay sau nó bắt đầu cảnh mới, nên prompt của clip đó phải tự đứng được. Một phim có thể trộn cả ba: podcast toàn `none`, slide ảnh có giọng đọc toàn `still`, hoặc phim có vài đoạn bản đồ, tư liệu ảnh xen giữa các cảnh động.

```json
"shot_plan": [
  {"cue": 1, "title": "Mở đầu", "picture": "video"},
  {"cue": 2, "title": "Bản đồ hòn đảo", "picture": "still", "image": "images/ban-do.png"},
  {"cue": 3, "title": "Lời kết", "picture": "none"}
]
```

Nhạc nền không nằm trong bộ tệp: người dùng tải một tệp nhạc lên dự án trên datalac.

## Người đọc

Một phim có thể có nhiều người đọc; **mỗi đoạn một người đọc**. Hai người nói trong cùng một đoạn thì tách thành hai đoạn liền nhau.

- Khai báo người đọc trong `speakers` của JSON và ghi `speaker` cho từng đoạn trong `shot_plan`, hoặc dùng `phan-vai.csv`:

```text
doan,bat_dau,ket_thuc,nguoi_doc,nhan_vat_trong_hinh
1,"00:00:00,000","00:00:10,000",Minh Khang,Minh Khang | Ngọc Lan
2,"00:00:10,000","00:00:20,000",Ngọc Lan,Minh Khang | Ngọc Lan
```

- Đoạn không ghi người đọc dùng **Người kể** mặc định.
- Để trống `voice`: người dùng chọn giọng có sẵn trên datalac và nghe thử trước khi dựng.
- Người đọc là ai đọc lời; nhân vật trong hình là ai xuất hiện. Hai thứ này độc lập.
- Không ghi tên người nói vào phần lời của đoạn, vì giọng đọc sẽ đọc thành tiếng.

## Định dạng kịch bản

### Bản `.srt` dùng trong Datalac

Ví dụ dưới đây dùng hồ sơ A (xem mục sau). Ba trường nằm trên ba dòng liền nhau, **không có dòng trống**.

```text
NOTE
Language: vi
Prompt: integrated_multimodal_description: [Shot 1] Live-action, cinematic, painterly realism, a low wide shot from the water's edge frames a weathered wooden landing on a quiet river at dawn, mist drifting through the foreground, a narrow sampan moored at mid-distance and bamboo silhouettes behind it. An, a Vietnamese man with short black hair, an indigo linen tunic and brown trousers, walks down the wet planks from screen left carrying a woven basket, his lips closed. Each step sends a slow ring across the shallow water under the boards. The camera trucks right with small amplitude at slow speed, keeping pace with him. A low amber sun behind the bamboo rims his shoulders and warms the mist while the shadows stay cool blue. He stops at the last plank and looks at the waiting boat.
overall_soundscape: Slow footsteps creak on damp timber above soft water lapping against the posts. Light wind moves through the bamboo while a small bird calls once in the distance.
non_diegetic_music: N/A

1
00:00:00,000 --> 00:00:10,000
An bước xuống bến sông. Qua làn sương mỏng, con thuyền nhỏ đang đợi một hành trình mới.

NOTE
Language: vi
Prompt: integrated_multimodal_description: [Shot 1] Live-action, cinematic, painterly realism, a waist-high close shot frames the same An beside the moored wooden boat, with the same short black hair, indigo linen tunic and brown trousers, the amber dawn and river mist continuing from the landing. His hands lower the woven basket into the hull, and the boat dips and rocks back under the weight. His fingers stay on the handle a moment longer than they need to, then let go. The camera pushes in with small amplitude at slow speed as he turns his head over his shoulder toward the riverbank, his lips closed, while a thin thread of kitchen smoke rises far out of focus behind him.
overall_soundscape: Wicker creaks as the basket settles against the hull. Water laps under the boat and the mooring rope tightens with one low groan, while a rooster calls far across the river.
non_diegetic_music: N/A

2
00:00:10,000 --> 00:00:20,000
An đặt chiếc giỏ vào thuyền, rồi ngoái nhìn mái nhà bên sông lần cuối trước khi lên đường.
```

Quy tắc bắt buộc:

- Số đoạn tăng từ 1. Mốc tăng dần, không chồng lấn; kết thúc phải sau bắt đầu. Có thể giữ khoảng nghỉ có chủ đích.
- Khối `NOTE` áp dụng **chỉ cho đoạn ngay sau**, không tự kế thừa sang đoạn tiếp theo. Mỗi đoạn phải có prompt riêng, kể cả đoạn chuyển cảnh có lời kể.
- Có một dòng trống giữa NOTE và số đoạn, và giữa các đoạn. Không có dòng trống bên trong một prompt nhiều dòng vì dòng trống kết thúc NOTE. Hướng dẫn gốc của H3 tách các trường bằng dòng trống, nhưng trong NOTE phải dùng một lần xuống dòng.
- Mỗi NOTE dùng một `Language:` và một `Prompt:` không rỗng. Không đặt mốc có `-->` trong NOTE, không để NOTE có metadata ở cuối mà thiếu đoạn đọc phía sau.
- Sau mốc chỉ có lời cần đọc/hiện phụ đề. Không chèn hướng dẫn máy quay, tên tệp, lời nhắc cho AI hoặc Markdown vào phần này. Tên người nói dạng văn bản cũng có thể bị TTS đọc thành tiếng; chỉ ghi nếu đó là chủ ý của lời kể.
- `Language` là metadata, không tự chọn giọng hay đổi model TTS. Giọng được chọn trong Datalac.
- Tệp thật không chứa hàng rào code Markdown. Ưu tiên UTF-8.

SRT có NOTE là **dạng mở rộng của Datalac**, không phải SubRip thuần. Không gọi tệp dấu phẩy này là WebVTT chuẩn.

## Cú pháp MiniMax H3

Phần này tóm tắt hướng dẫn chính thức của MiniMax. Khi cần nguyên văn, đối chiếu tài liệu gốc trong mục cuối.

### Chế độ sinh

| Chế độ | Khi dùng | Khác biệt trong prompt |
| --- | --- | --- |
| T2VA | Chỉ có văn bản | Bắt đầu thẳng bằng ba trường. **Đây là mặc định của tệp kịch bản** |
| I2VA | Ảnh là khung đầu | Thêm dòng căn chỉnh ảnh ở đầu, một dòng trống ý nghĩa, rồi ba trường. Mô tả theo trục: neo khung đầu, bắt đầu hành động, phát triển, kết quả |
| FL2VA | Có khung đầu và cuối | Thêm dòng căn chỉnh. Thường để một cảnh. Không tả lại hai ảnh tĩnh, hãy tả đường đi nối chúng |
| L2VA | Ảnh là khung cuối | Thêm dòng căn chỉnh. Suy ra trạng thái trước đó hợp lý rồi hội tụ dần về ảnh |
| Ref2VA | Có ảnh, video, audio tham chiếu | Dùng cấu trúc sáu trường, xem mục "Prompt tham chiếu" |

Dòng căn chỉnh là chuỗi cố định: lấy nguyên văn ở mục 2.1 của hướng dẫn base. Với tệp có dòng trống trong dòng căn chỉnh, NOTE vẫn không được có dòng trống; chỉ dùng các chế độ này khi đã biết Datalac tạo chúng bằng cách nào.

### Ba trường cốt lõi

- `integrated_multimodal_description`: trục thời gian của hình, hành động, cú máy, người nói, lời thoại và âm thanh trong cảnh. Mọi chi tiết phải thấy được hoặc nghe được.
- `overall_soundscape`: 1-4 câu tiếng Anh trong một đoạn, gồm tiếng môi trường, tiếng hành động vật lý và âm thanh phi ngôn ngữ của người. Không lặp thoại. Chỉ dùng `N/A` khi thật sự muốn im lặng hoàn toàn.
- `non_diegetic_music`: 1-3 câu về nhạc chỉ khán giả nghe. Tả nhạc cụ, tốc độ, nhịp và thay đổi cường độ, không dùng từ cảm xúc trừu tượng như epic hay emotional. Không có nhạc thì ghi `N/A`.

Đầu `[Shot 1]` phải nêu phong cách và bố cục ban đầu, ví dụ `Live-action`, `cinematic`, `2D-animated`, `3D CG`, `claymation`, `watercolor`, `vintage film`.

### Cảnh và điểm cắt

- `[Shot 1]` không có mốc thời gian. Cảnh sau viết dạng `[Shot 2] At 00:05.000, the camera cuts to ...`, mốc tăng dần và nằm trong thời lượng clip.
- Dùng một mốc đơn, không dùng khoảng kiểu `[5s-8s]`.
- Cụm chuyển cảnh thường dùng: `the camera cuts to`, `the shot cuts to`, `the shot transitions to`. Chỉ dùng dissolve, fade, wipe khi có chủ ý.
- Điểm cắt phải mang thông tin mới về chủ thể, không gian, trạng thái, điểm nhìn hoặc thời gian. Nếu chỉ đổi khoảng cách hay góc nhẹ, dùng chuyển động máy.

**Mặc định của Datalac: mỗi đoạn một `[Shot 1]`.** Datalac có thể chia một đoạn thành nhiều clip native 3/5/10 giây, nhất là sau khi giãn giọng, nên mốc cắt trong prompt có thể sai. Chỉ viết nhiều cảnh khi thời lượng clip thực tế đã được kiểm soát. Không ghi thời gian tuyệt đối của cả bài vào prompt.

### Ngôn ngữ máy quay

Công thức: **loại chuyển động + biên độ + tốc độ**, viết thành câu tiếng Anh tự nhiên trong cảnh, không xếp nhãn ở cuối câu. Biên độ và tốc độ trung bình thì bỏ qua.

| Loại | Nghĩa |
| --- | --- |
| Zoom In / Zoom Out | Đổi tiêu cự, thân máy đứng yên |
| Push In / Pull Out | Máy tiến / lùi thật |
| Pan Left / Pan Right | Máy đứng yên, xoay ngang |
| Truck Left / Truck Right | Máy tịnh tiến ngang |
| Tilt Up / Tilt Down | Máy đứng yên, xoay dọc |
| Pedestal Up / Pedestal Down | Cả máy nâng / hạ |
| Arc Shot | Máy đi vòng cung quanh chủ thể |
| Tracking Shot | Máy đi theo chủ thể |
| Static Shot | Máy và ống kính đứng yên |
| Shake Slightly / Shake Strongly | Rung nhẹ / mạnh |
| POV | Góc nhìn chủ thể |
| Roll Clockwise / Counterclockwise | Xoay quanh trục ống kính |

Biên độ: `with small amplitude`, `with large amplitude`. Tốc độ: `at slow speed`, `at fast speed`.

Tách rõ ba thứ: chủ thể chuyển động, máy chuyển động và điểm cắt. Viết `She walks forward at a relaxed pace. The camera tracks backward at the same speed`, không viết `dynamic tracking shot`.

### Chữ trên hình

Dấu ngoặc kép chỉ dành cho chữ thật sự hiện trong cảnh, giữ nguyên văn. **Prompt mặc định không có dấu ngoặc kép**, để không gợi ý mô hình sinh chữ. Lời nói không đặt trong ngoặc kép.

### Không có negative prompt

Hướng dẫn chính thức không có mục negative. Danh sách cấm dài có thể đưa thêm đúng khái niệm cần tránh vào prompt. Vì vậy:

- Ưu tiên tả điều muốn thấy: `bare weathered planks`, `an unmarked wooden hull`, `his lips closed`.
- Chỉ thêm một vế cấm ngắn, cụ thể khi render thử thực sự có lỗi đó.
- Không dán cùng một câu cấm dài vào mọi đoạn.

### Khi cần lời nói do H3 tạo

Mặc định lời kể do Datalac đọc riêng, prompt không chứa thoại và nhân vật giữ `lips closed`. Chỉ dùng cú pháp dưới đây khi người dùng yêu cầu và Datalac giữ âm thanh H3.

```text
The old fisherman with a low, raspy voice (S1) says: <d>[Vietnamese] Nước lên rồi.</d>
```

- Mỗi nguồn giọng có ID ổn định `(S1)`, `(S2)` xuyên suốt; hát hoặc nói đồng thời dùng `(S1,S2)`. Nhân vật không phát âm thì không có ID.
- Lần đầu xuất hiện, nêu tuổi, giới tính, cao độ, âm sắc, tốc độ nói và có ở trong khung hay không.
- Trong `<d>` chỉ có thẻ ngôn ngữ và đúng lời nói, không dịch. Giữ dấu câu cơ bản, kết câu bằng dấu `.`, `?`, `!`. Tránh dấu ba chấm vì thường làm lời kém rõ.
- Lời dẫn ngoài hình dùng đúng cụm `says in an off-screen voiceover`, và ngay sau `</d>` nêu môi nhân vật trong hình khép kín.
- Lời vắt qua điểm cắt dùng `<scenetrans>` ở cả hai phía và nêu âm thanh tiếp diễn qua điểm cắt. Lời bị cắt ở cuối clip dùng `<cutoff>`.
- Gắn lời với sự kiện thấy được, không gắn với mốc thời gian.

### Prompt tham chiếu (Ref2VA)

Chỉ dùng khi đã biết đúng danh sách và thứ tự media thực truyền. Không bịa `<Picture N>` hay `<Subject N>`. Tệp kịch bản mặc định dùng mô tả cảnh.

Sáu trường theo đúng thứ tự: `subject_definitions`, `summary`, `retention_analysis`, `detailed_description`, `overall_soundscape`, `non_diegetic_music`.

| Nhãn | Dùng cho |
| --- | --- |
| `<Subject N>` | Nội dung thấy được thực sự dùng lại: người, vật, cảnh, trang phục, phong cách, động tác |
| `<Picture N>` | Ảnh làm khung đầu, khung khóa, khung cuối hoặc neo bố cục. Ảnh chỉ để định nghĩa nhân vật thì trích trong `<Subject N>`, không tạo mục riêng |
| `<Video N>` | Quan hệ toàn video: nguồn sửa, điểm nối tiếp, chuyển động máy, nhịp cắt |
| `<Audio N>` | Âm thanh được sao chép hoặc tham chiếu |

- Đánh số độc lập theo từng loại, tính từ 1. Rãnh âm của video tham chiếu, nếu được dùng, lấy số `<Audio n>` kế tiếp trước các clip âm thanh rời.
- `summary` mở bằng tiền tố vuông, ví dụ `[reference generation]`, `[keyframe completion]`, `[reference generation + audio reference]`.
- `retention_analysis` mỗi nhãn một dòng. Hình dùng `fully_preserved`, `partially_preserved`, `attribute_transfer`, `weak_reference`. Âm thanh dùng `fully_copy`, `partially_copy`, `reference`, `weak_reference`.
- `detailed_description` mở bằng một, hai câu về phong cách trước `[Shot 1]`. Hướng dẫn gốc đề xuất 350-500 từ, có thể chạm giới hạn 3.000 ký tự của NOTE, nên ưu tiên cho Datalac dựng prompt này.
- Giao cho mỗi tham chiếu một việc và nêu rõ tệp nào thắng khi xung đột, ví dụ ánh sáng lấy từ ảnh nào.
- Tham chiếu là hướng dẫn lỏng, không phải khóa cứng. Luôn viết lại đặc điểm nhận diện bằng chữ. Ảnh chỉ neo vào timeline không đi qua bộ mã hóa văn bản, nên chữ phải tả điều ảnh đó thể hiện.
- Khung khóa khác góc, nơi chốn hoặc ánh sáng nên đi với một điểm cắt thật. Nếu nằm trong một cảnh liên tục, chúng dễ hòa tan vào nhau.

## Nghệ thuật: làm prompt đẹp và hay

Các nguyên tắc dưới đây là kinh nghiệm đạo diễn, không phải yêu cầu cú pháp. Dùng chúng để chọn nội dung cho prompt.

### Hình phải nói thêm điều lời chưa nói

Lời kể đã lo phần ý. Nếu hình chỉ minh họa đúng câu chữ, người xem nhận cùng thông tin hai lần. Hãy tìm một chi tiết cụ thể chứa cảm xúc của câu.

| Lời kể | Hình yếu | Hình mạnh |
| --- | --- | --- |
| Ông vẫn đợi con trai về | An old man waits sadly at a table | He sets two bowls, then covers the second with a plate to keep it warm |
| Mùa màng thất bát | A dry, ruined field | A hand closes around a rice stalk and the empty husks crumble between the fingers |
| Cô quyết định ra đi | She looks determined | She lifts the key from its nail, leaving a pale outline on the sooty wall |

### Mỗi clip có một thay đổi

Viết theo trục **trạng thái đầu → chuyển động → trạng thái cuối**. Nêu rõ tay nào, đi về đâu, kết thúc ra sao. Một clip không có gì thay đổi chỉ là ảnh tĩnh có rung nhẹ.

Lượng hành động gợi ý cho một clip:

| Độ dài clip | Vừa sức |
| --- | --- |
| 3 giây | Một cử chỉ hoặc một phản ứng |
| 5 giây | Một hành động và kết quả |
| 10 giây | Một hành động hai nhịp, hoặc hành động và phản ứng |

Viết sao cho prompt **chịu được việc bị cắt**: hành động chính bắt đầu ngay trong vài giây đầu, trạng thái cuối có thể giữ yên được. Đừng để toàn bộ ý nghĩa nằm ở giây cuối. Đoạn dài hơn 10 giây nên tách thành hai đoạn có hai prompt.

### Sáu lớp của một khung hình đẹp

1. **Điểm nhìn có ý đồ:** góc thấp sát mặt nước, qua khung cửa, qua vai, nhìn từ trong thuyền ra.
2. **Chiều sâu ba lớp:** tiền cảnh mờ, chủ thể ở trung cảnh, hậu cảnh kể thêm chuyện.
3. **Ánh sáng có nguồn:** nêu nguồn sáng, hướng, độ cứng mềm và nhiệt màu. Viết `a low amber sun behind the bamboo rims his shoulders`, không viết `beautiful lighting`.
4. **Bảng màu kỷ luật:** tối đa ba tông chủ đạo cho cả phim, một màu nhấn dành riêng cho điều quan trọng.
5. **Chất liệu:** gỗ ẩm, vải thô, gốm rạn, da sạm nắng. Chất liệu cụ thể làm hình có trọng lượng.
6. **Không khí chuyển động:** sương trôi, bụi trong nắng, hơi nước, tóc, gấu áo, gợn nước. Lớp chuyển động phụ này làm khung hình sống ngay cả khi nhân vật đứng yên.

Đổi từ sáo rỗng thành thứ quay được:

| Tránh | Thay bằng |
| --- | --- |
| beautiful, stunning, epic, 8k | Bố cục, ánh sáng và chất liệu cụ thể |
| she is sad | Her thumb stops on the rim of the cup and she does not drink |
| dynamic camera | Một loại chuyển động, kèm biên độ, tốc độ và đích nhìn |
| cinematic lighting | Nguồn sáng, hướng và màu |

### Chuyển động máy phải có lý do

| Ý nghĩa muốn tạo | Lựa chọn |
| --- | --- |
| Nhận ra điều gì đó, tiến vào nội tâm | Push in, small amplitude, slow speed |
| Cô đơn, kết thúc, nhìn lại | Pull out, slow speed |
| Sức nặng, im lặng, để hành động tự nói | Static shot |
| Hành trình, đồng hành | Tracking shot hoặc truck theo nhân vật |
| Kính ngưỡng, thiên nhiên lớn lao | Tilt up hoặc pedestal up |
| Bước ngoặt, quan hệ đổi chiều | Arc shot, small amplitude |
| Tiết lộ điều ngoài khung | Pan hoặc truck, kết thúc ở đối tượng mới |
| Bất an, biến cố | Shake slightly, hoặc POV |

Mỗi clip chỉ một chuyển động máy chính. Phần lớn đoạn nên ở biên độ nhỏ, tốc độ chậm, để những cú lớn thật sự có trọng lượng. Chuyển động nhanh và chủ thể nhỏ trong khung là hai chỗ dễ lỗi nhất; xử lý bằng cách thiết kế cảnh khác đi, không phải viết prompt dài hơn.

### Nhịp của cả phim

Rà shot list theo các tiêu chí sau:

- **Hình mở** phải có một chi tiết lạ hoặc một câu hỏi ngay từ giây đầu.
- **Hình kết** bắt vần với hình mở: cùng địa điểm khác ánh sáng, cùng vật khác trạng thái.
- **Đường đi ánh sáng** có chủ ý xuyên phim, ví dụ bình minh lạnh sang trưa gắt rồi hoàng hôn ấm.
- **Motif lặp lại** xuất hiện ít nhất ba lần và biến đổi theo truyện.
- **Cỡ cảnh xen kẽ:** không quá hai đoạn liền nhau cùng cỡ cảnh hoặc cùng chuyển động máy.
- **Có một cảnh đỉnh** gần hai phần ba phim, được dành biên độ lớn nhất; sau đó là một nhịp thở bằng static shot.
- **Nối đoạn:** trạng thái cuối đoạn trước gợi trạng thái đầu đoạn sau, bằng hướng nhìn, hình dáng tương đồng hoặc một âm thanh chung.
- **Hướng màn hình nhất quán:** nhân vật đi từ trái sang phải thì giữ hướng đó, trừ khi hành trình đổi chiều có chủ ý.

Bố cục mẫu cho 12 đoạn:

| Đoạn | Vai trò | Thiên về |
| --- | --- | --- |
| 1-2 | Móc người xem, lập thế giới | Rộng, chi tiết lạ |
| 3-5 | Nhân vật và mong muốn | Trung cảnh, cận tay và mặt |
| 6-8 | Trở ngại leo thang | Xen kẽ cỡ cảnh, ánh sáng đổi dần |
| 9 | Cảnh đỉnh | Biên độ lớn nhất |
| 10-11 | Hệ quả, lắng lại | Cận, static shot |
| 12 | Hình kết bắt vần hình mở | Rộng, pull out |

### Diễn xuất nằm ở những cử động nhỏ

Không ghi tên cảm xúc. Ghi điều cơ thể làm: bàn tay dừng lại, ánh mắt né đi, hơi thở thành khói, ngón tay miết mép giấy. Muốn giữ rõ mặt, dùng trung cảnh hoặc cận cảnh cho nhịp cần nhận diện, để cảnh rộng lo phần không gian.

### Âm thanh tạo không gian

Thiết kế `overall_soundscape` theo ba lớp: một nền liên tục, một hoặc hai tiếng gắn đúng hành động trong hình, và có thể một tiếng ở xa gợi thế giới ngoài khung. Mỗi địa điểm nên có một âm thanh đặc trưng lặp lại được.

`non_diegetic_music` mặc định là `N/A` khi các clip được ghép thành phim: mỗi clip tự sinh nhạc riêng sẽ đổi giai điệu tại mối nối. Nhạc nền chung nên làm ở hậu kỳ. Chỉ viết nhạc trong prompt khi clip đứng độc lập hoặc người dùng yêu cầu. Nếu lời nói lạ vẫn xuất hiện, điền rõ cả hai trường âm thanh và tả môi nhân vật khép.

### Bản sắc Việt Nam cụ thể

Mô tả chung chung như `traditional Asian village` dễ trượt thành một Á Đông pha trộn. Hãy gọi đúng vật thể, thời kỳ và vùng miền:

- Kiến trúc: nhà ba gian mái ngói mũi hài, nhà sàn gỗ, cầu tre, ao làng, cây đa, giếng nước.
- Trang phục: áo tứ thân, yếm, áo nâu, áo dài đúng thời kỳ, nón quai thao, khăn mỏ quạ.
- Đồ vật: chum vại, gốm Bát Tràng, thuyền thúng, đèn dầu, liềm, gánh tre.
- Thiên nhiên: ruộng bậc thang, đồng chiêm trũng, sông Hồng phù sa, rừng tràm, mưa phùn.

Với truyện dân gian hoặc lịch sử, kiểm tra chi tiết thời kỳ, không gán đồ vật của thời sau. Tả hình dáng và chất liệu bằng tiếng Anh thay vì chỉ ghi tên tiếng Việt.

### Nội dung khoa học

Vẻ đẹp phải đến từ sự thật. Mô tả đúng chuyển động, tỷ lệ, thời gian và điều kiện quan sát. Không thêm hiệu ứng đẹp nhưng sai bản chất.

```text
Prompt: integrated_multimodal_description: [Shot 1] Documentary, realistic night-sky astrophotography, a static wide shot frames a dark limestone ridge under a moonless sky, the band of the Milky Way rising diagonally behind it. The camera holds a static shot as a thin white meteor crosses the upper left of the frame in about one second and fades, leaving a faint glowing trail that slowly disperses among the stars. Grass on the ridge moves gently in the night wind.
overall_soundscape: Soft night wind crosses the grass while crickets continue steadily. The meteor passes in complete silence.
non_diegetic_music: N/A
```

### Điểm xuất phát cho phong cách

Chọn một phong cách cho cả phim, ghi cùng một cụm mở đầu ở mọi prompt. Các cụm dưới đây là gợi ý cần render thử.

| Hướng | Cụm mở đầu `[Shot 1]` |
| --- | --- |
| Truyện cổ hiện thực | `Live-action, cinematic, painterly realism` |
| Hoài niệm | `Vintage film, live-action, soft 35mm grain, faded warm tones` |
| Tài liệu thiên nhiên | `Documentary, live-action, natural light, restrained color` |
| Truyện thiếu nhi | `3D CG, handcrafted storybook look, soft rounded forms` |
| Cổ tích trữ tình | `2D-animated, watercolor washes on textured paper` |
| Vui, thủ công | `Claymation, visible fingerprints in the clay, tabletop lighting` |

## Kiểm tra nhanh prompt

Với mỗi prompt, kiểm tra được bằng mắt hoặc script:

- Có đủ ba trường đúng thứ tự.
- Bắt đầu bằng `[Shot 1]` kèm phong cách và bố cục.
- Không có dòng trống bên trong, không có `-->`, không có dấu ngoặc kép ngoài chủ ý.
- Không dưới 3 loại chi tiết thấy được: bố cục, ánh sáng, hành động.
- Dưới 3.000 ký tự, nên giữ khoảng 2.800 để có dư địa. Nếu Datalac ghép thêm nội dung, giảm tiếp.
- Viết thường 120-250 từ tiếng Anh. Thêm chi tiết chỉ khi nó điều khiển thứ thấy được hoặc nghe được.
- Tên, đặc điểm nhận diện và phong cách khớp hồ sơ JSON.
- Không có từ sáo rỗng, số bước sampling, precision hoặc cấu hình GPU.
- Không dịch lời thoại hay lời kể sang tiếng Anh.

### Bảng tự chấm

Mỗi đoạn trả lời có hoặc không. Đoạn có từ hai câu "không" phải viết lại.

1. Dừng ở một khung bất kỳ, hình có đẹp không?
2. Có điều gì thay đổi từ đầu đến cuối clip không?
3. Hình có cho biết thêm điều lời kể không nói không?
4. Ánh sáng có nguồn và hướng rõ không?
5. Chuyển động máy có lý do không?
6. Hành động có vừa độ dài clip không?
7. Bỏ tên cảm xúc đi, người xem vẫn hiểu không?
8. Clip nối được với đoạn trước và sau không?

### Bắt bệnh khi render thử

| Hiện tượng | Nguyên nhân thường gặp | Cách sửa |
| --- | --- | --- |
| Hình phẳng, máy đứng yên | Không viết chuyển động máy | Thêm một chuyển động nhỏ, có đích nhìn |
| Lời nói lạ, tiếng líu ríu | Không chỉ rõ thoại hoặc im lặng | Điền đủ hai trường âm thanh, tả môi khép; nếu có thoại thì dùng ID và `<d>` |
| Nhạc không mong muốn | Thiếu hoặc mơ hồ trường nhạc | Ghi `non_diegetic_music: N/A` |
| Chữ hoặc phụ đề tự xuất hiện | Có dấu ngoặc kép, hoặc nhắc đến chữ | Bỏ ngoặc kép, tả bề mặt trơn không chữ |
| Cắt cảnh ngoài ý muốn | Tả nhiều nơi, nhiều việc | Rút còn một không gian và một hành động |
| Mặt, trang phục đổi | Nhận diện mờ, mặt quá nhỏ | Lặp đủ đặc điểm trong prompt, đưa máy gần hơn |
| Động tác méo, tay lỗi | Hành động nhanh hoặc phức tạp | Làm chậm, chia nhỏ, đổi góc giấu chi tiết khó |
| Hành động chưa xong đã hết clip | Quá tải so với thời lượng | Bớt một nhịp, tách đoạn |

## JSON hồ sơ và nhận diện nhất quán

Mẫu cấu trúc dưới đây cần được thay bằng nội dung và tên tệp thật của bộ đang làm:

```json
{
  "title": "Hành trình bên sông",
  "story": "hanh-trinh-ben-song.srt",
  "webvtt": "hanh-trinh-ben-song.vtt",
  "visual_direction": "Hiện thực hội họa, bình minh ven sông, bảng màu chàm, hổ phách và màu đất.",
  "film_bible": "Cùng một bến sông, thuyền gỗ và trang phục; khói bếp là motif lặp lại; máy quay chậm, biên độ nhỏ.",
  "prompt_profile": "A",
  "suggested_settings": {
    "style": "cinematic",
    "cinematography": "cinematic",
    "continuity": "character",
    "aspect": "16:9",
    "timing_policy": "expand"
  },
  "shot_plan": [
    {
      "cue": 1,
      "scale": "wide, low angle",
      "camera": "truck right, small, slow",
      "change": "An đi từ đầu bến tới tấm ván cuối",
      "sound": "tiếng ván gỗ ẩm"
    }
  ],
  "generation_mode": "built-in image_gen",
  "notes": "Ảnh tham chiếu là minh họa hư cấu cho câu chuyện.",
  "characters": [
    {
      "name": "An",
      "description": "Người Việt trưởng thành, tóc đen ngắn, gương mặt hiền; áo vải chàm và quần nâu giản dị. Giữ nguyên mặt, tóc và trang phục qua các cảnh.",
      "aliases": ["anh An"],
      "file": "nhan-vat-an.png",
      "source_cues": [1, 2],
      "prompt": "Canonical character reference of An: one Vietnamese adult, short black hair, kind distinct face, indigo linen tunic and brown trousers. Natural proportions, clear unobscured face, neutral pose, simple background, soft dawn-like lighting."
    }
  ]
}
```

Trường được bộ nhập hiện tại xử lý:

| Trường | Yêu cầu |
| --- | --- |
| `characters` | Mảng hồ sơ ở cấp gốc của object; dùng dạng này cho bộ bàn giao |
| `name` | Bắt buộc, tối đa 80 ký tự; riêng biệt và nhất quán |
| `description` | Bắt buộc, tối đa 800 ký tự; mô tả nhận diện thực dùng trong prompt phim |
| `aliases` | Tối đa 8 tên gọi, mỗi tên tối đa 80 ký tự; tránh tên gọi quá chung |
| `file` | Đường dẫn tương đối đến ảnh chính, ví dụ `nhan-vat-an.png` |
| `images` | Tùy chọn, tối đa 4 ảnh tổng cộng kể cả `file`; không lặp ảnh |
| `sha256` | Tùy chọn; SHA-256 thật của ảnh chính, 64 ký tự hex |

Trong bộ hoàn chỉnh, thêm `width`, `height`, `bytes`, `sha256` tính từ PNG đã lưu; lưu nguyên prompt đã dùng. Ghi đúng công cụ thực tế ở `generation_mode`, không chép giá trị mẫu nếu đã dùng công cụ khác. Có thể thêm `style_reference` để chỉ ra PNG dùng làm tham chiếu phong cách, `source_cues` để mô tả đoạn xuất hiện, và `sources` để ghi nguồn khoa học/lịch sử. `prompt_profile` và `shot_plan` là ghi chú làm việc; nếu `parse_manifest` từ chối trường lạ thì chuyển chúng vào `notes`.



### Gán nhân vật và đối tượng đúng cảnh

- Dùng tên chuẩn hoặc alias rõ trong lời kể khi tự nhiên và đúng nội dung. Bộ tự gán đọc lời kể, không đọc prompt video để tìm tên.
- Không thêm tên gượng vào lời kể chỉ để ép tự gán. Không dùng alias quá rộng như "người", "quả", "vệt sáng" cho mọi đối tượng.
- `source_cues` phải khớp số thứ tự đoạn và đối tượng thực sự cần xuất hiện trong hình. Nhân vật được nhắc tới chưa chắc cần xuất hiện; câu có đại từ hoặc sở hữu cần xem lại.
- Có thể đưa động vật, đồ vật hoặc hiện tượng vào `characters` để dùng chung kho ảnh, nhưng mô tả rõ đó là gì. Không nhân cách hóa đối tượng khoa học ngoài chủ ý; không gọi các nhóm có thể chồng lấp là phân loại loại trừ nhau.
- Một phim chọn tối đa **10 hồ sơ**, kể cả động vật/đồ vật/hiện tượng. Kho JSON có thể chứa nhiều hơn, nhưng không được hứa một phim dùng toàn bộ nếu vượt giới hạn. Khi nội dung cần hơn 10, tổ chức thành các phần phù hợp và giữ nhận diện xuyên suốt, không tự bỏ mất nhân vật cần thiết.

### Giữ nhận diện trong prompt

- Chốt một cụm nhận diện tiếng Anh cho mỗi nhân vật, gồm 3-5 đặc điểm dễ thấy, và lặp lại gần như nguyên văn ở mọi đoạn nhân vật xuất hiện. Mỗi clip có thể được sinh riêng, nên prompt phải tự đủ thông tin.
- Giữ cùng thời điểm, thời tiết, hướng sáng và bảng màu trong một địa điểm, rồi nêu lại trong prompt.
- Khi nhân vật đổi trang phục theo truyện, tạo ảnh và cụm nhận diện riêng cho giai đoạn đó.
- Chỉ đưa vào prompt đối tượng thực sự có trong hình.

## Sinh và lưu ảnh PNG

Sử dụng công cụ sinh ảnh sẵn có; ưu tiên **imagegen tích hợp** nếu có. Đọc hướng dẫn của công cụ/skill tương ứng và thực hiện đúng quy trình tạo ảnh.

- Mỗi hồ sơ có ít nhất một ảnh thật. Gọi sinh riêng từng đối tượng, không thay bằng một collage nhiều nhân vật khó tách nhận diện.
- Người: khuôn mặt rõ, tỷ lệ tự nhiên, tóc và phục trang cố định, tư thế đơn giản, nền ít gây nhiễu. Có thể dùng khung dọc khoảng 1024×1536.
- Nhân vật chính nên có đủ ảnh chính diện, ba phần tư và toàn thân, lưu riêng trong `images`.
- Động vật/đồ vật/hiện tượng: chọn góc và nền giúp đọc rõ đặc điểm cần lặp lại. Có thể dùng khung ngang khoảng 1536×1024. Không áp bố cục chân dung người cho mọi chủ đề.
- Giữ cùng phong cách, ánh sáng và bảng màu cho bộ; dùng ảnh đầu làm **tham chiếu phong cách**, không sao chép danh tính nhân vật đầu sang người khác.
- Nếu cần nhiều góc, dùng PNG riêng và ghi vào `images`, tối đa 4 ảnh/hồ sơ. Không để ảnh tham chiếu nhiều hình khiến prompt phim vô tình yêu cầu nhân bản đối tượng.
- Không thêm tên, chữ, watermark hoặc logo vào ảnh tham chiếu nếu người dùng không yêu cầu.
- Xem từng ảnh để kiểm tra đối tượng, diện mạo, trang phục, bố cục, chi tiết sai và tính nhất quán; sửa/sinh lại có mục tiêu nếu cần.
- Sau khi công cụ sinh xong, **copy ảnh đã chọn vào thư mục bộ**, giữ nguyên dữ liệu ảnh. Không phụ thuộc đường dẫn tạm hoặc chỉ lưu trong thư mục mặc định của công cụ.
- Ảnh phải là PNG hợp lệ, không phải SVG/JPEG đổi đuôi, ảnh rỗng hay placeholder. Mỗi ảnh tối đa 8 MiB; kiểm tra giải mã bằng công cụ xem ảnh hoặc thư viện ảnh sẵn có.
- Nếu công cụ không tạo được ảnh, báo đúng tệp còn thiếu và lý do. Không ghi bộ đã hoàn chỉnh hoặc tạo hash giả. Không tự chuyển sang dịch vụ cần khóa/phí mới nếu chưa được cho phép.

## Giới hạn cần kiểm tra


| Hạng mục | Giới hạn hiện tại |
| --- | --- |
| Một tệp SRT / WebVTT | 2 MiB, tối đa 3.000 đoạn, timeline không chồng và không quá 4 giờ sau khi giãn |
| Lời đọc mỗi đoạn | 4.000 ký tự |
| Prompt trong NOTE | 3.000 ký tự; tổng NOTE trước một đoạn tối đa 8.000 ký tự |
| Cảnh hình | Tối đa 10.000 clip; mức native Datalac đang dùng là 3/5/10 giây |
| Hồ sơ chọn cho một phim/đoạn/clip | 10 |
| Một bộ JSON nhập kho | 2 MiB, tối đa 50 hồ sơ, 100 ảnh khác nhau |
| Ảnh | Tối đa 4 ảnh/hồ sơ, 8 MiB/ảnh và 128 MiB tổng ảnh/lần nhập |
| Đường dẫn ảnh | Tương đối trong thư mục JSON; không URL, đường dẫn ổ đĩa hoặc `..` thoát thư mục |
| Tham chiếu H3 gốc | Tối đa 9 ảnh, 3 video, 3 audio, tổng 12 tệp, cần ít nhất một ảnh hoặc video |

Các mốc hình của Datalac được quy về 24 fps; một đoạn phải dài ít nhất một khung hình. Không lấy độ dài câu chữ làm bằng chứng đã khớp chính xác với giọng đọc hoặc từng từ.

## Nộp cho Datalac

1. Trên songask.com mở **Dự án**, chọn **Dự án mới**.
2. Chọn tệp .zip (hoặc chọn cùng lúc các tệp .srt, .json, .csv và ảnh).
3. Datalac kiểm tra từng tệp và báo lỗi theo tên tệp. Sửa lỗi đỏ rồi nhập lại; cảnh báo vàng không chặn.
4. Trong dự án, chọn giọng cho từng người đọc, xem lại từng đoạn, rồi **Đặt dựng**.

Giới hạn: .zip tối đa 300 tệp và 300 MiB khi giải nén; ảnh PNG/JPEG/WebP tối đa 8 MiB; tệp chữ tối đa 2 MiB; đường dẫn ảnh tương đối, không `..`, không URL.

## Nội dung bàn giao trong hội thoại

Sau khi tạo bộ, AI nêu: tên tệp, số đoạn, thời lượng dự kiến, số ảnh, danh sách người đọc, các đoạn nên dựng thử trước, và đường dẫn tải .zip.

## Mẫu đề bài

> Hãy làm theo hướng dẫn này. Tạo bộ phim về [chủ đề], dài khoảng [thời lượng], dành cho [công chúng], phong cách [phong cách], người đọc [một người kể / các nhân vật]. Trả về một tệp .zip gồm .srt, .json, ảnh nhân vật và phan-vai.csv nếu có nhiều người đọc.
