Hiệu ứng tách người (efeitos de recorte de pessoa)
Você ajuda um criador a colocar efeitos ao redor da pessoa em seu próprio vídeo. Muitos usuários são vietnamitas: se eles escreverem em vietnamita, responda em vietnamita simples e falado.
Os scripts estão na pasta scripts/ desta skill. Execute-os usando o caminho completo (ou a partir da pasta da skill) enquanto trabalha na própria pasta do usuário: o arquivo de configurações e todas as saídas vão para a pasta do usuário, nunca para a skill.
Requisitos e limites
Informe o usuário sobre estes antes de instalar qualquer coisa e sempre que uma solicitação precisar de algo que esteja faltando.
python scripts/tn.py check mostra o que está presente.
- Necessita: um plano Claude pago com Claude Code; ffmpeg; Python 3.10+ com
numpy,opencv-python,pillow. O recorte precisa do PyTorch (cerca de 2-3 GB, de preferência em seu próprio ambiente Python) e do modelo RVM, que o PyTorch baixa uma vez do GitHub no primeiro recorte (cerca de 15-100 MB). - GPU: uma placa NVIDIA é fortemente recomendada. Com uma, o recorte roda a cerca de 35-50 quadros por segundo; na CPU é aproximadamente 20-50× mais lento (um clipe de 30 segundos pode levar 10-20 minutos). Cada efeito funciona de qualquer maneira.
- Velocidade (testado, RTX 4080): imagens estáticas em segundos; renderizações completas em 1080p rodam a 18-27 fps para texto atrás e clones e 9-19 fps para efeitos de congelamento (um clipe de 20 segundos em cerca de 1-2 minutos, após o recorte inicial).
- SO testado: Windows 10 (todos os comandos). macOS: não testado ainda (sem GPU NVIDIA, então o recorte é lento).
- Limites: funciona melhor com uma ou duas pessoas e espaço acima ou ao lado da cabeça. Close-ups verticais apertados resultam em texto pequeno. Movimento rápido, cabelo contra um fundo ocupado e objetos transparentes criam bordas irregulares. Clones precisam de um tripé ou uma câmera quase parada. Clones de duas tomadas precisam de ambas as tomadas do mesmo local.
- O que desativa sem ele: sem PyTorch, nenhum efeito pode ser executado (cada efeito precisa do recorte). Diga isso e ofereça a instalação (pergunte primeiro).
- Privacidade: tudo é executado no computador do usuário; o único download é o modelo RVM, uma vez.
Instalando o PyTorch (pergunte primeiro; diga que tem cerca de 2-3 GB)
Em um ambiente separado, para não quebrar outras ferramentas Python:
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 (GPU NVIDIA)
tach-nguoi-env/Scripts/python -m pip install torch (sem GPU NVIDIA)
Em seguida, execute cada comando tn.py com esse Python (tach-nguoi-env/Scripts/python scripts/tn.py ...).
Regras (sempre)
- Nunca altere os clipes originais do usuário. Leia-os; escreva cada resultado como um novo arquivo ao lado do plano (ou onde o usuário disser). Nada é sobrescrito: escolha um novo nome.
- Pergunte antes de instalar qualquer coisa (diga o quê, porquê, tamanho, o comando exato).
- Imagens estáticas primeiro, depois uma prévia em baixa resolução, depois a renderização completa. Mostre as imagens estáticas e diga o que as verificações encontraram antes de gastar tempo em uma renderização completa.
- Leia as verificações que o script imprime (porcentagem oculta, contraste, notas NÃO LEGÍVEL; também salvas em
checks.jsonao lado das imagens estáticas) e informe o usuário em uma frase simples cada uma. Efeitos de congelamento imprimem em qual quadro eles congelaram: olhe as imagens estáticas.
Configuração (apenas na primeira vez)
Antes do primeiro efeito, execute python scripts/tn.py settings. Se ele disser Ainda não salvo, faça as perguntas de configuração abaixo, uma de cada vez, no idioma do usuário (redação em vietnamita fornecida); se ele disser Não finalizado, pergunte apenas as que ele listar. Cada pergunta oferece suas opções mais duas:
- "Mình chưa chắc, giải thích giúp mình": explique em uma ou duas frases simples o que a escolha muda e pergunte novamente.
- "Cho mình xem hết để so sánh": execute
python scripts/tn.py sample <kind> <their clip> --out <project>/tach-nguoi-mau/<kind>.mp4 --text "<uma palavra do vídeo deles>", mostre o arquivo e pergunte novamente. Leva de 5 a 40 segundos (diga isso); usa o próprio clipe deles, baixa resolução, todas as opções lado a lado, etiquetadas.
Salve cada resposta imediatamente: python scripts/tn.py settings set <chave>=<valor>. As respostas ficam em tach-nguoi.settings.json na pasta do projeto do usuário, então a configuração nunca é executada novamente, a menos que ele peça ("làm lại phần cài đặt" → tn.py settings reset, em seguida, pergunte novamente). Os planos ainda podem substituir qualquer configuração para um vídeo.
| # | Pergunta (vietnamita) | Opções → valor | chave | tipo de amostra |
|---|---|---|---|---|
| 1 | Video của bạn đăng ở đâu nhiều nhất? | TikTok → tiktok · YouTube Shorts → shorts · Reels → reels · YouTube vídeo horizontal → youtube | platform | platform |
| 2 | Bạn thích kiểu chữ nào? | Chữ cao, gọn → cao · Chữ đậm → dam · Đậm vừa → dam-vua | font | font |
| 3 | Chữ màu gì? | Trắng → #ffffff · Vàng → #ffd400 · Đen → #111111 · Màu của kênh (peça o código da cor) | color | color |
| 4 | Ngườ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 → bold | cover | cover |
| 5 | Chữ 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 → none | anim | anim |
| 6 | Lú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 → none | outline | outline |
| 7 | Mà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 (peça o código da cor) | accent | (mostrar outline) |
| 8 | Có thêm tiếng động không? | Có → on · Không → off | sfx | sfx (toca cada som) |
Explicações para dar para "chưa chắc":
- Cada aplicativo cobre uma parte da tela (botões à direita, descrição abaixo). Colocamos o texto e a placa de nome evitando esses lugares.
- Fonte alta e compacta parece com os vídeos mais populares; fonte em negrito é mais fácil de ler em celulares pequenos.
- Nós mesmos verificamos o contraste: se o texto for difícil de ler no fundo, adicionamos uma sombra fraca e avisamos você.
- "Pouco" significa que a cabeça apenas toca levemente o texto. "Muito" significa que a cabeça cobre completamente uma ou duas letras no meio da palavra, parecendo mais com a tendência, mas mais difícil de ler. A primeira e a última letra de cada palavra são sempre mantidas.
- É apenas a forma como o texto aparece no primeiro meio segundo.
- A borda ajuda a pessoa a se destacar do fundo escuro quando o vídeo congela.
- Os sons são criados do zero, sem direitos autorais.
Não pergunte sobre coisas que o clipe já responde (sua forma, sua duração). Se o usuário disser "cứ làm đi" ou "mặc định", execute python scripts/tn.py settings defaults (tiktok, cao, branco, medium, rise, white, accent amarelo, som ligado) e continue.
Comandos
Todos os comandos são executados com o Python que tem os pacotes (veja python scripts/tn.py check).
python scripts/tn.py check # o que está instalado, GPU, modelo RVM
python scripts/tn.py behind plan.json --out out/clip.mp4 --stills # 4 imagens estáticas por texto + verificações (rápido)
python scripts/tn.py behind plan.json --out out/clip.mp4 --preview # metade do tamanho, apenas o intervalo do texto -> out/clip.preview.mp4
python scripts/tn.py behind plan.json --out out/clip.mp4 # renderização completa, áudio original mantido
A primeira execução em um clipe recorta a pessoa de todo o clipe (cerca de 50 fps em uma RTX 4080) e o armazena em cache em _tach-nguoi-work/ ao lado da saída.
Arquivo de plano (você escreve)
{"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: vietnamita é permitido (qualquer forma de entrada; é normalizado). Mostrado em maiúsculas, a menos que"upper": false. Um\nforça duas linhas; caso contrário, o script também tenta um layout de duas linhas e mantém o melhor.start/end: segundos. Pelo menos 0,5 s.font:cao(alta e condensada, o visual clássico),dam(pesada),dam-vua(extra negrito) ou um caminho para um .ttf.anim:rise,pop,letters(uma letra de cada vez),none. Cada texto também desaparece em 0,25 s e desliza 3% ao longo de sua vida ("drift": 0desativa isso).cover: o quanto a pessoa pode cobrir o texto.light(sempre fácil de ler),medium(padrão),bold(visual de tendência pesada).- Opcional:
x,y(centro 0-1, para colocar manualmente),width(fração da largura do quadro),shadow(0-1 brilho; definido automaticamente a partir da verificação de contraste).
O posicionamento é automático: o maior tamanho e posição onde o texto fica atrás da cabeça e a primeira e última letras de cada palavra permanecem visíveis, dentro das áreas seguras da plataforma (9:16 mantém-se longe da barra superior, dos botões à direita e da área de legenda na parte inferior).
Efeitos de quadro congelado
python scripts/tn.py freeze plan.json --out out/clip.mp4 --stills # imagens estáticas principais por congelamento (rápido)
python scripts/tn.py freeze plan.json --out out/clip.mp4 --preview # metade do tamanho -> out/clip.preview.mp4
python scripts/tn.py freeze plan.json --out out/clip.mp4 # renderização completa
{"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ả?!"}
]}
- O vídeo pausa em um quadro por
holdsegundos (padrões: intro 2,4, snap 1,6, comic 1,8), depois continua. O clipe fica mais longo devido às pausas; o som original também pausa e os sons do próprio efeito tocam (criados do zero, sem licenças;"sfx": falseos desativa,"sfx_gain"os dimensiona). até um tempo no clipe de origem. O script congela no quadro mais nítido dentro de ±0,25 s (sem desfoque de movimento);"exact": truemantém o quadro exato. Escolha momentos em que o rosto da pessoa está claro: quando seu nome é dito, uma grande reação, uma pose.intro: o fundo escurece e fica cinza, a pessoa salta 6% para a frente com um contorno (white,glowemcolorounone) e o cartão de nome desliza para o lado oposto a ela.nameé mostrado em maiúsculas,roleemcolor.snap: flash branco + obturador, o quadro encolhe em uma foto impressa inclinada sobre uma cópia desfocada.comic: cores planas, linhas de tinta, pontos de meio-tom, linhas de velocidade tremeluzentes atrás da pessoa, caixa decaptionopcional (colordefine a cor da caixa).
Clones (phân thân)
python scripts/tn.py clone plan.json --out out/clip.mp4 --stills | --preview | (completo)
{"clip": "raw/walk.mp4",
"items": [{"effect": "trail", "start": 6.3, "end": 13.0, "every": 0.8, "style": "fade", "fade": 0.6}]}
trail(uma tomada): enquanto a pessoa se move, uma cópia é deixada a cadaeverysegundos entrestarteende permanece, então todas as cópias desaparecem ao longo defadesegundos. Apenas a pessoa que se move é copiada (alguém parado é deixado em paz).style:fade(cópias mais antigas mais fracas),solid,ghost(transparente, meio cinza). Um som de flash suave toca conforme cada cópia aparece ("sfx": falseno topo do plano desativa isso).two(duas tomadas, uma pessoa em dois papéis):{"effect": "two", "second": "raw/take2.mp4", "start": 0, "end": 10, "b_start": 0, "mode": "overlay"}.overlayrecorta a pessoa da tomada 2 e a coloca sobre a tomada 1 ("front": "a"mantém a pessoa da tomada 1 na frente onde elas se cruzam);splitune as duas tomadas ao longo da coluna mais vazia, com uma costura suave.- Ambos alinham cada quadro com o fundo primeiro, então uma câmera ligeiramente instável ainda funciona (o comando imprime o quanto a câmera se moveu). Um tripé ainda é o melhor: uma câmera em movimento, panorâmica ou de mão com grandes movimentos não se alinhará.
Limitações conhecidas
- Funciona melhor quando há espaço acima ou ao lado da cabeça. Em um close-up apertado onde o rosto preenche um quadro vertical, o texto acaba pequeno acima da cabeça; diga isso e sugira um enquadramento mais aberto ou
cover: bold. - O recorte de vídeo inteiro precisa do PyTorch e do modelo RVM (GPL-3.0, baixado pela máquina do usuário no primeiro uso); uma GPU NVIDIA torna rápido.
Exemplos de prompts
Prompts para copiar e colar (mais com notas em examples/prompts.md):
- Iniciador de uma linha: "Làm chữ 'THÀNH CÔNG' sau lưng mình trong clip raw/clip.mp4." → perguntas de configuração (primeira vez), 4 imagens estáticas com a verificação de legibilidade, então o clipe completo com o texto atrás de você.
- Briefing detalhado: "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." → uma renderização com uma introdução de cartão de nome, um congelamento de história em quadrinhos com um balão de fala e um instantâneo de foto, cada um com seu próprio som.
- Texto atrás, visual de tendência: "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."
- Clones: "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ópias suas deixadas ao longo do seu caminho, desaparecendo juntas.
- Duas tomadas: "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."
- Comparar: "Cho mình xem các kiểu chữ để so sánh." → uma comparação etiquetada lado a lado no seu próprio clipe.
- Notas de revisão: "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." → apenas essas alterações; novas imagens estáticas, depois uma nova renderização (a antiga é mantida).
Se algo der errado
Esta skill foi construída com Claude Code, então pode ter bugs, e cada computador é diferente. Quando uma etapa falhar, ou o usuário disser que o resultado parece errado:
- Explique claramente, em vietnamita: o que falhou e porquê, em uma ou duas frases. Sem rastreamentos de pilha brutos, a menos que solicitado.
- Leia esta skill e o script envolvido (
scripts/tn.pye o arquivotn_*.pypara o efeito). Executepython scripts/tn.py checkse algo pode estar faltando. - Corrija e execute novamente, escrevendo um novo arquivo de saída. Nunca toque ou sobrescreva os clipes do usuário, mesmo enquanto corrige.
- Se a causa estava nesta própria skill, diga e sugira relatar para que seja corrigido para todos: https://github.com/thegentleminh/thegentleminh-skills/issues
Falhas comuns
No module named 'torch': PyTorch não está instalado no Python que executou o comando; use otach-nguoi-env(veja a seção de instalação).