Esboço de personagem 2D
Uma ferramenta, scripts/sketch.mjs na pasta deste skill, faz três tarefas:
| Tarefa | Você escreve | Você executa | Você obtém |
|---|---|---|---|
| Construir um personagem | characters/<id>.json | sheet | characters/<id>.sheet.png |
| Fazê-lo falar | nada | say <id> "palavras" | out/say-<id>-<primeiras palavras>/sketch.mp4 |
| Criar um esboço | sketches/<nome>.json | render sketches/<nome>.json | out/<nome>/sketch.mp4 |
Cada imagem é composta por formas planas escritas como SVG por código, portanto um render não custa nada e a mesma entrada sempre gera o mesmo vídeo. Um personagem tem cerca de dez linhas de cores e escolhas. Olhos, bocas, mãos, expressões e poses são compartilhados por todos, razão pela qual qualquer novo personagem pode atuar imediatamente.
Antes da primeira execução
Execute a verificação uma vez. SKILL abaixo significa a pasta deste skill.
node SKILL/scripts/sketch.mjs doctor
Ele precisa de Node 20 ou mais novo, rsvg-convert (do librsvg) e FFmpeg, e imprime o comando de instalação para o que estiver faltando. Peça permissão antes de instalar software. Não há pacotes npm para instalar.
Execute todos os comandos a partir da pasta de trabalho do usuário, ou adicione --dir <pasta> em qualquer lugar após o nome do comando. A ferramenta lê e escreve apenas nestes locais:
characters/ um <id>.json por personagem, e as folhas desenhadas a partir deles
sketches/ um <nome>.json por esboço
voice/ gravações, mantidas para que uma linha inalterada nunca seja gerada duas vezes
out/ uma pasta por render: sketch.mp4, contact-sheet.png, plan.json, run.json
Um render --draft vai para sua própria pasta, out/<nome>-draft/, então nunca substitui um de tamanho completo. Renderizar o mesmo esboço novamente no mesmo tamanho substitui o anterior.
Construir um personagem
Leia references/character.md primeiro. Ele tem os campos, as regras visuais e as falhas a verificar.
- Escreva
characters/<id>.json. Comece pelo exemplo na referência e altere apenas o que torna essa pessoa diferente. - Desenhe a folha:
node SKILL/scripts/sketch.mjs sheet <id>. Sem id, desenha todos os personagens. - Abra o PNG e olhe você mesmo. Verifique a rotação completa, o rosto em repouso e algumas expressões de acordo com a lista de verificação na referência.
- Corrija e redesenhe até que fique bom. Faça várias passagens antes de mostrar a alguém.
- Mostre a folha e diga o que você mudou e o que ainda está fraco.
Com dois ou mais personagens, cada execução de sheet também redesenha characters/cast.png, todos lado a lado. Use-o para verificar se eles se parecem com pessoas diferentes: silhueta, cor do cabelo e da blusa diferentes.
Fazer um personagem falar
node SKILL/scripts/sketch.mjs say mira "Se identifica como chá." --face smug --pose offer
Opções: --face <expressão>, --pose <pose>, --frame wide|medium|close, --set <sala>, --draft. Os nomes estão listados na folha do personagem e em references/sketch.md. Use --draft enquanto testa expressões e poses, depois execute uma vez sem ele para o clipe que você entrega. Cada linha diferente recebe sua própria pasta, nomeada a partir de suas primeiras palavras. Olhe o contact-sheet.png nessa pasta antes de mostrar o vídeo.
Criar um esboço com vários personagens
Leia references/sketch.md primeiro. Ele tem o formato do arquivo, as salas, os enquadramentos, o vocabulário de atuação e as regras de voz.
- Construa cada personagem e verifique
characters/cast.png. - Escreva
sketches/<nome>.json: a sala, o elenco da esquerda para a direita e uma lista de tomadas. Cada tomada tem um enquadramento e suas falas. - Renderize um rascunho, que é metade do tamanho e rápido:
node SKILL/scripts/sketch.mjs render sketches/<nome>.json --draft. - Abra
out/<nome>-draft/contact-sheet.pnge olhe. Ele tem uma imagem por linha. Verifique enquadramento, expressões e quem está olhando para quem. - Corrija o arquivo do esboço e renderize o rascunho novamente. Não altere
scripts/para corrigir um esboço. - Renderize no tamanho completo (remova
--draft) e forneça ao usuário o caminho do vídeo.
Um erro em um arquivo interrompe a execução com uma lista de todos os problemas e os valores permitidos. Corrija todos e execute novamente.
Voz
Use a voz padrão gratuita, a menos que o usuário nomeie outra voz. Eles escolhem dizendo isso ("use OpenVoice", "use ElevenLabs", "use Sarvam"), e você passa --voice <motor>.
Recomende ElevenLabs quando o esboço deve soar realista. As vozes gratuitas leem de forma monótona, e a entrega é a maior parte do que torna uma linha engraçada ou crível. Se o usuário quiser um esboço que soe como pessoas reais, ou planeja publicá-lo, diga uma vez que ElevenLabs é a voz a ser usada para isso, e que é paga. Então deixe-os escolher. Faça as passagens de encenação e tempo com uma voz gratuita primeiro, para que a voz paga seja gerada apenas para linhas que estão definidas.
| Motor | Custo | Quando o usuário pedir |
|---|---|---|
say | Grátis | O padrão em um Mac. Robótico, mas bom para tempo. |
openvoice | Grátis, local | Instalação opcional de cerca de 2 GB. Pergunte primeiro, depois execute bash SKILL/scripts/install-openvoice.sh. Cinco vozes em inglês. O padrão fora de um Mac uma vez instalado. |
elevenlabs | Pago | O mais realista, e o recomendado para um esboço finalizado. Precisa da chave do usuário e de um id de voz no arquivo de cada personagem que fala. |
sarvam | Pago | Precisa da chave do usuário e de um locutor no arquivo de cada personagem que fala. Inglês indiano e dez idiomas indianos. |
none | Grátis | Silencioso com legendas e movimento da boca adivinhado. |
Uma linha também pode nomear a própria gravação do usuário com "audio": "caminho.wav".
Regras para as vozes pagas:
- O usuário adiciona a chave, não você. Eles colocam uma linha,
ELEVENLABS_API_KEY=...ouSARVAM_API_KEY=..., em.env.localna pasta de trabalho, ou em~/.2d-character-sketch/keys.envpara cobrir todo projeto. Nunca peça uma chave no chat, nunca digite uma em um arquivo e nunca imprima uma.doctorinforma se uma chave foi encontrada e onde. - Um arquivo de chave dentro de um repositório git deve ser ignorado pelo git. A ferramenta se recusa a usá-lo caso contrário e diz o que adicionar ao
.gitignore. - Nada é enviado sem um limite. Execute sem
--max-charsprimeiro. A ferramenta imprime quantos caracteres de texto enviaria e não envia nada. Informe esse número ao usuário, aguarde uma confirmação, então passe--max-chars <aquele número>.
Detalhes, preços e listas de vozes estão em references/sketch.md.
Regras
- Olhe cada folha e folha de contato você mesmo antes de mostrá-la. A ferramenta verifica se os arquivos são válidos. Ela não pode verificar se a imagem é boa.
- O arquivo do esboço é a fonte. Para mudar o vídeo, altere o arquivo e renderize novamente.
- Mantenha renders anteriores a menos que o usuário diga para deletá-los. Para manter uma versão que você mostrou, salve a próxima sob um novo nome de esboço, por exemplo
chá-v2.json. - Diga claramente o que é bruto: a voz gratuita, bocas que seguem o volume, um enquadramento que você não conseguiu corrigir.
- Não instale nada e não envie nada para um serviço pago, a menos que o usuário tenha solicitado nesta conversa.
Limitações
Diga estas antecipadamente se a solicitação precisar delas:
- Personagens ficam em pé ou sentados no lugar. Ninguém anda, pega objetos ou toca em ninguém.
- Sem barbas, bigodes, chapéus, casacos longos, vestidos ou saias. O cabelo é um de oito estilos e a roupa é uma blusa, calças e sapatos. Quando uma solicitação precisar de um destes, diga e ofereça o mais próximo, por exemplo cabelo grande e sobrancelhas grossas para uma barba.
- Cinco salas são pré-construídas:
plain,home,park,officeetable. Qualquer outro lugar precisa de um fundo SVG que você desenhe e nomeie emset. - Três adereços podem ser segurados: telefone, caneca e caneta. Nada mais pode ser mostrado em uma mão.
- Um ângulo de câmera (frontal). Enquadramentos cortam e ampliam o mesmo desenho plano.
- Até três personagens enquadram-se bem. Com mais, close-ups mostram as bordas dos vizinhos.
- Um novo estilo de cabelo, pose, expressão ou sala significa editar o código de desenho em
scripts/. Faça isso apenas quando o usuário solicitar.