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.

¿Qué es tach-nguoi?

Đây là một kỹ năng (skill) chuyên dụng cho Claude Code, Cursor và các nền tảng AI agent tương tự, cho phép bạn tạo các hiệu ứng cắt tách người (person cut-out) trên video của chính mình. Skill hỗ trợ đặt chữ lớn phía sau người (text behind person), hiệu ứng giới thiệu nhân vật đóng băng (freeze-frame character intro) kèm thẻ tên, dừng hình kiểu truyện tranh (comic freeze), và tạo bản sao phân thân (clone). Nó được tối ưu cho người dùng Việt Nam với văn bản tiếng Việt được tự động đặt ở vị trí dễ đọc nhất, trong vùng an toàn của từng ứng dụng (TikTok, YouTube Shorts, Reels) ở tỉ lệ 9:16 hoặc 16:9. Skill yêu cầu PyTorch, ffmpeg và card đồ họa NVIDIA để chạy nhanh, và xử lý cục bộ trên máy người dùng, đảm bảo quyền riêng tư. Luồng làm việc bao gồm xuất ảnh tĩnh trước để kiểm tra, sau đó render preview độ phân giải thấp, rồi cuối cùng mới render đầy đủ.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

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

Bạn giúp một người sáng tạo tạo 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 bằng tiếng Việt, hãy trả lời bằng tiếng Việt nói thông thường.

Các 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ờ nằm 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 một yêu cầu cần thứ gì đó bị thiếu. python scripts/tn.py check cho thấy 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 người cần PyTorch (khoảng 2-3 GB, tốt nhất là trong môi trường Python riêng) và mô hình RVM, mô hình này PyTorch tải một lần từ GitHub trong lần tách người đầu tiên (khoảng 15-100 MB).
  • GPU: card NVIDIA được khuyến nghị mạnh mẽ. Với card này, việc tách người chạy ở tốc độ khoảng 35-50 khung hình/giây; trên CPU thì chậm hơn khoảng 20-50 lần (một clip 30 giây có thể mất 10-20 phút). Mọi hiệu ứng đều hoạt động theo cả hai cách.
  • Tốc độ (đã thử nghiệm, RTX 4080): ảnh tĩnh trong vài giây; render đầy đủ ở 1080p chạy 18-27 fps cho hiệu ứng chữ phía sau và phân thân, và 9-19 fps cho hiệu ứng đóng băng (một clip 20 giây trong khoảng 1-2 phút, sau lần tách người một lần).
  • Hệ điều hành đã thử nghiệm: Windows 10 (mọi lệnh). macOS: chưa thử nghiệm (không có GPU NVIDIA ở đó, nên việc tách người 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ận cảnh dọc khít khao sẽ có chữ nhỏ. Chuyển động nhanh, tóc trên nền bận rộn và các vật thể trong suốt tạo ra các cạnh thô. Phân thân cần chân máy hoặc máy quay gần như đứng yên. Phân thân hai lần quay cần cả hai lần từ cùng một vị trí.
  • Cái gì tắt nếu không có nó: không có PyTorch, không có hiệu ứng nào chạy được (mọi hiệu ứng đều cần tách người). Hãy nói như vậy và đề nghị cài đặt (hỏi trước).
  • Quyền riêng tư: mọi thứ đều chạy trên máy tính của người dùng; bản tải xuống duy nhất là mô hình RVM, 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, để nó không thể 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ờ thay đổi clip gốc của người dùng. Đọc chúng; ghi mọi kết quả dưới dạng 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 một 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, kích thước bao nhiêu, lệnh chính xác).
  3. Ảnh tĩnh trước, sau đó là bản xem trước độ phân giải thấp, sau đó là render đầy đủ. Hiển thị các ảnh tĩnh và nói những gì các kiểm tra đã phát hiện trước khi dành thời gian cho một bản render đầy đủ.
  4. Đọc các kiểm tra mà script in ra (phần trăm bị che khuất, độ tương phản, ghi chú KHÔNG ĐỌC ĐƯỢC; cũng được lưu trong checks.json bên cạnh các ảnh tĩnh) và nói với người dùng bằng một câu đơn giản cho mỗi cái. Hiệu ứng đóng băng in ra khung hình chúng đã đóng băng: hãy xem các ảnh tĩnh.

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

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ó kèm từ tiếng Việt); nếu nó báo CHƯA hoàn thành, chỉ hỏi những câu mà nó liệt kê. Mỗi câu hỏi đưa ra các tùy chọn của nó cộng thêm hai lựa 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 lựa 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 "<a word from their video>", hiển thị tệp, sau đó hỏi lại. Mất 5-40 giây (hãy nói như vậy); nó sử dụng clip của chính họ, độ phân giải thấp, tất cả các tùy chọn cạnh nhau, có nhãn.

Lưu mỗi câu trả lời ngay lập tức: python scripts/tn.py settings set <key>=<value>. Các câu trả lời nằm trong tach-nguoi.settings.json trong thư mục dự án của họ, vì vậy thiết lập 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). Các kế hoạch (plan) 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ịkhóaloại mẫu (sample kind)
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 để đưa ra 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 điều mà 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ả các lệnh chạy với Python đã cài các gói (xem python scripts/tn.py check).

python scripts/tn.py check                                   # những gì đã cài đặt, GPU, mô hình RVM
python scripts/tn.py behind plan.json --out out/clip.mp4 --stills    # 4 ảnh tĩnh cho mỗi chữ + kiểm tra (nhanh)
python scripts/tn.py behind plan.json --out out/clip.mp4 --preview   # một 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 người ra 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 được chấp nhận (bất kỳ dạng đầu vào nào; nó được chuẩn hóa). Được hiển thị bằng chữ hoa trừ khi "upper": false. Một \n buộc hai dòng; nếu không, script cũng thử bố cục hai dòng và giữ lại bố cục 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 (extra bold), hoặc đường dẫn đến 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 của nó ("drift": 0 tắt điều đó).
  • 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 chữ là tự động: kích thước và vị trí lớn nhất nơi chữ nằm phía sau đầu và các chữ cái đầu và cuối của mỗi từ luôn hiển thị, bên trong vùng an toàn của nền tảng (9:16 giữ khoảng cách với 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 (freeze-frame)

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   # một 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 hơn do thời gian tạm dừng; âm thanh gốc cũng tạm dừng và âm thanh của riêng 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 có mờ chuyển động); "exact": true giữ nguyên khung hình chính xác. Hãy chọn những khoảnh khắc nơi khuôn mặt người đó rõ ràng: khi tên họ được nói, một phản ứng lớn, một tư thế.
  • intro: nền trở nên tối và xám, người xuất hiện nổi lên 6% với một đường viền (white, glow trong color, hoặc none), và thẻ tên trượt vào ở phía xa họ. name được hiển thị bằng chữ hoa, role trong color.
  • snap: đèn flash trắng + màn trập, khung hình thu nhỏ thành một bức ảnh in nghiêng trên một bản sao bị làm mờ.
  • comic: màu phẳng, đường 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): trong 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ả các bản sao mờ dần trong fade giây. Chỉ người di chuyển mới được sao chép (người đứng yên sẽ được để nguyên). style: fade (các bản sao cũ hơn mờ hơn), solid, ghost (trong suốt, nửa xám). Một âm thanh flash 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 nơi họ giao nhau); split nối hai lần quay dọc theo cột ít người nhất, với một đường nối mềm.
  • Cả hai đều căn chỉnh từng khung hình với nền trước, vì vậy máy quay hơi trôi 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.

Cá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 một cận cảnh khít khao nơi khuôn mặt lấp đầy khung hình dọc, chữ sẽ nhỏ ở phía trên đầu; hãy nói như vậy và đề xuất một góc quay rộng hơn hoặc cover: bold.
  • Việc tách người 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); một GPU NVIDIA làm cho nó nhanh.

Ví dụ prompt

Các prompt có thể sao chép (thêm với ghi chú trong examples/prompts.md):

  • Bắt đầu 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 tiên), 4 ảnh tĩnh với kiểm tra khả năng đọc, sau đó là clip đầy đủ với chữ phía sau bạn.
  • Yêu cầu 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 bản render với giới thiệu thẻ tên, một lần đóng băng truyện tranh với hộp thoại và một lần chụp ảnh, mỗi cái có âm thanh riêng.
  • Chữ phía sau, 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." → các bản sao của bạn để lại 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 clip của chính 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 đó là bản render mới (bản cũ được giữ lại).

Nếu có sự cố

Skill này được xây dựng với Claude Code, vì vậy nó có thể có lỗi và mỗi máy tính là 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 nó một cách đơn giản, bằng tiếng Việt: cái gì đã thất bại và tại sao, bằng một hoặc hai câu. Không có raw stack traces 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 nó 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 đè các 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 như vậy và đề xuất báo cáo nó để nó được sửa cho mọi người: https://github.com/thegentleminh/thegentleminh-skills/issues

Các lỗi thường gặp

  • No module named 'torch': PyTorch chưa được cài đặt trong Python đã chạy lệnh; hãy sử dụng môi trường tach-nguoi-env đã tạo ở trên hoặc nói "Em chưa có PyTorch, anh/chị có muốn em cài không?" và chạy lệnh từ phần cài đặt.
  • "Dừng hình không thấy rõ mặt" hoặc kết quả phát hiện kém: kiểm tra video gốc có chuyển động mờ không (người và máy quay đứng yên lúc đó? Thời gian phơi sáng ngắn?). Nếu video có, thử "at" hơi khác một chút hoặc nói với người dùng rằng khu vực đó bị mờ.
  • Phân thân không thẳng hàng: máy quay di chuyển quá nhiều. Chạy lệnh với --stills để xem sự căn chỉnh nền trước. Bạn thậm chí có thể thấy điều này trong ảnh tĩnh: nếu nền nhân đôi, các lần quay không khớp. Hỏi người dùng xem họ có thể giữ máy quay tĩnh hơn không (dùng chân máy, hoặc ít nhất dựa vào tường).
  • Clip đầu ra hoàn toàn im lặng: người dùng đã tắt âm thanh nền ("sfx": false cũng tắt âm thanh hiệu ứng) nhưng lỗi phần mềm khiến nhầm lẫn giữa tắt âm thanh với giữ nguyên âm thanh gốc. Chạy lại với "sfx": true và thêm sfx_gain: 0 nếu họ muốn hiệu ứng im lặng. Nếu lỗi tái diễn, hãy báo cáo nó.

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 relacionados