O que clip-anything faz?
Propósito
Transforma uma gravação longa (um arquivo, vários arquivos ou uma pasta que representa uma sessão) nos N melhores clipes verticais de destaque usando a CLI gratuita e local clip-anything. A skill controla a ferramenta, mostra o que será cortado antes de cortar e lê o relatório para que o usuário saiba por que cada momento foi selecionado. Ela nunca faz upload, publica ou envia imagens para lugar nenhum; a própria CLI não faz chamadas de rede, exceto por um download opcional e único do modelo Whisper, que pede permissão antes.
Pré-requisitos
uvx(do uv) oupipxno PATH. A CLI é um pacote Python;uvx clip-anythinga executa sem instalação.ffmpegeffprobeno PATH. A CLI sai com código 3 e uma linha de instalação quando estão ausentes.- Uma gravação que o usuário possa indicar:
.mp4 .mkv .mov .m4v .ts .m2ts .mts .webm .avi .flv, ou uma pasta com esses arquivos.
Instruções
Trabalhe a partir do diretório atual do usuário. Use os caminhos exatos fornecidos pelo usuário; coloque-os entre aspas. Não mova, renomeie ou exclua as gravações. Não instale nada além do que as etapas abaixo imprimirem como sugestão para o usuário executar.
Fluxo de Trabalho
(Use as etapas em ordem; uma etapa que não puder ser concluída é informada, não pulada.)
- Verifique as ferramentas. Execute
command -v uvx || command -v pipxecommand -v ffmpeg && command -v ffprobe. Seuvxepipxestiverem ambos ausentes, imprima e pare:curl -LsSf https://astral.sh/uv/install.sh | sh(macOS/Linux) ouwinget install astral-sh.uv(Windows). Se o ffmpeg estiver ausente, imprima e pare:brew install ffmpeg/sudo apt install ffmpeg/winget install Gyan.FFmpeg. Usepipx run clip-anythingonde este arquivo disseruvx clip-anythingse apenas o pipx existir. - Resolva a entrada. Se o usuário nomeou um arquivo ou pasta, use-o. Se ele disse "minha gravação" sem caminho, procure por arquivos de vídeo no diretório atual (pesquise pelas extensões acima, do mais recente para o mais antigo). Pergunte apenas quando houver várias entradas plausíveis ou nenhuma; caso contrário, prossiga e diga qual caminho foi usado. Uma pasta é passada como está: a CLI a trata como uma sessão.
- Simulação primeiro, sempre. Execute
uvx clip-anything "<entrada>" --dry-run --json 2>/dev/null(adicione--count Nse o usuário nomeou um número). Analise o JSON da saída padrão. Mostre uma tabela curta: rank,startatéendem mm:ss,duration_s,score,titlese presente, e o componente principal decomponents. Seclipsestiver vazio, diga isso claramente e leiawarnings(um avisobelow_floorsignifica que nada passou da barra de ação) antes de sugerir--min-score 0ou um valor mais baixo. - Renderize. A menos que o usuário tenha pedido apenas uma prévia, execute
uvx clip-anything "<entrada>"com as mesmas opções, sem--dry-rune--json, para que a interface de progresso apareça. Adicione--yesapenas se o usuário disse que legendas são desejadas e concordou com o download único do modelo; caso contrário, deixe a CLI perguntar. Informe a pasta de saída (./clipspor padrão, ou--out). - Explique as seleções. Leia
clips/report.json(leia o arquivo, ou usepython3 -I -csobre ele). Para cada clipeok, dê uma linha: o intervalo de tempo, a pontuação e quais sinais o carregaram (components: loudness acima da linha de base, onsets de áudio, movimento, concordância áudio/movimento, penalidade de tela estática, bônus de fala quando presente). Mencionelayoutquando forfacecamecaptionsquando verdadeiro. Liste cada entrada emwarningsem termos simples; a ferramenta se degrada claramente e o usuário deve ouvir isso. - Ofereça os ajustes, uma linha cada, apenas aqueles que se encaixam no que o usuário viu:
--count Nmais ou menos clipes (é um máximo; sessões silenciosas retornam menos)--min-score 0.3abaixar a barra de ação;--min-score 0classificar o arquivo contra si mesmo--min 20 --max 60limites de duração do clipe em segundos--crop centercorte central estático em vez de seguir a ação--no-captionsnunca queimar legendas;--facecam offsem pilha de webcam--visionre-ranking local com Ollama e títulos (experimental; só se comunica com127.0.0.1:11434)--forcesobrescrever clipes da última execução;--no-cacheignorar análise em cache Uma nova execução com ajustes diferentes leva segundos porque a análise fica em cache ao lado do vídeo.
- Divulgação. Quando legendas ou títulos estiverem presentes, diga uma vez: as legendas são transcrição automática (faster-whisper, local) e os títulos vêm de um modelo de visão local; ambos podem estar errados e devem ser verificados antes de publicar.
Exemplos
- "Crie 5 curtos da stream de ontem à noite, está em ~/Videos/obs/" → etapa 1, passe a pasta,
--count 5simulação, mostre a tabela, renderize, explique. - "Por que ele selecionou uma tela de carregamento?" → abra
report.json, mostre oscomponentsdaquele clipe (um valor alto decardsignifica que a penalidade de tela estática foi acionada, mas onsets altos ainda venceram), sugira--min-score 0.6ou umw_cardmais alto em um TOML--config. - "Só me mostre o que cortaria, não renderize" → etapas 1 a 3 apenas.
Limitações
- Momentos baseados em transcrição (uma piada sem ação) pontuam baixo por design; a ferramenta classifica ação, fala é um bônus.
- A barra de ação foi calibrada em dois jogos; um jogo não visto pode retornar menos clipes do que o solicitado. Diga isso em vez de forçar clipes com
--min-score 0sem ser solicitado. - Fontes 1080p60 analisam aproximadamente 100 s por hora; um arquivo de várias horas é uma espera, não uma trava.
- A skill não edita clipes, escolhe miniaturas ou publica em lugar nenhum. Publicar é etapa do usuário.
Solução de Problemas
- Código de saída 2: entrada ruim (caminho ausente, arquivo não suportado, pasta sem vídeos). Mostre a mensagem da CLI.
- Código de saída 3: ffmpeg ou ffprobe ausente. Imprima a linha de instalação para o sistema operacional do usuário da etapa 1.
- Código de saída 1: nada renderizado. Leia
warningsno JSON da simulação; geralmentebelow_floor. - Legendas escritas como arquivo
.asslateral em vez de queimadas: a construção do ffmpeg não tem libass (fórmula padrão do Homebrew). Uma construçãoffmpeg-fullno PATH resolve; todo o resto continua funcionando. --visionnão teve efeito: Ollama não está rodando ou não tem modelo de visão; a execução continua apenas com ação e deixa um aviso.