Communitygithub.com

tach-nguoi

Hiệu ứng tách người trên video của bạn – chữ sau lưng, giới thiệu nhân vật đóng băng, dừng hình kiểu truyện tranh, và phân thân (một hoặc hai lần quay). Xử lý tiếng Việt chuẩn, tự động đặt chữ để dễ đọc, trong vùng an toàn của từng ứng dụng, tỷ lệ 9:16 hoặc 16:9.

Qu'est-ce que tach-nguoi ?

Skill này giúp bạn thêm hiệu ứng tách nền người khỏi video của chính mình, tạo chữ xuất hiện phía sau người (kiểu 'chữ sau lưng', 'chữ xuyên người'), hiệu ứng giới thiệu nhân vật đóng băng với bảng tên, dừng hình kiểu chụp ảnh hoặc truyện tranh, và hiệu ứng phân thân (một lần quay để lại bóng hoặc hai lần quay ghép hai vai). Skill hỗ trợ tiếng Việt đầy đủ, tự động kiểm tra độ tương phản chữ trên nền video và đặt chữ vào vùng an toàn của từng nền tảng (TikTok, YouTube Shorts, Reels, YouTube ngang). Hoạt động với Claude Code, yêu cầu PyTorch và mô hình RVM để tách nền (khuyến nghị có GPU NVIDIA), tất cả xử lý đều chạy trên máy người dùng, không gửi dữ liệu ra ngoài. Skill này cung cấp các lệnh CLI để kiểm tra môi trường, tạo ảnh mẫu nhanh, xem trước độ phân giải thấp, và render đầy đủ, đồng thời tự động lưu cache cut-out để tăng tốc các lần chạy sau.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/thegentleminh/thegentleminh-skills/tree/HEAD/plugins/tach-nguoi/skills/tach-nguoi

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Hiệu ứng tách người (person cut-out effects)

Bạn giúp người sáng tạo thêm hiệu ứng xung quanh người trong video của họ. Nhiều người dùng là người Việt: nếu họ viết tiếng Việt, hãy trả lời bằng tiếng Việt đơn giản, đời thường.

Script nằm trong thư mục scripts/ của skill này. Chạy chúng bằng đường dẫn đầy đủ (hoặc từ thư mục của skill) khi đang làm việc trong thư mục của người dùng: tệp cài đặt và mọi đầu ra đều nằm trong thư mục của người dùng, không bao giờ ở trong skill.

Yêu cầu và giới hạn

Hãy nói với người dùng những điều này trước khi cài đặt bất cứ thứ gì, và bất cứ khi nào yêu cầu cần thứ gì đó còn thiếu. python scripts/tn.py check hiển thị những gì đã có.

  • Cần: gói Claude trả phí với Claude Code; ffmpeg; Python 3.10+ với numpy, opencv-python, pillow. Việc tách nền cần PyTorch (khoảng 2-3 GB, tốt nhất nên cài trong môi trường Python riêng) và mô hình RVM, PyTorch sẽ tải một lần từ GitHub trong lần tách nền đầu tiên (khoảng 15-100 MB).
  • GPU: card NVIDIA được khuyến nghị mạnh mẽ. Với GPU, tách nền chạy khoảng 35-50 khung hình mỗi giây; trên CPU thì chậm hơn khoảng 20-50× (một clip 30 giây có thể mất 10-20 phút). Mọi hiệu ứng đều hoạt động dù có hay không có GPU.
  • Tốc độ (đã kiểm tra, RTX 4080): ảnh tĩnh trong vài giây; render đầy đủ ở 1080p chạy 18-27 fps cho chữ sau lưng và phân thân, và 9-19 fps cho hiệu ứng đóng băng (clip 20 giây mất khoảng 1-2 phút, sau lần tách nền một lần đầu tiên).
  • Hệ điều hành đã kiểm tra: Windows 10 (mọi lệnh). macOS: chưa kiểm tra (không có GPU NVIDIA ở đó, nên tách nền chậm).
  • Giới hạn: hoạt động tốt nhất với một hoặc hai người và có khoảng trống phía trên hoặc bên cạnh đầu. Các cảnh cận mặt dọc sẽ làm chữ nhỏ. Chuyển động nhanh, tóc trên nền phức tạp và vật thể trong suốt có thể tạo viền lem. Phân thân cần chân máy hoặc máy quay gần như cố định. Phân thân hai lần quay cần cả hai lần từ cùng một vị trí.
  • Thiếu gì thì tắt: không có PyTorch thì không hiệu ứng nào chạy được (mọi hiệu ứng đều cần tách nền). Hãy nói điều đó và đề nghị cài đặt (hỏi trước).
  • Quyền riêng tư: mọi thứ đều chạy trên máy của người dùng; chỉ có mô hình RVM được tải xuống một lần.

Cài đặt PyTorch (hỏi trước; nói rằng nó khoảng 2-3 GB)

Trong một môi trường riêng, để không làm hỏng các công cụ Python khác:

python -m venv tach-nguoi-env
tach-nguoi-env/Scripts/python -m pip install numpy opencv-python pillow      (macOS/Linux: tach-nguoi-env/bin/python)
tach-nguoi-env/Scripts/python -m pip install torch --index-url https://download.pytorch.org/whl/cu126   (NVIDIA GPU)
tach-nguoi-env/Scripts/python -m pip install torch                                                     (không có NVIDIA GPU)

Sau đó chạy mọi lệnh tn.py với Python đó (tach-nguoi-env/Scripts/python scripts/tn.py ...).

Quy tắc (luôn luôn)

  1. Không bao giờ sửa clip gốc của người dùng. Đọc chúng; ghi mọi kết quả thành tệp mới bên cạnh kế hoạch (hoặc nơi người dùng yêu cầu). Không có gì bị ghi đè: chọn tên mới.
  2. Hỏi trước khi cài đặt bất cứ thứ gì (nói rõ cái gì, tại sao, dung lượng bao nhiêu, lệnh chính xác).
  3. Ảnh tĩnh trước, sau đó xem trước độ phân giải thấp, rồi render đầy đủ. Hiển thị ảnh tĩnh và nói những gì kiểm tra phát hiện trước khi dành thời gian cho render đầy đủ.
  4. Đọc các kiểm tra mà script in ra (phần trăm ẩn, tương phản, ghi chú KHÔNG ĐỌC ĐƯỢC; cũng được lưu trong checks.json bên cạnh ảnh tĩnh) và nói với người dùng bằng một câu đơn giản mỗi lần. Hiệu ứng đóng băng in ra khung hình nào chúng đã đóng băng: hãy xem ảnh tĩnh.

Thiết lập (chỉ lần đầu)

Trước hiệu ứng đầu tiên, chạy python scripts/tn.py settings. Nếu nó báo CHƯA lưu, hãy hỏi các câu hỏi thiết lập bên dưới, từng câu một, bằng ngôn ngữ của người dùng (cách hỏi tiếng Việt được đưa ra); nếu nó báo CHƯA xong, chỉ hỏi những câu nó liệt kê. Mỗi câu hỏi đưa ra các tùy chọn của nó cùng với hai tùy chọn nữa:

  • "Mình chưa chắc, giải thích giúp mình": giải thích bằng một hoặc hai câu đơn giản tùy chọn đó thay đổi điều gì, sau đó hỏi lại.
  • "Cho mình xem hết để so sánh": chạy python scripts/tn.py sample <kind> <their clip> --out <project>/tach-nguoi-mau/<kind>.mp4 --text "<một từ trong video của họ>", hiển thị tệp, sau đó hỏi lại. Mất 5-40 giây (nói điều đó); nó dùng chính clip của họ, độ phân giải thấp, tất cả tùy chọn cạnh nhau, có nhãn.

Lưu từng câu trả lời ngay: python scripts/tn.py settings set <key>=<value>. Câu trả lời nằm trong tach-nguoi.settings.json trong thư mục dự án của họ, nên thiết lập sẽ không bao giờ chạy lại trừ khi họ yêu cầu ("làm lại phần cài đặt" → tn.py settings reset, sau đó hỏi lại). Kế hoạch vẫn có thể ghi đè bất kỳ cài đặt nào cho một video.

#Câu hỏi (tiếng Việt)Tùy chọn → giá trịkeyloại mẫu
1Video của bạn đăng ở đâu nhiều nhất?TikTok → tiktok · YouTube Shorts → shorts · Reels → reels · YouTube video ngang → youtubeplatformplatform
2Bạn thích kiểu chữ nào?Chữ cao, gọn → cao · Chữ đậm → dam · Đậm vừa → dam-vuafontfont
3Chữ màu gì?Trắng → #ffffff · Vàng → #ffd400 · Đen → #111111 · Màu của kênh (hỏi mã màu)colorcolor
4Người che chữ tới mức nào?Ít, chữ lúc nào cũng dễ đọc → light · Vừa → medium · Nhiều, kiểu trend → boldcovercover
5Chữ hiện ra kiểu nào?Trồi lên → rise · Bật ra → pop · Hiện từng chữ cái → letters · Hiện luôn → noneanimanim
6Lúc giới thiệu nhân vật, viền quanh người kiểu nào?Viền trắng → white · Viền phát sáng → glow · Không viền → noneoutlineoutline
7Màu điểm nhấn (vạch cạnh tên, dòng chức danh, hộp chữ truyện tranh)?Vàng → #ffd400 · Màu của kênh (hỏi mã màu)accent(hiển thị outline)
8Có thêm tiếng động không?Có → on · Không → offsfxsfx (phát từng âm thanh)

Giải thích cho "chưa chắc":

  1. Mỗi app che một phần màn hình (nút bấm bên phải, phần mô tả bên dưới). Mình đặt chữ và bảng tên tránh mấy chỗ đó.
  2. Chữ cao, gọn nhìn giống mấy video trend nhất; chữ đậm dễ đọc trên điện thoại nhỏ.
  3. Mình tự kiểm tra độ tương phản: chữ khó đọc trên nền thì mình thêm bóng mờ và báo bạn.
  4. "Ít" thì đầu chỉ chạm nhẹ vào chữ. "Nhiều" thì đầu che hẳn một hai chữ cái giữa từ, nhìn giống trend hơn nhưng khó đọc hơn. Chữ cái đầu và cuối mỗi từ luôn được giữ lại.
  5. Chỉ là cách chữ xuất hiện trong nửa giây đầu.
  6. Viền giúp người nổi lên khỏi nền tối khi video dừng hình.
  7. Tiếng động được tạo mới hoàn toàn, không dính bản quyền.

Đừng hỏi về những thứ clip đã trả lời (hình dạng, độ dài của nó). Nếu người dùng nói "cứ làm đi" hoặc "mặc định", chạy python scripts/tn.py settings defaults (tiktok, cao, trắng, medium, rise, white, điểm nhấn vàng, bật âm thanh) và tiếp tục.

Lệnh

Tất cả lệnh đều chạy với Python có các gói (xem python scripts/tn.py check).

python scripts/tn.py check                                   # cài đặt gì, GPU, mô hình RVM
python scripts/tn.py behind plan.json --out out/clip.mp4 --stills    # 4 ảnh tĩnh mỗi chữ + kiểm tra (nhanh)
python scripts/tn.py behind plan.json --out out/clip.mp4 --preview   # nửa kích thước, chỉ phạm vi chữ -> out/clip.preview.mp4
python scripts/tn.py behind plan.json --out out/clip.mp4             # render đầy đủ, giữ nguyên âm thanh gốc

Lần chạy đầu tiên trên một clip sẽ tách nền người khỏi toàn bộ clip (khoảng 50 fps trên RTX 4080) và lưu vào bộ nhớ đệm trong _tach-nguoi-work/ bên cạnh đầu ra.

Tệp kế hoạch (bạn viết nó)

{"clip": "raw/my-clip.mp4",
 "items": [{"text": "Thành công", "start": 1.0, "end": 7.0,
            "font": "cao", "color": "#ffffff", "anim": "rise", "cover": "medium"}]}
  • text: tiếng Việt hoàn toàn ổn (bất kỳ dạng nhập nào; nó được chuẩn hóa). Hiển thị bằng chữ in hoa trừ khi "upper": false. \n buộc hai dòng; nếu không, script cũng thử bố cục hai dòng và giữ lại cái tốt hơn.
  • start / end: giây. Ít nhất 0.5 giây.
  • font: cao (cao, gọn, kiểu cổ điển), dam (đậm), dam-vua (siêu đậm), hoặc đường dẫn tới tệp .ttf.
  • anim: rise, pop, letters (từng chữ một), none. Mỗi chữ cũng mờ dần trong 0.25 giây và đẩy vào 3% trong suốt thời gian tồn tại ("drift": 0 tắt tính năng đó).
  • cover: mức độ người có thể che chữ. light (luôn dễ đọc), medium (mặc định), bold (kiểu trend nặng).
  • Tùy chọn: x, y (tâm 0-1, để đặt bằng tay), width (phần trăm chiều rộng khung hình), shadow (0-1 phát sáng; được đặt tự động từ kiểm tra tương phản).

Việc đặt vị trí là tự động: kích thước và vị trí lớn nhất mà chữ nằm sau đầu và các chữ cái đầu và cuối của mỗi từ vẫn hiển thị, trong vùng an toàn của nền tảng (9:16 tránh thanh trên cùng, các nút bên phải và vùng phụ đề ở dưới cùng).

Hiệu ứng đóng băng khung hình

python scripts/tn.py freeze plan.json --out out/clip.mp4 --stills    # ảnh tĩnh chính cho mỗi lần đóng băng (nhanh)
python scripts/tn.py freeze plan.json --out out/clip.mp4 --preview   # nửa kích thước -> out/clip.preview.mp4
python scripts/tn.py freeze plan.json --out out/clip.mp4             # render đầy đủ
{"clip": "raw/my-clip.mp4",
 "items": [
  {"effect": "intro", "at": 2.0, "name": "Anh Tuấn", "role": "Đầu bếp · 20 năm nghề", "outline": "white", "color": "#ffd400"},
  {"effect": "snap", "at": 8.5},
  {"effect": "comic", "at": 13.2, "caption": "Ủa, thiệt hả?!"}
 ]}
  • Video tạm dừng trên một khung hình trong hold giây (mặc định: intro 2.4, snap 1.6, comic 1.8), sau đó tiếp tục. Clip dài ra do các lần dừng; âm thanh gốc cũng tạm dừng, và âm thanh riêng của hiệu ứng phát ra (được tạo từ đầu, không có giấy phép; "sfx": false tắt chúng, "sfx_gain" điều chỉnh âm lượng).
  • at là thời gian trong clip nguồn. Script đóng băng trên khung hình sắc nét nhất trong vòng ±0.25 giây (không bị nhòe chuyển động); "exact": true giữ nguyên khung hình chính xác. Chọn những khoảnh khắc mà khuôn mặt người đó rõ ràng: khi tên họ được nhắc đến, một phản ứng lớn, một tư thế.
  • intro: nền tối xám, người nhô lên 6% với đường viền (white, glow trong color, hoặc none), và thẻ tên trượt vào từ phía xa họ. name được hiển thị bằng chữ in hoa, role bằng color.
  • snap: nháy trắng + màn trập, khung hình thu nhỏ thành ảnh in nghiêng trên nền mờ.
  • comic: màu phẳng, đường viền mực, chấm halftone, các đường tốc độ nhấp nháy phía sau người, hộp caption tùy chọn (color đặt màu hộp).

Phân thân (clones)

python scripts/tn.py clone plan.json --out out/clip.mp4 --stills | --preview | (đầy đủ)
{"clip": "raw/walk.mp4",
 "items": [{"effect": "trail", "start": 6.3, "end": 13.0, "every": 0.8, "style": "fade", "fade": 0.6}]}
  • trail (một lần quay): khi người di chuyển, một bản sao được để lại mỗi every giây giữa start và end và ở lại, sau đó tất cả bản sao mờ dần trong fade giây. Chỉ người di chuyển mới được sao chép (ai đứng yên sẽ bị bỏ qua). style: fade (bản sao cũ hơn mờ hơn), solid, ghost (xuyên thấu, nửa xám). Một âm thanh nháy nhẹ phát ra khi mỗi bản sao xuất hiện ("sfx": false ở đầu kế hoạch tắt nó).
  • two (hai lần quay, một người trong hai vai): {"effect": "two", "second": "raw/take2.mp4", "start": 0, "end": 10, "b_start": 0, "mode": "overlay"}. overlay cắt người ra khỏi lần quay 2 và đặt họ lên trên lần quay 1 ("front": "a" giữ người của lần quay 1 ở phía trước khi họ cắt nhau); split nối hai lần quay dọc theo cột trống nhất, với một đường nối mềm.
  • Cả hai đều căn chỉnh mọi khung hình với nền trước, vì vậy máy quay hơi rung vẫn hoạt động (lệnh in ra mức độ máy quay đã di chuyển). Chân máy vẫn là tốt nhất: máy quay di chuyển, lia hoặc cầm tay với các chuyển động lớn sẽ không căn chỉnh được.

Giới hạn đã biết

  • Hoạt động tốt nhất khi có khoảng trống phía trên hoặc bên cạnh đầu. Trong cảnh cận mặt dọc khi khuôn mặt lấp đầy khung hình dọc, chữ sẽ nhỏ ở phía trên đầu; hãy nói điều đó và đề xuất một góc quay rộng hơn hoặc cover: bold.
  • Tách nền toàn bộ video cần PyTorch và mô hình RVM (GPL-3.0, được máy người dùng tải xuống trong lần sử dụng đầu tiên); GPU NVIDIA giúp nó nhanh.

Ví dụ về lời nhắc

Lời nhắc có thể sao chép (xem thêm ghi chú trong examples/prompts.md):

  • Khởi động một dòng: "Làm chữ 'THÀNH CÔNG' sau lưng mình trong clip raw/clip.mp4." → câu hỏi thiết lập (lần đầu), 4 ảnh tĩnh với kiểm tra khả năng đọc, sau đó full clip với chữ sau lưng bạn.
  • Tóm tắt chi tiết: "Clip raw/phong-van.mp4: giây 2 giới thiệu nhân vật tên 'Chị Lan', chức danh 'Chủ quán phở · 15 năm', giây 9 dừng hình kiểu truyện tranh với câu 'Thiệt luôn hả?!', giây 14 chụp ảnh dừng hình. Có tiếng động." → một render với giới thiệu thẻ tên, đóng băng truyện tranh với hộp thoại và chụp ảnh, mỗi cái có âm thanh riêng.
  • Chữ sau lưng, kiểu trend: "Chữ 'ĐÀ LẠT' sau lưng mình, cho đầu che nhiều như trend, chữ vàng, hiện từng chữ cái."
  • Phân thân: "Clip raw/di-bo.mp4 mình đi ngang qua: để lại bóng mình mỗi 0,8 giây rồi mờ dần." → bản sao của bạn dọc theo đường đi, mờ dần cùng nhau.
  • Hai lần quay: "Mình quay 2 lần cùng chỗ (raw/vai-a.mp4, raw/vai-b.mp4), ghép thành 2 người nói chuyện với nhau."
  • So sánh: "Cho mình xem các kiểu chữ để so sánh." → một bảng so sánh có nhãn trên chính clip của bạn.
  • Ghi chú chỉnh sửa: "Chữ to hơn chút, dời lên trên, dừng hình lâu hơn 1 giây, bỏ tiếng chụp ảnh." → chỉ những thay đổi đó; ảnh tĩnh mới, sau đó render mới (cái cũ được giữ lại).

Nếu có lỗi xảy ra

Skill này được xây dựng bằng Claude Code, vì vậy có thể có lỗi, và mỗi máy tính đều khác nhau. Khi một bước thất bại, hoặc người dùng nói kết quả trông sai:

  1. Giải thích rõ ràng bằng tiếng Việt: điều gì đã thất bại và tại sao, bằng một hoặc hai câu. Không đưa ra stack traces thô trừ khi được yêu cầu.
  2. Đọc skill này và script liên quan (scripts/tn.py và tệp tn_*.py cho hiệu ứng). Chạy python scripts/tn.py check nếu có thứ gì có thể bị thiếu.
  3. Sửa lỗi và chạy lại, ghi một tệp đầu ra mới. Không bao giờ chạm vào hoặc ghi đè clip của người dùng, ngay cả khi đang sửa.
  4. Nếu nguyên nhân nằm trong chính skill này, hãy nói điều đó và đề nghị báo cáo để nó được sửa cho mọi người: https://github.com/thegentleminh/thegentleminh-skills/issues

Lỗi thường gặp

  • No module named 'torch': PyTorch không được cài đặt trong Python đã chạy lệnh; hãy sử dụng tach-nguoi-env/Scripts/python (hoặc tach-nguoi-env/bin/python). Chạy kiểm tra để xác nhận.
  • RVM model not found: Mô hình chưa được tải. Chạy một hiệu ứng nhỏ (ví dụ: ảnh tĩnh) sẽ tải nó; mất một lần. Nếu có lỗi tải, hãy đề xuất tải thủ công: xem scripts/tn.py để biết URL.
  • Mất bộ nhớ: Giảm độ phân giải. Sử dụng --preview trước để ước tính. Nếu clip quá dài, hãy đề xuất cắt clip.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

anh-thanh-video

Turn photos into a video - a beat-synced photo edit (photos change on the beat with flash, pop, shake and snap-and-ease camera moves, like the "2 ảnh / 3 ảnh" templates but with any song the user owns and any number of photos), a gentle photo album (slow push toward faces, soft crossfades, title and captions), or a 2.5D "3D zoom" where near things move more than far things. Faces stay in frame, Vietnamese text done right, 9:16 / 16:9 / 1:1 / 4:5. Use for "biến ảnh thành video", "ghép ảnh thành video", "video ảnh theo nhạc", "photo slideshow", "mẫu capcut nhiều ảnh", "video kỷ niệm", "album ảnh cưới/gia đình", "ảnh 3D", product photo videos.

dung-video

Set up a computer for editing YouTube videos with Claude Code and do basic edits with the free tool ffmpeg - check and install ffmpeg/Python, create a tidy project folder, trim, join, make a vertical 9:16 version for Shorts, Vietnamese subtitles (.srt) with Whisper, even out loudness, export with YouTube's recommended upload settings, grab a thumbnail frame. Use when the user wants to set up video editing, cut or join clips, make Shorts, add subtitles, fix volume, or export a video for YouTube.

video-giai-thich

Make a Vietnamese animated explainer video (9:16, TikTok / Reels / Shorts) from a topic or a question - "vì sao bầu trời màu xanh?", "lãi kép là gì?" - with a spoken-Vietnamese script, a voice (ElevenLabs, your own recording, or none), on-screen words that appear as they are spoken, and pictures animated in code and timed to the words. Five looks (riso print, chalkboard, newsprint, blueprint, poster). Use for "làm video giải thích", "video kiến thức", "video khoa học", "giải thích bằng hoạt hình", "explainer video in Vietnamese", "vibe coding animation", "video kiểu Vibe知识".

Skills associés