# Youtube Upload

> Đăng SHORTS (mặc định — cắt highlight ~60s) hoặc video lên 1 KÊNH YouTube (chọn theo TÊN) + tự viết tiêu đề/mô tả/tag/hashtag tối ưu (kênh reup ăn uống VN kiểu a Phong / Ăn Là Sập). Dùng khi user muốn "up/đăng video/short lên youtube", "đăng youtube", "lên kênh youtube X". Input = file video + TÊN KÊNH (thiếu thì hỏi + gợi ý). Đường CHÍNH = browser (YouTube Studio); API là tùy chọn.

- Skill: `tiennguyen1203/youtube-upload` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tiennguyen1203/youtube-upload`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tiennguyen1203/youtube-upload/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: tiennguyen1203 (https://skillmd.com/u/tiennguyen1203)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/tiennguyen1203/youtube-upload

---


# YouTube Upload — đăng video + metadata tự động

Nhận **1 file video** (đã edit) → **BẠN (Claude) viết tiêu đề + mô tả + tag + hashtag** (tối ưu reup ăn uống VN) → đăng lên **1 kênh YouTube**.

## ⭐ MẶC ĐỊNH KÊNH REUP NÀY = ĐĂNG **SHORTS** (KHÔNG đăng video dài)
Chiến lược kênh Ăn Là Sập là **Shorts** (reach tốt hơn cho kênh mới). Clip dub gốc thường ~6 phút = **quá dài cho Short** (Short tối đa **3 phút**, feed ăn nhất **30–60s**).
→ **MẶC ĐỊNH: CẮT NHIỀU Short ~55–60s từ 1 clip** (Tony chốt 15/7/2026 — "cắt nhiều phần vào"). Mỗi clip mukbang 5–6 phút tách được **2–4 Short** ở các mốc money-shot (mở bàn/reveal · món tủ trong tiêu đề · cao trào ăn · phản ứng · tráng miệng). Đừng chỉ ra 1 Short. YouTube tự nhận **dọc 9:16 + ≤3 phút → Short** (link ra `youtube.com/shorts/...`).
- Cắt bằng ffmpeg (giữ nguyên khung dọc, fade nhẹ 2 đầu):
  `ffmpeg -ss <start> -i "<clip>" -t 60 -vf "fade=t=in:st=0:d=0.25,fade=t=out:st=59.6:d=0.4" -af "afade=t=in:st=0:d=0.25,afade=t=out:st=59.6:d=0.4" -c:v libx264 -crf 20 -preset veryfast -pix_fmt yuv420p -c:a aac -b:a 192k -movflags +faststart out.mp4`
- ⚠️ File CapCut export **có thể đã cắt bớt** so với bản dub gốc (vd 330s→300s) → **timestamp segs_vi KHÔNG còn khớp**; phải TRÍCH KHUNG trực tiếp từ file CapCut (`ffmpeg -ss T -i clip -frames:v 1 f.jpg` rồi Read) để chọn mốc money-shot + canh cắt chỗ không đứt câu.
- Mỗi Short = metadata riêng (tiêu đề khác nhau theo đoạn) + **#Shorts** + 3–5 hashtag. Hẹn lịch: **CÙNG NGÀY, cách nhau 1 tiếng** (Tony chốt 16/7/2026 — vd 12:00 / 13:00 / 14:00 cùng ngày), KHÔNG rải mỗi ngày 1 cái. Báo user giờ đã đặt, họ chỉnh lại được.
- Chỉ đăng **video dài** khi user nói rõ. (14/7/2026: Claude lỡ đăng nguyên clip 6:35 thành video thường → Tony bảo "phải đăng Shorts chứ" → phải ẩn video dài + cắt Short lại.)

⚠️ **YouTube gắt reup hơn Facebook** (chính sách "inauthentic/reused content" 7/2025, phạt CẢ KÊNH; + Content ID bản quyền). Giọng Việt + caption che = điểm cộng "biến đổi" nhưng vẫn coi là **test/phễu view**. Nói thật với user.

## HAI đường đăng
| | Browser (studio.youtube.com) | Data API (`youtube_upload.py`) |
|---|---|---|
| Setup | Chỉ cần đăng nhập Google trong browser | OAuth Google Cloud (rườm rà) |
| Công khai | ✅ Public/hẹn lịch bình thường | ⚠️ **Project chưa audit → video BỊ KHÓA private**, không public được |
| Trạng thái | **ĐƯỜNG CHÍNH đang dùng** | Để dành sau (khi đã audit / chấp nhận private) |

→ **Mặc định đi browser.** Chỉ dùng API khi user đã setup OAuth + chấp nhận/đã qua giới hạn private.

## Đường dẫn
- Code: `~/.claude/skills/youtube-upload/` (`SKILL.md`, `youtube_upload.py`)
- Venv (nếu dùng API): `~/DouyinReup/.dubvenv` (cần cài `google-api-python-client google-auth-oauthlib`)
- Config API (nếu dùng): `~/DouyinReup/yt_config.json`

## QUY TRÌNH BROWSER (mặc định) — dùng Playwright MCP
1. **XÁC ĐỊNH KÊNH:** user nói tên kênh → dùng. Không nói + có nhiều kênh → hỏi (AskUserQuestion) + gợi ý theo loại video (ăn uống → "Ăn Là Sập").
2. **ĐĂNG NHẬP:** vào `studio.youtube.com`. Nếu bị đá ra trang chọn/đăng nhập Google → **KHÔNG tự nhập mật khẩu** (bảo mật). Nhờ user tự đăng nhập đúng tài khoản chứa kênh đó, rồi tiếp tục. Xác nhận đang ở đúng kênh (avatar/tên góc phải; đổi kênh qua "Chuyển tài khoản" nếu cần).
3. **VIẾT METADATA** (mục dưới): lưu `title.txt` + `desc.txt` (dựa nội dung clip — clip vừa dub thì đã biết từ segs_vi).
4. **UPLOAD:**
   - `Tạo (Create) ▸ Tải video lên (Upload videos)` → chọn file. ⚠️ **Browser MCP chỉ up được file trong `~/tony-programming`** → copy clip vào đó trước (`cp "<video>" ~/tony-programming/yt_upload.mov`), xong xoá sau.
   - Điền **Tiêu đề** + **Mô tả**.
   - **Đối tượng: "Không, đây KHÔNG phải nội dung dành cho trẻ em"** (Not made for kids) — BẮT BUỘC chọn.
   - "Hiện thêm (Show more)" → **Thẻ (Tags)**: dán list tag. (Hashtag để trong mô tả.)
   - Bấm tiếp qua các bước (Yếu tố video / Kiểm tra) → tới **Chế độ hiển thị (Visibility)**.
   - **Chế độ hiển thị:** Công khai (Public) / Không công khai (Unlisted) / Riêng tư (Private) / **Lên lịch (Schedule)**. ⚠️ Đây là bước ra ngoài → **HỎI user chọn** (mặc định gợi ý Public hoặc Schedule giờ VN) rồi mới **Xuất bản (Publish)** / **Lên lịch**.
5. **Tự soi + báo user:** chụp màn hình xác nhận đăng/hẹn lịch OK; báo **link video + kênh + tiêu đề**.

- **Shorts:** clip **dọc 9:16 ≤ 3 phút** → YouTube tự nhận là Short (up y hệt). Clip dài (vd 6 phút) = video thường. Muốn nhắm Short thì cắt highlight ngắn.

## METADATA — BẠN tự quyết (tối ưu reup ăn uống VN)
- **Tiêu đề (< 100 ký tự, từ khóa ở 3 chữ đầu, gây tò mò + emoji):**
  VD: `Đớp SẬP nhà hàng omakase — ngỗng quay 1999 tệ 😳🔥 | Ăn Là Sập`
- **Mô tả:**
  - **2-3 dòng đầu = HOOK** (hiện ở tìm kiếm/trước "xem thêm"): kể cái đỉnh nhất, gợi tò mò.
  - Vài dòng mô tả món + giọng trend (đớp/phê/thánh đớp/xỉu ngang).
  - **CTA:** hỏi 1 câu kéo comment + "🔔 Đăng ký kênh ... để hóng tập mới mỗi ngày!"
  - **Link chéo:** `👉 Facebook: fb.com/AnLaSap.Official`
  - **3–5 hashtag** cuối mô tả: `#mukbang #anuong #ansap` (+ `#Shorts` nếu là Short).
- **Thẻ (Tags, 10–15):** `mukbang, ăn là sập, ăn uống, review đồ ăn, thử thách ăn, mukbang việt nam, ẩm thực, đồ ăn trung quốc, review nhà hàng, ...` (thêm tên món/địa danh trong clip).
- **KHÔNG bịa** giá/số liệu. Ngôn ngữ kênh = Tiếng Việt.

## (TÙY CHỌN) Đường API — `youtube_upload.py`
Chỉ khi user đã setup OAuth. Đọc `~/DouyinReup/yt_config.json`:
```json
{"client_secret":"~/DouyinReup/yt_client_secret.json",
 "channels":{"Ăn Là Sập":{"token":"~/DouyinReup/yt_token_anlasap.json"}}}
```
- **SETUP (user tự làm):** console.cloud.google.com → tạo project → bật **YouTube Data API v3** → tạo **OAuth client (Desktop app)** → tải `client_secret.json` về `~/DouyinReup/`. Cài lib: `~/DouyinReup/.dubvenv/bin/pip install google-api-python-client google-auth-oauthlib`.
- Chạy: `PY=~/DouyinReup/.dubvenv/bin/python`
  `"$PY" ~/.claude/skills/youtube-upload/youtube_upload.py "<video>" --channel "Ăn Là Sập" --title-file title.txt --desc-file desc.txt --tags "a,b,c" --privacy public`
  - Hẹn giờ (giờ VN): `--publish-at "2026-07-15 19:00"` (tự đổi UTC; ép `--privacy private` theo yêu cầu API).
  - Lần đầu mở browser xin quyền → lưu token; lần sau tự refresh.
- ⚠️ **CẢNH BÁO private-lock:** project chưa qua audit của Google → **mọi video upload qua API bị khóa `private`**, đặt `public` cũng vô hiệu. Muốn public phải nộp audit (chờ Google duyệt). → Trước khi audit, **dùng browser** cho video công khai.

## Thành thật (nói với user)
- Reup + dub khó kiếm tiền bền + rủi ro bản quyền/ToS — làm để TEST view.
- YouTube phạt cấp KÊNH → đừng để 20 video giống khuôn; nên thêm biến đổi (bình luận riêng, ghép clip, đổi format).
- Mật khẩu Google là của user — Claude KHÔNG nhập hộ.

