sapiens_character
Personagens (character sheets) do Sapiens (a tabela influencers): personagem reutilizável com imagens (pra character-lock em geração) + alma (systemPrompt), tudo amarrado à conta do dono do token (sem admin). Sub-actions: list_public (catálogo global de personagens públicos do Explorar; cada um traz mainImageUrl/imageUrls usáveis direto como referenceImageUrls em sapiens_image; sem custo, sem login), get (detalhe de 1 por characterId, público+ativo qualquer um vê, draft/privado só o dono; systemPrompt só volta pro dono), list_mine (os personagens do próprio user, inclui drafts/privados), create (cria rascunho na conta: name + gender + opcional form/title/systemPrompt), add_image (adiciona imagem ao próprio personagem via imageUrl público OU sourceImageId da galeria; 1ª vira principal), set_card (edita alma/título/lema em inglês/nome/nome por extenso/forma do próprio), set_presence (escreve onde o personagem existe FORA da casa: redes sociais por handle, Fanvue, site e o email dele, este último privado), set_passport (escreve o PASSAPORTE dele: como ACERTAR este ser, que é outra coisa de quem ele é. Guarda o descriptor de geração em inglês pra colar verbatim, o negative travado que fica sempre ligado, os locks (o que TRAVA nele, um por entrada, que é a lista que vira as perguntas da conferência), as refs por PAPEL (proporção, rosto, tatuagem: ref sem papel ninguém sabe usar), as recipes medidas por tipo de peça (com o prompt VERBATIM, porque o valor está na palavra exata que funcionou) e o discarded, o que já foi recusado. Esse último não é enfeite: o motor traz de volta o que ninguém proibiu, então ideia descartada sem negativo escrito volta sozinha na leva seguinte. É MERGE por campo, então mandar só o negative não apaga o descritor, e campo vazio apaga. Só o DONO lê: receita de produção não sai em personagem público. Em action=get ele volta em duas formas, passport (campo a campo, o que se reedita) e passportPrompt (o bloco já montado pra colar). Preencha sempre que uma rodada medir algo que a próxima não deve redescobrir: é o que faz a receita viajar pra fora do repo), activate (tira do rascunho e libera o personagem pra USAR nas gerações do dono; exige ≥1 imagem. NÃO torna público: quem publica é set_visibility, e ativar é gesto reversível e privado), set_visibility (isPublic true=Explorar+slug / false=privado), set_hidden (hidden true tira o personagem da TELA do dono: some da lista de personagens e as peças geradas com ele saem da galeria de fotos, vídeos e rascunhos do dono, voltando pelo filtro Ocultos; hidden false devolve. É o gesto de quem vai compartilhar tela. Não despublica, não apaga, não sai dos seletores de geração, e personagem oculto não publica até ser mostrado. Grátis. O list_mine traz hidden em cada personagem). GESTÃO de imagem (por url, pegue as urls atuais em action=get campo imageUrls): remove_image (tira uma), set_main_image (define a principal), reorder_images (nova ordem via orderedUrls, posição 0=principal), e delete (apaga o personagem, permanente). FORMA (form, o que tipo de CORPO ele tem: human default, humanoid, animal (bicho real), creature (ser inventado), object, abstract): não é enfeite de cadastro, é o que a ficha, as figurinhas e o vídeo leem pra decidir se descrevem rosto e mãos ou silhueta e postura, e é ele que impede uma criatura de voltar desenhada como pessoa. Mande no create sempre que o personagem não for gente; personagem que já existe sem ele conserta com set_card form=creature. Ausente = human, que é o que a casa desenhava antes do campo existir. NOME E NOME POR EXTENSO (name e fullName): name é como o personagem é CHAMADO e é o que toda tela desenha; fullName é o nome inteiro, pra quem tem apelido ('Crow Girl' na tela, 'Kaia Crowe' por extenso). Um não substitui o outro, e o extenso não mexe no slug da página nem no cartão de nome do vídeo: batizar personagem que já existe não muda endereço publicado nem assinatura de peça que já saiu. Vem em action=get e list_mine no campo fullName (null = ainda sem nome por extenso). TRAÇO (style, em que TÉCNICA ele é feito: auto default, realista, anime, manhwa, 3d, custom): irmão da forma, e a divisão é limpa, a forma diz que CORPO é esse e o traço diz como ele é DESENHADO. As mesmas três peças leem daqui. No 'auto' a peça não afirma técnica nenhuma e as imagens de referência mandam; 'realista' é fotografia, 'anime' é cel shading com contorno de tinta, 'manhwa' é pintura de webtoon, '3d' é render com material e oclusão, 'custom' usa a linha escrita em styleNote (até 140 caracteres, ex: aquarela sobre papel texturizado). Mande sempre que o personagem tiver técnica definida: até ago/2026 a ficha cravava vocabulário de desenho e devolvia personagem fotográfico virado em ilustração. Conserto sem custo em quem já existe: set_card style=realista. PRESENÇA (set_presence, de graça): o ENDEREÇO do personagem, o que faltava pra ele existir fora da ficha. socials é {rede: handle} nas redes instagram, tiktok, youtube, x, threads, bluesky, twitch, spotify, fanvue, patreon, onlyfans, telegram; websiteUrl é o site dele e email é o email do personagem, o que cadastra e recupera as contas dele nas redes. As redes e o site são PÚBLICOS; o email é PRIVADO e fica só com o dono, mesmo com o personagem publicado, porque email é chave de conta e isca de spam, não canal de contato. Em action=get e list_public de personagem de OUTRA pessoa, o campo simplesmente não vem. É MERGE: mandar {fanvue:'helen'} não apaga o instagram, e pra apagar uma rede se manda ela vazia. O que volta em action=get são as duas formas, presence (o handle cru, que é o que se reedita) e presenceLinks (o link já montado, pra mostrar sem remontar URL na mão). Vale a pena preencher quando o personagem TEM conta de verdade: é o que separa uma ficha de um ser com endereço, e a página pública dele desenha as redes e o site (nunca o email). FICHA (generate_sheet, COBRA 650 Sinapses, o preço do GPT Image 2.5 Sunburst, que desenha; se ele recusar, a ficha refaz no Nano Banana 2.1 e cobra o preço dele, e o retorno diz em model, modelLabel e fellBack quem desenhou): desenha a página-pôster do personagem no traço das imagens que ele já tem (exige pelo menos uma), em duas orientações (arg orientation): 'portrait' (default) é a página de processo, pose, expressões, trocas de roupa e adereços soltos na folha; 'landscape' é a prancha larga, com a volta completa à esquerda, a figura grande no meio, poses à direita, estudos de silhueta, expressão e detalhe embaixo e um painel CHARACTER ID na ponta. A personalidade sai da alma (systemPrompt) e é ela que escolhe roupa e objeto, então personagem com alma escrita rende ficha melhor. Cada geração é um estilo NOVO e elas acumulam no personagem (campo sheetUrls em action=get), nenhuma apaga a anterior, e a ficha já entra na galeria dele como referência das próximas gerações. É geração síncrona: se voltar Timeout, cheque action=get antes de repetir, senão cobra duas vezes. STICKERS (generate_stickers, COBRA 550 Sinapses): desenha 5 stickers do personagem DE UMA VEZ. Uma folha só, em 2K, com as cinco figuras separadas sobre um fundo verde chroma, recortada por código em peças 512x512 transparentes abaixo de 100KB (o teto do WhatsApp). É por isso que sai o preço de UMA imagem em 2K e não de cinco: quem paga é a folha. As peças entram no pack do personagem (um por personagem, os lotes acumulam) e já ficam no picker de expressão do dono, no chat e no Fórum. Arg moods: até 5 humores do vocabulário comum por slug (kkkkk, amei, isso, hmm, chega, que, aff, bora, socorro, seinao, valeu, ainao, seila, ideia, calma, contatudo, perfeito, euavisei, naovourir, zzz, somaisum, sextou, merecido, quedia, tudobem); faltando, a casa completa com os mais usados. Arg hint: direcionamento curto do autor (roupa, adereço, clima), até 140 caracteres. Arg stickerTier: 'folha' (default) é esse lote de cinco, desenhado no Nano Banana 2.1; 'unica' (COBRA 900 Sinapses) desenha UM sticker por vez no Gemini 3 Pro, o motor mais fiel da casa, com a figura sozinha no quadro e o dobro de pixel por peça, e leva só o PRIMEIRO mood da lista. Pra encher o pack, folha; pra traço difícil ou a reação que vira a cara do personagem, a unica. Ao oferecer a escolha, diga o NOME DO MOTOR e o que ele troca: adjetivo vago de acabamento não informa nada a quem vai pagar. Os dois caem no MESMO pack e acumulam. Sem legenda queimada na imagem, de propósito: modelo erra acento em português, então o rótulo fica na row e serve de busca no picker. Exige pelo menos uma imagem no personagem (é dela que sai a cara) e é geração síncrona: se voltar Timeout, cheque sapiens_gallery antes de repetir. Quando a resposta vem com ok=false, a folha foi gerada e paga mas o corte falhou; ela está na galeria e o recorte de novo é de graça, pela web. Publicar o pack na vitrine e o carimbo da casa (que é o que põe no picker de todo mundo) são gestos da web, não desta tool. PLACAS (generate_plates, COBRA 550 Sinapses): seis ângulos do mesmo rosto numa geração só, no Nano Banana 2.1 em 2K, recortados por código em seis referências com PAPEL: perfil, camera-alta, camera-baixa, frontal, cabeca-baixa e outro-lado, cada um com uma expressão diferente. Não é vitrine (isso é a ficha): é a referência feita pra máquina. Referência trava o ângulo da câmera, então quando a cena pede perfil, passe a placa de perfil em referenceImageUrls. As placas ficam FORA de imageUrls de propósito, porque placa de perfil como referência genérica puxa toda peça pro perfil; elas voltam em action=get no campo plates ([{role, url}]). As placas ACUMULAM: cada geração soma seis, e a que não serve sai com remove_image. Em plates o lote mais novo vem primeiro, cada lote na ordem da grade, então a primeira placa de um papel é a mais nova. Sai das fotos do personagem (exige pelo menos uma) e, quando ele tem passaporte, o descritor dele entra no pedido. Só personagem com rosto de gente (form human ou humanoid): pra bicho, criatura, objeto ou forma abstrata o servidor recusa antes de cobrar. O perfil puro e a câmera alta às vezes voltam amolecidos pro frontal; quando esses dois ângulos importarem, confira as placas antes de usar. Geração síncrona: se voltar Timeout, cheque action=get antes de repetir. Resposta com ok=false quer dizer grade gerada e paga com o corte falho; o recorte de novo é de graça, pela web. CHARACTER VIDEO (a ficha que anda): o personagem atravessa 6 mundos em 12s, trocando de roupa em cada um, com som gerado junto, e o último plano fecha a peça com ele parando e encarando a câmera. A peça volta FECHADA pelas duas portas (tela e agente), sem ninguém pedir: o personagem se apresenta no cartão de nome por cima do fim do último plano, com o LEMA em inglês embaixo (o campo titleEn, escrito uma vez em set_card), e só depois a casa assina. Quem não tem lema recebe o subtítulo que o roteiro inventou naquele take, e ele muda no take seguinte. O fecho é asset, não geração: zero Sinapse a mais, e é fail-open, então a resposta traz closed e nameCard dizendo o que entrou de verdade em vez de prometer um cartão que não está no arquivo. Pra colocar esse cartão num vídeo que JÁ existe, o caminho é a ficha do take na web (gaveta do fecho, 'Apresentação do personagem'), também sem custo. Exige FICHA gerada (é dela que saem a cara e o guarda-roupa), não só imagem. Duas actions, nesta ordem: plan_video (COBRA 50 Sinapses) devolve os 6 planos que a alma do personagem escolheu, com ambiente, ato, enquadramento e roupa. Cada plano vem nas duas línguas: em inglês (setting/act/wardrobe, que é o que vai pro motor) e em português (settingPt/actPt/wardrobePt). MOSTRE a versão em português pro autor, o público da casa é brasileiro e roteiro que ele lê de través não é roteiro aprovado; peça de novo quantas vezes ele quiser, porque trocar sai por 50 e o take errado sai por milhares. replan_shot (COBRA 15 Sinapses) reescreve UM plano e não toca nos outros cinco: os seis são cenas independentes, então quando o autor gosta de quatro e implica com um, troque só aquele em vez de sortear tudo de novo (mande os 6 planos em shots, o número em shotIndex, e o que ele quer diferente em shotHint; volta só o plano trocado, e é você que remonta o roteiro). Depois generate_video (COBRA) renderiza, com os planos aprovados no arg shots e o MOTOR no arg videoTier: 'draft' (5.400 Sinapses) é o Seedance 2.0 Mini, metade do preço, que tropeça em mão, pouca luz e câmera rápida, e 'final' (8.640 Sinapses) é o Seedance 2.0 Fast, que segura o que o Mini erra. A peça é a MESMA nos dois (mesmos 6 planos, 12s, 720p, com som), então ofereça pelo nome do motor e pelo que ele troca, nunca por adjetivo vago de acabamento. Vertical ou horizontal pelo arg orientation. Chamar generate_video SEM shots funciona, mas escreve um roteiro novo às cegas e cobra igual: não faça isso sem o autor ter visto o que vai receber. É geração demorada: se voltar Timeout, cheque sapiens_gallery antes de repetir. Resposta com pending: true (sem url) quer dizer ACEITO E COBRADO: o servidor continua renderizando sozinho (até 25 min) e a peça chega na ficha já fechada; NÃO repita a chamada, isso cobraria de novo, confira depois em sapiens_gallery. Fluxo de criação: create → add_image (1+) → set_card (opcional) → activate. PARE AÍ. O personagem nasce e continua PRIVADO, e é assim que ele serve pro dono: dá pra gerar, referenciar e iterar sem ninguém ver. set_visibility isPublic=true é o gesto de PUBLICAR no Explorar, com slug público, e nÃO é passo de fluxo: só chame quando o dono pedir pra publicar aquele personagem, com essas palavras. Na dúvida, não publique e pergunte. Pra usar um personagem público como referência numa geração, pegue mainImageUrl em list_public/get e passe em sapiens_image referenceImageUrls.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| form | No | Pra create/set_card: que tipo de CORPO o personagem tem. 'human' (default) é uma pessoa; 'humanoid' é forma de gente com traço que não é de gente (elfo, androide, ciborgue, demônio); 'animal' é bicho REAL, com a anatomia da espécie (cachorro, corvo, capivara), que não anda em duas pernas nem faz cara de gente; 'creature' é ser INVENTADO, mágico ou monstruoso, de anatomia livre (dragão, quimera, espírito sem rosto); 'object' é coisa ou máquina que ganha vida; 'abstract' é presença sem anatomia fixa (névoa, chama, luz). Manda sempre que o personagem não for gente: a ficha, as figurinhas e o vídeo leem daqui pra decidir se descrevem rosto e mãos ou silhueta e postura, e sem isso o modelo desenha uma pessoa em cima da criatura. Ausente no create = human. | |
| hint | No | Pra generate_stickers: direcionamento curto do autor (roupa, adereço, clima). Tempera a folha, não substitui a receita. Máximo 140 caracteres. | |
| name | No | Pra create (obrigatório) ou set_card (renomear): nome do personagem. É o APELIDO, o nome pelo qual ele é conhecido, e é o que TODA tela desenha. | |
| refs | No | Pra set_passport: as referencias por PAPEL, [{role, url, imageId}]. O papel decide qual usar pra que (proporcao, rosto, tatuagem, anatomia); ref sem papel ninguem sabe usar. A ref manda mais que adjetivo. | |
| No | Pra set_presence: o email do personagem, o que cadastra e recupera as contas dele nas redes. É PRIVADO: aparece na ficha, pro dono, e NÃO vai pra página pública nem quando o personagem é publicado (email exposto é chave de conta e isca de spam). String vazia apaga. | ||
| limit | No | Pra list_public: quantos retornar (default 100, max 200). | |
| locks | No | Pra set_passport: o que TRAVA nele, um item por entrada (tatuagem nos dois antebracos, choker de argola). Esta lista vira as perguntas da conferencia, uma por vez: marcador que nao e perguntado e marcador que se perde sem ninguem ver. | |
| moods | No | Pra generate_stickers: até 5 humores do vocabulário comum, por slug. Faltando ou inválido, a casa completa com os mais usados. No tier 'unica' só o PRIMEIRO da lista é desenhado. Slugs: kkkkk, amei, isso, hmm, chega, que, aff, bora, socorro, seinao, valeu, ainao, seila, ideia, calma, contatudo, perfeito, euavisei, naovourir, zzz, somaisum, sextou, merecido, quedia, tudobem. | |
| shots | No | Pra generate_video e replan_shot: os 6 planos APROVADOS pelo autor (o que voltou de plan_video, com as edições dele). Precisa ser exatamente 6, na ordem. Devolva os planos INTEIROS, com os campos pt junto, como vieram. Enquadramento e movimento de câmera NÃO entram aqui: são régua da casa e o servidor os aplica. Sem este campo o generate_video escreve um roteiro novo e cobra igual. | |
| style | No | Pra create/set_card: em que TÉCNICA o personagem é feito. 'auto' (default) não afirma técnica nenhuma e deixa as imagens de referência mandarem; 'realista' é fotografia (óptica, luz e pele reais); 'anime' é cel shading com contorno de tinta; 'manhwa' é pintura digital suave de webtoon; 'concept' é mídia tradicional suja, grafite e aguada sobre papel, o traço de criatura e bestiário; '3d' é render com material e oclusão; 'custom' usa a linha escrita em styleNote. Irmão de `form`, e a divisão é limpa: a forma diz que CORPO é esse, o traço diz como ele é DESENHADO. Mande sempre que o personagem tiver técnica definida: até ago/2026 a ficha cravava vocabulário de desenho e devolvia personagem fotográfico virado em ilustração. Personagem que já existe conserta com set_card style=realista, sem custo. | |
| title | No | Pra create/set_card: subtítulo curto (ex: 'A guia do Sapiens'). | |
| action | Yes | ||
| gender | No | Pra create: 'masculino' | 'feminino' | 'nao-binario'. Default 'nao-binario'. | |
| hidden | No | Pra set_hidden: true = oculta o personagem da tela do dono (some da lista de personagens e as peças dele saem da galeria de fotos e vídeos do dono, voltando pelo filtro Ocultos), false = mostra de novo. Não mexe em isPublic. | |
| isMain | No | Pra add_image: marca esta como a imagem principal (avatar). 1ª imagem já vira main sozinha. | |
| hashtag | No | Pra set_presence: a HASHTAG do personagem, sem #, numa palavra ('AriaMaiven'). É o fio que junta as peças dele na rede: o Distribution põe essa tag sozinha nos posts do personagem. Sem ela a tag sai do nome, então preencha quando o nome é comum demais pra ser dele (#Aria é de todo mundo). Espaço e pontuação o servidor tira. String vazia apaga. | |
| recipes | No | Pra set_passport: a receita medida por tipo de peca, [{kind, engine, prompt, note}]. O prompt vai VERBATIM, porque o valor esta na palavra exata que funcionou; em note, a medicao que provou. | |
| socials | No | Pra set_presence: as contas dele por rede, {rede: handle}. Redes aceitas: instagram, tiktok, youtube, x, threads, bluesky, twitch, spotify, fanvue, patreon, onlyfans, telegram. Mande só o HANDLE (o servidor aceita o link inteiro colado e corta sozinho, mas o handle é o contrato). É MERGE: mandar {fanvue:'helen'} não apaga o instagram que já estava lá, e pra apagar uma rede se manda ela vazia ({instagram:''}). Rede fora da lista é ignorada em silêncio. | |
| titleEn | No | Pra create/set_card: o MESMO subtítulo em inglês, o lema do personagem. Não é enfeite bilíngue: é o que o cartão de nome do Character Video desenha embaixo do nome, e cartão é assinatura, então precisa sair igual em toda peça. Sem ele, o subtítulo do vídeo é escrito na hora pelo roteiro e muda a cada take. Teto de 48 caracteres, que é o que cabe numa linha do cartão. | |
| fullName | No | Pra create/set_card: o nome do personagem POR EXTENSO, quando o `name` é um apelido ('Crow Girl' é como ela é chamada, 'Kaia Crowe' é quem ela é). Os dois convivem: este NÃO substitui o name, não muda o slug da página nem o cartão de nome do vídeo, e aparece como a linha logo abaixo do nome na página do personagem. String vazia apaga. Até 80 caracteres. Ausente = personagem que se chama de um jeito só. | |
| imageUrl | No | Pra add_image: URL pública da imagem (Bunny CDN / Convex storage). Use a `url` que sapiens_image/sapiens_gallery devolvem. Pra remove_image/set_main_image: a url da imagem JÁ no personagem (pegue via action=get, campo imageUrls, ou sheetUrls pra apagar uma ficha, ou plates[].url pra apagar uma placa). | |
| isPublic | No | Pra set_visibility: true = público no Explorar (gera slug), false = privado. | |
| negative | No | Pra set_passport: os negativos travados deste personagem, sempre ligados em toda geracao. E aqui que mora o que ja foi DESCARTADO, senao o motor traz de volta sozinho. | |
| shotHint | No | Pra replan_shot: o que o autor quer diferente naquele plano ('outro clima', 'sem água', 'de noite'). Tempera o plano novo, não substitui a régua da peça. Opcional: sem ele, o servidor só escreve outro plano. | |
| discarded | No | Pra set_passport: o que foi descartado, [{what, why}]. Escreva junto o negativo correspondente, porque o motor traz de volta o que ninguem proibiu. | |
| shotIndex | No | Pra replan_shot: qual dos 6 planos reescrever (1 a 6). Os outros cinco ficam exatamente como estão. | |
| styleNote | No | Pra create/set_card, só vale com style='custom': o traço em UMA linha (ex: 'aquarela sobre papel texturizado, cor lavada'). Até 140 caracteres; sem ela o custom cai no automático. | |
| videoTier | No | Pra generate_video: qual MOTOR desenha. 'draft' (default) é o Seedance 2.0 Mini, metade do preço, bom pra ver se a direção agradou: tropeça em mão, pouca luz e câmera rápida. 'final' é o Seedance 2.0 Fast, que segura o que o Mini erra. Os dois entregam os mesmos 6 planos em 12s a 720p, com som: o que muda entre eles é só o motor, não o tamanho da peça. Ofereça a escolha pelo nome do motor e pelo que ele troca, nunca por adjetivo vago de acabamento. | |
| descriptor | No | Pra set_passport: o descritor de geracao dele em INGLES, pra colar verbatim no prompt. E o texto que faz o motor desenhar ESTE ser e nao um parecido. Manda vazio pra apagar. | |
| websiteUrl | No | Pra set_presence: o site próprio do personagem. Aceita sem protocolo ('helenai.wtf'), que o servidor completa com https. String vazia apaga. | |
| characterId | No | ID do personagem (influencers:_id). Obrigatório em get/add_image/set_card/activate/set_visibility/generate_sheet. Descubra via list_public ou list_mine. | |
| orderedUrls | No | Pra reorder_images: as urls das imagens do personagem na nova ordem (posição 0 = principal). url ausente vai pro fim, nenhuma se perde. Pegue as urls atuais via action=get. | |
| orientation | No | Pra generate_sheet: 'portrait' (default) é a página de processo vertical, composição livre, sem texto. 'landscape' é a prancha larga: volta completa à esquerda, figura grande no meio, poses à direita, estudos de silhueta/expressão/detalhe embaixo e painel CHARACTER ID na ponta. As duas acumulam no personagem, uma não substitui a outra. | |
| stickerTier | No | Pra generate_stickers: qual dos dois caminhos. 'folha' (default) é o lote, cinco stickers de UMA folha 2K no motor rápido, o preço de uma imagem por cinco peças. 'unica' desenha UM sticker por vez no motor mais fiel da casa (Gemini 3 Pro), com a figura sozinha no quadro: custa mais por peça e é o que salva traço difícil ou reação que vai virar a cara do personagem. Na dúvida, ou pra encher o pack, use 'folha'. | |
| systemPrompt | No | Pra create/set_card: a 'alma' do personagem (personalidade, jeito de falar, contexto). Usado no chat e como guia de geração. | |
| sourceImageId | No | Pra add_image: alternativa ao imageUrl, o ID de imagem da SUA galeria (generatedImages:_id, via sapiens_gallery action=list). O backend resolve a url e confere que é sua. |