sapiens-mcp 1.84.0 → 1.86.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/registry.js +2 -2
- package/dist/skills.js +9 -3
- package/dist/tools/carrossel.js +6 -1
- package/dist/tools/gallery.js +41 -2
- package/dist/tools/video.js +15 -11
- package/package.json +1 -1
package/dist/registry.js
CHANGED
|
@@ -89,7 +89,7 @@ export const TOOLS = {
|
|
|
89
89
|
handler: repertorio,
|
|
90
90
|
},
|
|
91
91
|
sapiens_gallery: {
|
|
92
|
-
description: "Browse, publicação e upload das imagens do user. Sub-actions: list (últimas N peças, com prompt/model/url + isPublic + acervoUrl; kind=image por default, kind=video traz os takes com posterUrl, a capa, e kind=all mistura. Depois de ingerir ou gerar vídeo, é o list kind=video que dá a capa pra mostrar miniatura + player em vez de link solto), get (1 imagem com metadados, opcionalmente base64), publish (torna a PRÓPRIA imagem pública: entra na galeria pública + feed Pinterest, e ganha página indexável /imagem/<id> se o modelo não for degen devolve publicPageUrl; publicado NÃO despublica, não existe unpublish), upload (traz pra galeria uma peça gerada FORA da casa, por sourceUrl https, filePath local ou base64; ADMIN por ora), ingest (A PONTE, qualquer conta logada: peça que a PESSOA dirigiu com a ficha do personagem daqui e um motor de fora renderizou, no crédito dela (Kie, fal, Magnific, Sogni, a própria placa): entra NATIVA na timeline e nasce PRIVADA (isPublic false), publicável DEPOIS por ela como qualquer geração da casa, nunca sozinha, com custo 0 em Sinapses e o custo real guardado em externalCost; carrega o prompt VERBATIM, as referências da casa (referenceImageIds), o personagem (characterId) e o motor (externalEngine 'provedor-motor'); a peça chega por filePath (local, só no MCP instalado), sourceUrl (o render, baixado pelo MCP na máquina da pessoa, nunca pelo servidor) ou base64; o carimbo +18 nasce na entrada pela CLASSE do provedor (peso aberto como Sogni, Replicate, HF, fal, WaveSpeed, Civitai e a própria placa entram carimbados, só a curadoria tira; serviço com moderação como Kie, Magnific, Freepik, Krea entra sem) ou por unfiltered=true dito pela pessoa (carimbo dela, ela tira depois); idempotente por sourceUrl ou pelo hash do arquivo, então re-ingerir corrige a ficha em vez de duplicar; tetos 12 MB imagem, 60 MB vídeo, 40 por dia. A chave do provedor NUNCA passa por aqui: quem gerou foi o harness da pessoa. Passo a passo na skill 'pontes'), refs (acopla peças da casa como REFERÊNCIA numa peça que já existe, de upload ou de ingest; ADMIN, e só na própria peça), processo (O COMO JUNTO DO QUE: anexa a uma peça as peças que mostram como ela foi dirigida, o mapa de rota desenhado sobre o still, a prancha de frames com o tempo de cada marco, o antes e depois de duas rodadas; elas viram a seção 'Como foi feito' na página pública da peça, na ordem que você mandar e com a sua legenda por peça; qualquer membro, só na própria peça, teto de 12. É IRMÃ do refs e a diferença importa: refs é o INSUMO que entrou na geração, processo é o REGISTRO de como ela foi dirigida, e uma lista não mexe na outra. Peça de processo privada não aparece pra quem está de fora nem em miniatura: pra aparecer, publique ela também), cast (QUEM ESTÁ EM CENA numa peça que já existe, quando é mais de uma criatura: characterIds em ordem, o protagonista primeiro, e a peça passa a contar na ficha de todos eles em vez de sumir da segunda; qualquer membro, na própria peça), parts (O INTEIRO E OS PEDAÇOS de um vídeo: o clipe de 30s que foi montado a partir de dois takes de 15s, a fita longa feita de partes. COM imageId devolve a ficha de parentesco daquela peça, quais são as partes dela e de qual inteiro ela é parte, com a url do arquivo completo pra baixar. SEM imageId devolve o que AINDA NÃO FOI MONTADO: varre os takes soltos da conta, agrupa os que têm cara de par (mesmo personagem, mesmo período, prompt de 'Part one/Part two' ou arquivo terminando em -a/-b) e diz o PORQUE de cada agrupamento, pra você saber o que falta juntar antes de o autor perguntar. É heurística e não monta nada sozinha: adianta a descoberta, quem decide é quem lê. characterId filtra por personagem. Sem custo), link_parts (LIGA o inteiro aos pedaços: imageId é o vídeo montado e partIds são os takes NA ORDEM em que aparecem nele. O juntador da casa e o ingest que traz referências de vídeo já gravam esse laço sozinhos; esta porta é pra montagem feita FORA (ffmpeg na máquina, ingest do arquivo já pronto) e pra corrigir ligação errada. Só na própria peça, teto de 16 partes, e a lista TROCA o que estava gravado antes. Sem custo). Use list/get pra reusar imagem como referência (passe o imageId em sapiens_image mode=edit ou mode=variation) ou pra mostrar pro user o que ele já tem; publish quando o user quer divulgar a imagem dele. IMPORTANTE sobre upload: a peça entra PRIVADA e continua privada: o servidor recusa publicar e recusa compartilhar na comunidade, porque ela é do usuário e a responsabilidade é dele. O caminho pra ela virar coisa pública é usar como referência numa geração daqui e publicar o resultado. O refs escreve só proveniência (de que ficha/folha a peça nasceu): não promove nada, e um upload continua sem publicar depois de ganhar referência. COMO A PEÇA FOI FEITA: list aceita skill=<slug> e devolve só o que saiu daquela skill (o mesmo slug que sapiens_image gravou em skills), com a busca varrendo as últimas 200 peças antes de cortar no limit; cada item volta com o campo skills, e null ali quer dizer que ninguém marcou, não que foi feita sem skill.",
|
|
92
|
+
description: "Browse, publicação e upload das imagens do user. Sub-actions: list (últimas N peças, com prompt/model/url + isPublic + acervoUrl; kind=image por default, kind=video traz os takes com posterUrl, a capa, e kind=all mistura. Depois de ingerir ou gerar vídeo, é o list kind=video que dá a capa pra mostrar miniatura + player em vez de link solto), get (1 imagem com metadados, opcionalmente base64), publish (torna a PRÓPRIA imagem pública: entra na galeria pública + feed Pinterest, e ganha página indexável /imagem/<id> se o modelo não for degen devolve publicPageUrl; publicado NÃO despublica, não existe unpublish), upload (traz pra galeria uma peça gerada FORA da casa, por sourceUrl https, filePath local ou base64; ADMIN por ora), ingest (A PONTE, qualquer conta logada: peça que a PESSOA dirigiu com a ficha do personagem daqui e um motor de fora renderizou, no crédito dela (Kie, fal, Magnific, Sogni, a própria placa): entra NATIVA na timeline e nasce PRIVADA (isPublic false), publicável DEPOIS por ela como qualquer geração da casa, nunca sozinha, com custo 0 em Sinapses e o custo real guardado em externalCost; carrega o prompt VERBATIM, as referências da casa (referenceImageIds), o personagem (characterId) e o motor (externalEngine 'provedor-motor'); a peça chega por filePath (local, só no MCP instalado), sourceUrl (o render, baixado pelo MCP na máquina da pessoa, nunca pelo servidor) ou base64; o carimbo +18 nasce na entrada pela CLASSE do provedor (peso aberto como Sogni, Replicate, HF, fal, WaveSpeed, Civitai e a própria placa entram carimbados, só a curadoria tira; serviço com moderação como Kie, Magnific, Freepik, Krea entra sem) ou por unfiltered=true dito pela pessoa (carimbo dela, ela tira depois); idempotente por sourceUrl ou pelo hash do arquivo, então re-ingerir corrige a ficha em vez de duplicar; tetos 12 MB imagem, 60 MB vídeo, 40 por dia. A chave do provedor NUNCA passa por aqui: quem gerou foi o harness da pessoa. Passo a passo na skill 'pontes'), refs (acopla peças da casa como REFERÊNCIA numa peça que já existe, de upload ou de ingest; ADMIN, e só na própria peça), processo (O COMO JUNTO DO QUE: anexa a uma peça as peças que mostram como ela foi dirigida, o mapa de rota desenhado sobre o still, a prancha de frames com o tempo de cada marco, o antes e depois de duas rodadas; elas viram a seção 'Como foi feito' na página pública da peça, na ordem que você mandar e com a sua legenda por peça; qualquer membro, só na própria peça, teto de 12. É IRMÃ do refs e a diferença importa: refs é o INSUMO que entrou na geração, processo é o REGISTRO de como ela foi dirigida, e uma lista não mexe na outra. Peça de processo privada não aparece pra quem está de fora nem em miniatura: pra aparecer, publique ela também), cast (QUEM ESTÁ EM CENA numa peça que já existe, quando é mais de uma criatura: characterIds em ordem, o protagonista primeiro, e a peça passa a contar na ficha de todos eles em vez de sumir da segunda; qualquer membro, na própria peça), parts (O INTEIRO E OS PEDAÇOS de um vídeo: o clipe de 30s que foi montado a partir de dois takes de 15s, a fita longa feita de partes. COM imageId devolve a ficha de parentesco daquela peça, quais são as partes dela e de qual inteiro ela é parte, com a url do arquivo completo pra baixar. SEM imageId devolve o que AINDA NÃO FOI MONTADO: varre os takes soltos da conta, agrupa os que têm cara de par (mesmo personagem, mesmo período, prompt de 'Part one/Part two' ou arquivo terminando em -a/-b) e diz o PORQUE de cada agrupamento, pra você saber o que falta juntar antes de o autor perguntar. É heurística e não monta nada sozinha: adianta a descoberta, quem decide é quem lê. characterId filtra por personagem. Sem custo), link_parts (LIGA o inteiro aos pedaços: imageId é o vídeo montado e partIds são os takes NA ORDEM em que aparecem nele. O juntador da casa e o ingest que traz referências de vídeo já gravam esse laço sozinhos; esta porta é pra montagem feita FORA (ffmpeg na máquina, ingest do arquivo já pronto) e pra corrigir ligação errada. Só na própria peça, teto de 16 partes, e a lista TROCA o que estava gravado antes. Sem custo), reprovar (O VETO do dono: imageId + motivo, o porquê numa frase concreta. A peça que errou (rosto do personagem trocado, mão quebrada, a referência errada) não sai mais por porta nenhuma, fila do Distribution, publicar, Telegram, e some das levas do garimpo; fica no acervo com o porquê, pra ensinar. Chame NO MESMO TURNO em que o dono condena uma peça: peça condenada e não marcada volta numa leva. desfazer=true tira o veto. Imagem e vídeo, só na própria peça, sem custo), reprovadas (as peças vetadas da conta com o prompt que as gerou e o motivo, a mais recente primeiro; characterId filtra por personagem. LEIA ANTES de gerar de novo um personagem que já teve peça reprovada: é a lista do que não repetir. Sem custo). Use list/get pra reusar imagem como referência (passe o imageId em sapiens_image mode=edit ou mode=variation) ou pra mostrar pro user o que ele já tem; publish quando o user quer divulgar a imagem dele. IMPORTANTE sobre upload: a peça entra PRIVADA e continua privada: o servidor recusa publicar e recusa compartilhar na comunidade, porque ela é do usuário e a responsabilidade é dele. O caminho pra ela virar coisa pública é usar como referência numa geração daqui e publicar o resultado. O refs escreve só proveniência (de que ficha/folha a peça nasceu): não promove nada, e um upload continua sem publicar depois de ganhar referência. COMO A PEÇA FOI FEITA: list aceita skill=<slug> e devolve só o que saiu daquela skill (o mesmo slug que sapiens_image gravou em skills), com a busca varrendo as últimas 200 peças antes de cortar no limit; cada item volta com o campo skills, e null ali quer dizer que ninguém marcou, não que foi feita sem skill.",
|
|
93
93
|
schema: gallerySchema,
|
|
94
94
|
handler: gallery,
|
|
95
95
|
},
|
|
@@ -144,7 +144,7 @@ export const TOOLS = {
|
|
|
144
144
|
handler: musicator,
|
|
145
145
|
},
|
|
146
146
|
sapiens_video: {
|
|
147
|
-
description: "Sapiens Video — gera vídeo (qualquer membro logado; vídeo é caro, cobra as Sinapses da sua conta). Sub-action 'create' (recomendada): escolhe modelo + config e gera num call (cria a row + renderiza). Modelos: 'sapiens-video-seedance' (Seedance 2.0, cena+áudio nativo, 4-15s, 480/720/1080p, t2v/i2v; aceita até 4 imagens de REFERÊNCIA via referenceImageIds/referenceImageUrls/referenceImagePaths (o H3 aceita até 9, os Veo Fast/Quality e o Omni 1.1 até 3; Lite, Kling, Hailuo, WAN 2.5 e 3.0 e os dois Spicy não), que guiam estilo/personagem/composição SEM virar o 1º frame — é o fluxo STORYBOARD: gere a folha de key poses com sapiens_image templateSlug='storyboard-sapiens-v1', passe folha + personagem como refs num t2v e descreva o take contínuo no prompt, citando as refs por descrição e mandando ignorar o traço do sketch; aceita também 1 VÍDEO DE MOVIMENTO via referenceVideoUrls (role 'refvideo' -> reference_videos, <=15s, host da casa): a coreografia/câmera do clipe guia o take, combinável com a folha), 'sapiens-video-seedance-2-fast' e 'sapiens-video-seedance-2-mini' (os irmãos do 2.0: MESMO repertório completo, incluindo referência, frame final e vídeo de movimento; o Fast custa 20% menos e o Mini METADE, ambos com teto 720p — pedir 1080p neles entrega e cobra 720p. Use o Mini pra iterar enquadramento/prompt barato e feche no 'sapiens-video-seedance' quando o take estiver certo), 'sapiens-video-seedance-25' (Seedance 2.5, a geração SEGUINTE e não um quarto tier da 2.0: take de 4 a 30s num fôlego, edita e estende vídeo, mesmo repertório de referência mais ÁUDIO como referência; teto 720p e ~1,5x o preço por segundo do 2.0. Duração é o que pesa aqui: 30s em 720p passa de 40 mil Sinapses, então confirme a duração com a pessoa antes de disparar. Quem precisa de 1080p fica no 'sapiens-video-seedance'), 'sapiens-video-kling' (Kling 3.0 Pro, anima imagem, 3-15s, sound opcional, i2v/t2v), 'sapiens-video-hailuo' (Hailuo 2.3 da MiniMax, física e movimento em 768p, 6 ou 10s, t2v/i2v) e 'sapiens-video-hailuo-pro' (o mesmo em 1080p, 5s fixo — duração não é param aqui): motores PUROS, sem áudio nativo, sem imagens de referência e sem frame final, então quem precisa disso fica no Seedance 2.0; o Pro é o 1080p mais barato da casa, 'sapiens-video-h3' (MiniMax H3: som nativo incluso sem toggle, 5 a 15s em '2k' ou '768p' (sem resolution cai no 2k, que custa 33% mais por segundo), t2v/i2v e frame final; ACEITA até 9 imagens e 3 vídeos de referência (somando 15s), o caminho de take longo com personagem travada; referência e frame inicial são exclusivos, mande um dos dois; o 2K de 15s leva uns 9 minutos de render, acompanhe em status e não gere de novo), 'sapiens-video-h3-spicy' (MiniMax H3 Spicy: o H3 SEM freio de conteúdo, i2v puro a partir de uma imagem sua, que é o que trava a identidade; 3 a 15s, 480p/768p/1080p, som nativo, frame final; o segundo de vídeo mais barato e o render mais rápido da casa), 'sapiens-video-seedance-spicy' (Seedance 2.0 Spicy: o 2.0 SEM freio, também i2v puro, som nativo; 4 a 15s em 480p e 720p, para em 10s em 1080p; sem frame final; o som tem interruptor no mesmo preço), 'sapiens-video-wan' (WAN 2.5, imagem que fala/canta com áudio+lip-sync, 5/10s, i2v), 'sapiens-video-wan-3' (WAN 3.0: texto ou imagem, som nativo com interruptor no mesmo preço, frame final, 5/8/10s em 480/720/1080p; sem imagem de referência), 'sapiens-video-kling-motion' (Motion transfer: passa o movimento de um vídeo pra uma imagem, PRECISA de pessoa com tronco visível na imagem E no vídeo), 'sapiens-video-shot-mimic' (Shot Mimic: recria o plano/câmera/cortes de um vídeo de referência como cena nova), 'sapiens-video-omni-11' (Gemini Omni 1.1: texto ou imagem vira vídeo 10s 720p com áudio nativo; aceita até 3 imagens de referência
|
|
147
|
+
description: "Sapiens Video — gera vídeo (qualquer membro logado; vídeo é caro, cobra as Sinapses da sua conta). Sub-action 'create' (recomendada): escolhe modelo + config e gera num call (cria a row + renderiza). Modelos: 'sapiens-video-seedance' (Seedance 2.0, cena+áudio nativo, 4-15s, 480/720/1080p, t2v/i2v; aceita até 4 imagens de REFERÊNCIA via referenceImageIds/referenceImageUrls/referenceImagePaths (o H3 aceita até 9, os Veo Fast/Quality e o Omni 1.1 até 3; Lite, Kling, Hailuo, WAN 2.5 e 3.0 e os dois Spicy não), que guiam estilo/personagem/composição SEM virar o 1º frame — é o fluxo STORYBOARD: gere a folha de key poses com sapiens_image templateSlug='storyboard-sapiens-v1', passe folha + personagem como refs num t2v e descreva o take contínuo no prompt, citando as refs por descrição e mandando ignorar o traço do sketch; aceita também 1 VÍDEO DE MOVIMENTO via referenceVideoUrls (role 'refvideo' -> reference_videos, <=15s, host da casa): a coreografia/câmera do clipe guia o take, combinável com a folha), 'sapiens-video-seedance-2-fast' e 'sapiens-video-seedance-2-mini' (os irmãos do 2.0: MESMO repertório completo, incluindo referência, frame final e vídeo de movimento; o Fast custa 20% menos e o Mini METADE, ambos com teto 720p — pedir 1080p neles entrega e cobra 720p. Use o Mini pra iterar enquadramento/prompt barato e feche no 'sapiens-video-seedance' quando o take estiver certo), 'sapiens-video-seedance-25' (Seedance 2.5, a geração SEGUINTE e não um quarto tier da 2.0: take de 4 a 30s num fôlego, edita e estende vídeo, mesmo repertório de referência mais ÁUDIO como referência; teto 720p e ~1,5x o preço por segundo do 2.0. Duração é o que pesa aqui: 30s em 720p passa de 40 mil Sinapses, então confirme a duração com a pessoa antes de disparar. Quem precisa de 1080p fica no 'sapiens-video-seedance'), 'sapiens-video-kling' (Kling 3.0 Pro, anima imagem, 3-15s, sound opcional, i2v/t2v), 'sapiens-video-hailuo' (Hailuo 2.3 da MiniMax, física e movimento em 768p, 6 ou 10s, t2v/i2v) e 'sapiens-video-hailuo-pro' (o mesmo em 1080p, 5s fixo — duração não é param aqui): motores PUROS, sem áudio nativo, sem imagens de referência e sem frame final, então quem precisa disso fica no Seedance 2.0; o Pro é o 1080p mais barato da casa, 'sapiens-video-h3' (MiniMax H3: som nativo incluso sem toggle, 5 a 15s em '2k' ou '768p' (sem resolution cai no 2k, que custa 33% mais por segundo), t2v/i2v e frame final; ACEITA até 9 imagens e 3 vídeos de referência (somando 15s), o caminho de take longo com personagem travada; referência e frame inicial são exclusivos, mande um dos dois; o 2K de 15s leva uns 9 minutos de render, acompanhe em status e não gere de novo), 'sapiens-video-h3-spicy' (MiniMax H3 Spicy: o H3 SEM freio de conteúdo, i2v puro a partir de uma imagem sua, que é o que trava a identidade; 3 a 15s, 480p/768p/1080p, som nativo, frame final; o segundo de vídeo mais barato e o render mais rápido da casa), 'sapiens-video-seedance-spicy' (Seedance 2.0 Spicy: o 2.0 SEM freio, também i2v puro, som nativo; 4 a 15s em 480p e 720p, para em 10s em 1080p; sem frame final; o som tem interruptor no mesmo preço), 'sapiens-video-wan' (WAN 2.5, imagem que fala/canta com áudio+lip-sync, 5/10s, i2v), 'sapiens-video-wan-3' (WAN 3.0: texto ou imagem, som nativo com interruptor no mesmo preço, frame final, 5/8/10s em 480/720/1080p; sem imagem de referência), 'sapiens-video-kling-motion' (Motion transfer: passa o movimento de um vídeo pra uma imagem, PRECISA de pessoa com tronco visível na imagem E no vídeo), 'sapiens-video-shot-mimic' (Shot Mimic: recria o plano/câmera/cortes de um vídeo de referência como cena nova), 'sapiens-video-omni-11' (Gemini Omni 1.1: texto ou imagem vira vídeo de 4, 6, 8 ou 10s (sem durationSec, 10s) em 720p com áudio nativo; aceita até 3 imagens de referência; resolution é ignorada; editOfImageId aponta um vídeo Omni seu e o prompt edita a MESMA cena, preservando câmera e ambiente) e 'sapiens-video-omni' (o 1.0 preview: mesmo preço e mesmo repertório, desligado por default, existe pra comparar com o 1.1), 'sapiens-video-lite/fast/quality' (Veo 3.1: 4, 6 ou 8s, sem durationSec sai 8s; com imagem de referência ou frame final o Google só faz 8s). Args create: model, prompt, durationSec, resolution ('480p'/'720p'/'1080p'; no H3 '768p'/'2k'), audio, aspectRatio. RECEITA DE TAKE (templateSlug + brief), o irmão do templateSlug da imagem: em vez de escrever o prompt inteiro, passe templateSlug e a receita travada da casa embrulha a cena com estilo, cenário, arco, áudio e look, e ainda escolhe o motor (por isso model fica opcional). O `prompt` vira só a CENA e o `brief` preenche os campos do formato (subject, persona, hook, shots com voiceLine e propVisible, uvps, language, energy); campo vazio some do prompt em vez de virar buraco. Receitas de hoje: 'ugc-vertical-v1' (selfie que fala, o formato nativo de Reels/TikTok/Shorts), 'unboxing-vertical-v1' (mãos e reveal, som real do papel e do lacre), 'app-demo-vertical-v1' (a tela do app legível na mão da pessoa) e 'reflexao-vertical-v1' (talking-head lento pra ideia ou ensaio). Override de model/aspectRatio/durationSec/resolution vale dentro do que a receita aceita, e o erro lista as opções. Sub-action 'templates' (sem custo, sem login) traz o catálogo vivo com spec default, whitelist e os briefFields de cada uma. Isto substitui a tool sapiens_shorts, que era admin-only e só falava Veo 3.1 Fast; o mesmo UGC de 8s sai a 720p no Seedance 2.0 Mini por bem menos. FRAME INICIAL/FINAL POR REFERÊNCIA (recomendado): startImageId/endImageId (id da sua galeria) ou startImageUrl/endImageUrl (url de galeria/Acervo/personagem) — resolvidos server-side igual à imagem, descubra via sapiens_reference. FRAME POR ARQUIVO LOCAL (só no MCP instalado/stdio, não no remoto): startImagePath/endImagePath = caminho absoluto de uma imagem no seu PC (PNG/JPEG/WebP até 8MB); o processo lê o arquivo e sobe como frame inicial/final, igual a subir no gerador do site — 1 imagem inicial + 1 final por vídeo, então pra vários vídeos rode create uma vez por imagem. No remoto use id/url. Alternativa base64: references (role 'start'=imagem i2v, 'end'=frame final, 'driving'=vídeo de movimento do Motion). Suporte a frame final varia por modelo. Custo server-side por config. Sub-action 'generate' (legado): renderiza um imageId de vídeo já criado no site. Retorna {success, url, imageId, cost}. VITRINE (sem custo): sub-action 'demos' lista os SEUS demo films (kind=demo do Estúdio de Vídeo) com slug + estado de vitrine; sub-action 'showcase' põe/tira um demo (por slug) do mini-cinema da /conectar-claude, com showcaseTag (chip de capacidade) e showcaseOrder (ordem asc). Fluxo: 'demos' pra achar o slug, depois 'showcase' com showcase=true. Só entra na vitrine pública se for a conta da casa. VÍDEOS PROGRAMÁTICOS (ADMIN, sem custo): o Lab do Estúdio de Vídeo (/experimentos/films, tabela videoSpecs, 5 kinds: demo | aula-tour | essay | tipografia-musical | dataviz) opera por aqui sem browser — 'film-list' (todos os kinds; filtros filmKind/filmStatus), 'film-get' (spec inteiro por slug), 'film-upsert' (cria/atualiza por slug, idempotente; spec = objeto JSON no shape do 'Copiar spec' da tela, validação no servidor), 'film-status' (produção por slug: filmStatus + videoUrl + durationSecMeasured; o fecho do render é os três num call), 'film-publish' (Acervo aba Fitas + portfólio; exige pronto+URL), 'film-delete' (limpar rascunho). O RENDER do filme segue no agente local (skill /film, repo da casa): o MCP registra e fecha o ciclo, não renderiza. create é ASSÍNCRONA: cria o row, debita e volta NA HORA com {imageId, status:'rendering', cost} (não espera o render, que leva de segundos a minutos). Acompanhe com a sub-action 'status' (imageId) até status='completed' (traz a url) ou 'error'/'blocked'. NÃO chame create de novo enquanto renderiza (cria outro vídeo e cobra de novo); falha de provider refunda sozinha. SOM: 'sonorize' (imageId de vídeo SEU completed + prompt do som da cena) gera uma VARIANTE nova com trilha sincronizada (20 Sinapses/s, o original fica intacto; sonorize sempre o original, nunca uma variante). ADMIN: 'shadows' (videoUrl + title) extrai o depth map (depth-map) de um vídeo: entra na sua timeline de vídeos e no Acervo como driving reutilizável; 'shadows-list' lista os depth maps prontos. PREÇO DE VÍDEO É FAIXA, NÃO NÚMERO: nos motores por segundo (todo Seedance, Kling, WAN 2.5 e 3.0, Hailuo, H3, os dois Spicy, Shot Mimic, e desde out/2026 o Veo 3.1 e o Gemini Omni) a conta é duração x resolução [x áudio], e OMITIR não pega o barato: sem 'resolution' o servidor cobra o tier MAIS CARO do motor, sem 'durationSec' cobra o piso de duração (no Veo e no Omni, o padrão: 8s e 10s). Um create de Seedance 2.0 sem resolution debita 1080p. Nunca prometa um valor sem cotar: sub-action 'price' (sem custo, sem login) devolve o número EXATO que o create vai debitar pra model + durationSec + resolution + audio, e avisa (clamped=true) quando o que você pediu não é o que vai ser cobrado. Sub-action 'models' (sem custo, sem login): lista os modelos ativos + a faixa de preço calculada pela mesma função que debita (priceDefault = o que uma chamada sem config custa, priceMin e priceMax = os dois cantos do motor, cada um com a config que o produz) + config (durações/resoluções) + disponibilidade (motor em preview pode aparecer como 'em breve'). LEGENDA (fita, por slug): 'caption-list' (sem custo, mostra os idiomas que a peça já tem), 'caption-generate' (captionLang = idioma FALADO; captionTrio=true já traduz pro trio da casa pt+en+ja na mesma chamada) e 'caption-translate' (captionLang = destino, parte sempre da faixa original). Cobra por minuto começado de vídeo: 50 Sinapses o minuto transcrito, 20 o traduzido, com a duração vindo do doc da peça. A legenda é desenhada pela casa em dois estilos (discreta e social), trocáveis no play sem regerar e sem custo.",
|
|
148
148
|
schema: videoSchema,
|
|
149
149
|
handler: video,
|
|
150
150
|
},
|
package/dist/skills.js
CHANGED
|
@@ -242,9 +242,9 @@ Duração é o que pesa aqui, não o modelo: um take de 30s em 720p passa de 40
|
|
|
242
242
|
- \`sapiens-video-wan-3\`: WAN 3.0, texto ou imagem, som nativo, frame final e 1080p, 5 a 10s.
|
|
243
243
|
- \`sapiens-video-kling-motion\`: passa o movimento de um vídeo pra uma imagem. Precisa de pessoa com tronco visível na imagem E no vídeo.
|
|
244
244
|
- \`sapiens-video-shot-mimic\`: recria o plano, a câmera e os cortes de um vídeo de referência como cena nova.
|
|
245
|
-
- \`sapiens-video-omni-11\`: Gemini Omni 1.1, texto ou imagem vira clipe de 10s 720p com áudio nativo. Aceita até 3 imagens suas (frame inicial, frame final ou referência de personagem e estilo); vídeo de referência não, e
|
|
245
|
+
- \`sapiens-video-omni-11\`: Gemini Omni 1.1, texto ou imagem vira clipe de 4, 6, 8 ou 10s (sem \`durationSec\`, 10s) em 720p com áudio nativo. O preço é por segundo: o take de 4s custa 40% do de 10s. Aceita até 3 imagens suas (frame inicial, frame final ou referência de personagem e estilo); vídeo de referência não, e \`resolution\` segue ignorada. O truque: \`editOfImageId\` aponta um vídeo Omni seu e o prompt vira instrução de edição sobre a MESMA cena (troca item ou personagem, preserva câmera e ambiente). É o caminho pra variações com continuidade: gera a base uma vez, edita N vezes. Cada edição debita como geração nova.
|
|
246
246
|
- \`sapiens-video-omni\`: o Gemini Omni 1.0, a versão preview. Mesmo preço e mesmo repertório do 1.1, mantida só pra comparar as duas. Nasce desligada (não aparece na lista de motores), então peça o 1.1.
|
|
247
|
-
- \`sapiens-video-lite\` / \`-fast\` / \`-quality\`: Veo 3.1.
|
|
247
|
+
- \`sapiens-video-lite\` / \`-fast\` / \`-quality\`: Veo 3.1, 4, 6 ou 8s (sem \`durationSec\`, 8s), preço por segundo. Com imagem de referência ou frame final o Google só faz 8s: pedir menos com elas recusa antes de gastar.
|
|
248
248
|
|
|
249
249
|
## Receita de take (\`templateSlug\`), quando o formato já tem forma
|
|
250
250
|
|
|
@@ -348,6 +348,12 @@ Nas Krea 2 da WaveSpeed a referência é a imagem-base (uma só), e \`refStrengt
|
|
|
348
348
|
- \`generate\` é SÍNCRONA e cobra ao concluir. Modelo pesado (Pro, gpt-image-2-high, Grok quality, Seedream 5.0 Pro, 2K/4K) cai na regra do timeout: cheque \`sapiens_gallery action=list\` antes de repetir, senão cobra duas vezes. O \`seedream-5-0-pro\` foi medido em ~140s, ACIMA do teto de 120s do cliente, então o Timeout nele é o esperado e a imagem está lá.
|
|
349
349
|
- Uma imagem só vira pública (e ganha página indexável) com \`sapiens_gallery action=publish\`.
|
|
350
350
|
|
|
351
|
+
## Peça reprovada ensina a próxima
|
|
352
|
+
|
|
353
|
+
Quando a pessoa condena uma peça ("mudou o rosto dela", "a mão está quebrada", "não é ela"), marque NO MESMO TURNO: \`sapiens_gallery action=reprovar imageId=<id> motivo='<o porquê numa frase concreta>'\`. O motivo bom diz a CAUSA, não só o sintoma: "trocou o rosto: gerada só com o personagem, sem as fotos de rosto do passaporte" ensina mais que "ficou feia". A reprovada não sai mais por porta nenhuma (fila de distribuição, publicar, canal) e some das sugestões do que postar; ela fica no acervo pra ensinar. Peça condenada e não marcada volta numa leva semanas depois, porque nada nela diz que foi condenada.
|
|
354
|
+
|
|
355
|
+
Antes de gerar de novo um personagem, leia o que já deu errado com ele: \`sapiens_gallery action=reprovadas characterId=<id>\` devolve cada peça vetada com o prompt que a gerou e o motivo. Cada motivo vira cuidado nesta geração: a referência que faltou entra, a palavra que puxou o erro sai do prompt. O erro que se repete vira regra do personagem: grave no passaporte (\`sapiens_character action=set_passport\`, campo \`discarded\`, com o negativo junto).
|
|
356
|
+
|
|
351
357
|
## Quando a pessoa quer "do jeito dela", com o personagem dela
|
|
352
358
|
|
|
353
359
|
O design system dela é quem veste a peça (\`sapiens_brand\`), e o personagem dela pode virar a cara fixa desse design system. Depois de plugado, ele entra em toda imagem daquela marca sem ninguém anexar referência de novo:
|
|
@@ -827,7 +833,7 @@ Um carrossel é uma RECEITA: tema (paleta, folha e assinatura) mais slides, cada
|
|
|
827
833
|
|
|
828
834
|
1. \`sapiens_carrossel action=generate\` com \`brief\` (o tema e o ângulo, um parágrafo) OU \`articleId\` (artigo publicado) OU \`userArticleId\` (artigo dela). Custa 350 Sinapses, já com a escolha de fotos, e estorna se falhar. Devolve o \`id\` e a \`url\` do editor.
|
|
829
835
|
2. \`action=get\` traz o payload inteiro e o catálogo: os layouts com os slots de cada um, as paletas, as folhas e a assinatura. Leia antes de mexer.
|
|
830
|
-
3. \`action=update\` grava o payload INTEIRO de volta. Reescreva os textos com a voz da pessoa (puxe a skill \`voz-da-casa\`). Mande o \`theme\` inteiro e o \`image\` de todo slide que você não mexeu: o que faltar volta pro padrão e a foto do slide some.
|
|
836
|
+
3. \`action=update\` grava o payload INTEIRO de volta. Reescreva os textos com a voz da pessoa (puxe a skill \`voz-da-casa\`). Mande o \`theme\` inteiro e o \`image\` de todo slide que você não mexeu: o que faltar volta pro padrão e a foto do slide some. Mande também \`baseUpdatedAt\` com o \`updatedAt\` do get: se o carrossel mudou depois (uma foto gerada, uma edição dela no editor), o update recusa em vez de apagar isso, e aí você faz get de novo. Foto nova não entra por URL no update, só pelo passo 4.
|
|
831
837
|
4. Foto: \`action=auto_images\` (60) deixa a IA escolher do banco; \`action=set_image\` põe uma peça DA PESSOA pelo ID citável (\`img_…\`, de \`sapiens_reference\` ou \`sapiens_gallery\`), de graça; \`action=generate_image\` gera uma nova pra um slide, ~450 cada.
|
|
832
838
|
5. Mande a \`url\` do editor. É lá que ela confere, ajusta e baixa.
|
|
833
839
|
|
package/dist/tools/carrossel.js
CHANGED
|
@@ -66,8 +66,12 @@ export const carrosselSchema = z.object({
|
|
|
66
66
|
payload: z
|
|
67
67
|
.any()
|
|
68
68
|
.optional()
|
|
69
|
-
.describe("update: o payload INTEIRO, no shape do get: { theme: { palette, sheet, signature }, slides: [{ id, templateId, slots, image }], meta }. Preserve image dos slides que você não mexeu e o theme inteiro (folha e assinatura): o que faltar volta pro padrão."),
|
|
69
|
+
.describe("update: o payload INTEIRO, no shape do get: { theme: { palette, sheet, signature }, slides: [{ id, templateId, slots, image }], meta }. Preserve image dos slides que você não mexeu e o theme inteiro (folha e assinatura): o que faltar volta pro padrão. Foto NOVA não entra por URL aqui: use set_image (ID da peça) ou generate_image."),
|
|
70
70
|
title: z.string().optional().describe("update: novo título do carrossel (opcional)."),
|
|
71
|
+
baseUpdatedAt: z
|
|
72
|
+
.number()
|
|
73
|
+
.optional()
|
|
74
|
+
.describe("update: o updatedAt que o get devolveu. Mande sempre: se o carrossel mudou depois do get (uma foto gerada, uma edição no editor), o update recusa em vez de apagar isso com o payload velho. Aí faça get de novo e reaplique."),
|
|
71
75
|
force: z.boolean().optional().describe("auto_images: true troca também as fotos que já estão nos slides."),
|
|
72
76
|
makeVisual: z
|
|
73
77
|
.boolean()
|
|
@@ -144,6 +148,7 @@ export async function carrossel(args) {
|
|
|
144
148
|
carouselId: need(args.carouselId, "carouselId"),
|
|
145
149
|
payload: coercePayload(need(args.payload, "payload")),
|
|
146
150
|
...(args.title ? { title: args.title } : {}),
|
|
151
|
+
...(typeof args.baseUpdatedAt === "number" ? { baseUpdatedAt: args.baseUpdatedAt } : {}),
|
|
147
152
|
});
|
|
148
153
|
case "auto_images":
|
|
149
154
|
return await convexAction("carouselAutofill:mcpCarouselAutoImages", {
|
package/dist/tools/gallery.js
CHANGED
|
@@ -42,6 +42,8 @@ export const gallerySchema = z.object({
|
|
|
42
42
|
"cast",
|
|
43
43
|
"parts",
|
|
44
44
|
"link_parts",
|
|
45
|
+
"reprovar",
|
|
46
|
+
"reprovadas",
|
|
45
47
|
]),
|
|
46
48
|
processo: z
|
|
47
49
|
.array(z.object({
|
|
@@ -63,7 +65,7 @@ export const gallerySchema = z.object({
|
|
|
63
65
|
.positive()
|
|
64
66
|
.max(100)
|
|
65
67
|
.optional()
|
|
66
|
-
.describe("Default 20. Max 100.
|
|
68
|
+
.describe("Default 20. Max 100. Pra action=list (e action=reprovadas, teto 60). Sem offset: com filtro de model ou skill a busca varre só as últimas 200 peças. Pra achar o imageId de peça que não é de hoje, use sapiens_reference action=browse bucket=history term=<palavra> (paginado, devolve o imageId) ou sapiens_reference action=resolve handle=img_xxx."),
|
|
67
69
|
model: z
|
|
68
70
|
.string()
|
|
69
71
|
.optional()
|
|
@@ -137,7 +139,7 @@ export const gallerySchema = z.object({
|
|
|
137
139
|
characterId: z
|
|
138
140
|
.string()
|
|
139
141
|
.optional()
|
|
140
|
-
.describe("action=ingest: o personagem de quem é a peça (influencers:_id, ache com sapiens_character action=list_mine). A peça nasce ligada à ficha, igual ao que sai dos motores da casa: conta no personagem e resolve a miniatura dele. PODE OMITIR quando as referenceImageIds já são peças da casa feitas com aquele personagem (folha de storyboard, ficha): o servidor deduz o personagem da primeira ref que tem um. O que você diz aqui manda sobre o que ele deduz. Re-ingerir a mesma sourceUrl com characterId AMARRA uma peça que já entrou sem personagem, sem trocar o id. Aceita personagem seu ou público."),
|
|
142
|
+
.describe("action=ingest: o personagem de quem é a peça (influencers:_id, ache com sapiens_character action=list_mine). A peça nasce ligada à ficha, igual ao que sai dos motores da casa: conta no personagem e resolve a miniatura dele. PODE OMITIR quando as referenceImageIds já são peças da casa feitas com aquele personagem (folha de storyboard, ficha): o servidor deduz o personagem da primeira ref que tem um. O que você diz aqui manda sobre o que ele deduz. Re-ingerir a mesma sourceUrl com characterId AMARRA uma peça que já entrou sem personagem, sem trocar o id. Aceita personagem seu ou público. Em action=reprovadas, FILTRA as vetadas daquele personagem."),
|
|
141
143
|
characterIds: z
|
|
142
144
|
.union([z.array(z.string()), z.string()])
|
|
143
145
|
.optional()
|
|
@@ -163,6 +165,16 @@ export const gallerySchema = z.object({
|
|
|
163
165
|
.string()
|
|
164
166
|
.optional()
|
|
165
167
|
.describe("action=upload: de onde veio ('magnific', 'suno', 'camera'). Fica registrado na peça e no aviso do Discord."),
|
|
168
|
+
// --- action=reprovar: o veto do dono ---
|
|
169
|
+
motivo: z
|
|
170
|
+
.string()
|
|
171
|
+
.max(500)
|
|
172
|
+
.optional()
|
|
173
|
+
.describe("action=reprovar: O PORQUÊ do veto, numa frase concreta que a próxima geração consegue usar ('trocou o rosto da Helen: gerada só com influencerId, sem as refs do passaporte'; 'mão esquerda com seis dedos'). É a lição que fica na peça: sem ele, reprovar só esconde e não ensina. Até 500 caracteres. Reprovar de novo sem motivo mantém o que já estava escrito."),
|
|
174
|
+
desfazer: z
|
|
175
|
+
.boolean()
|
|
176
|
+
.optional()
|
|
177
|
+
.describe("action=reprovar: true TIRA o veto (a peça volta a poder sair e a entrar nas levas), e o motivo vai junto. Ausente/false reprova."),
|
|
166
178
|
});
|
|
167
179
|
// Teto igual ao do servidor (convex/galleryImport.ts): falha aqui é mais barata
|
|
168
180
|
// que falhar depois de trafegar o base64 inteiro.
|
|
@@ -661,6 +673,33 @@ export async function gallery(args) {
|
|
|
661
673
|
// uma peça nova, sem nenhum laço com os takes que a formaram. O juntador da
|
|
662
674
|
// casa (o "compilado") e o ingest com refs de vídeo já gravam o laço
|
|
663
675
|
// sozinhos; esta porta é pro resto, e pra corrigir ligação errada.
|
|
676
|
+
// reprovar: o VETO do dono. A peça errou (rosto trocado, mão quebrada) e
|
|
677
|
+
// não sai mais por porta nenhuma (fila do Distribution, publicar, Telegram,
|
|
678
|
+
// teia) nem volta numa leva do garimpo. Fica no acervo, com o porquê, pra
|
|
679
|
+
// ensinar: é o que action=reprovadas devolve antes da próxima geração.
|
|
680
|
+
if (args.action === "reprovar") {
|
|
681
|
+
if (!args.imageId) {
|
|
682
|
+
throw new Error("action=reprovar exige imageId: a peça vetada (imagem ou vídeo, o id da galeria).");
|
|
683
|
+
}
|
|
684
|
+
if (!args.desfazer && !args.motivo?.trim()) {
|
|
685
|
+
throw new Error("action=reprovar exige motivo: o porquê do veto numa frase concreta. É ele que ensina a próxima geração a não repetir o erro.");
|
|
686
|
+
}
|
|
687
|
+
return await convexAction("desktopMcp:galleryReprovar", {
|
|
688
|
+
sessionToken,
|
|
689
|
+
imageId: args.imageId,
|
|
690
|
+
reprovada: !args.desfazer,
|
|
691
|
+
motivo: args.desfazer ? undefined : args.motivo?.trim(),
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
// reprovadas: as peças vetadas da conta, com o prompt que gerou e o porquê,
|
|
695
|
+
// a mais recente primeiro. Leia ANTES de gerar de novo o mesmo personagem.
|
|
696
|
+
if (args.action === "reprovadas") {
|
|
697
|
+
return await convexAction("desktopMcp:galleryReprovadas", {
|
|
698
|
+
sessionToken,
|
|
699
|
+
characterId: args.characterId,
|
|
700
|
+
limit: args.limit,
|
|
701
|
+
});
|
|
702
|
+
}
|
|
664
703
|
if (args.action === "link_parts") {
|
|
665
704
|
if (!args.imageId) {
|
|
666
705
|
throw new Error("action=link_parts exige imageId: o vídeo INTEIRO, o clipe montado. Use action=parts SEM imageId pra ver os pares de take que ainda não viraram um inteiro.");
|
package/dist/tools/video.js
CHANGED
|
@@ -23,7 +23,8 @@ import { httpUrl } from "../schema.js";
|
|
|
23
23
|
* resolução, som e modelo vêm do take-pai, porque é isso que faz o
|
|
24
24
|
* pedaço colar. `prompt` diz só O QUE ACONTECE em seguida (opcional:
|
|
25
25
|
* sem ele, a ação continua sozinha). Cada rodada é uma geração
|
|
26
|
-
* cheia e cobra como tal (no Omni,
|
|
26
|
+
* cheia e cobra como tal (no Omni, a duração do take-pai, 10s se
|
|
27
|
+
* ninguém escolheu; `durationSec` troca o tamanho do pedaço).
|
|
27
28
|
* Hoje só os motores Omni continuam; os outros recusam antes de
|
|
28
29
|
* cobrar. Assíncrono: volta imageId + parte, acompanhe em
|
|
29
30
|
* action=status. Encadeia (a parte 3 sai da parte 2), mas UMA POR
|
|
@@ -134,12 +135,14 @@ import { httpUrl } from "../schema.js";
|
|
|
134
135
|
* - sapiens-video-shot-mimic Shot Mimic — recria o plano do vídeo de referência (câmera,
|
|
135
136
|
* cortes, blocking) como cena nova; personagem via role 'start'
|
|
136
137
|
* (vídeo de referência MÁX 15s — acima o provider corta em 15s)
|
|
137
|
-
* - sapiens-video-lite/fast/quality Veo 3.1
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
138
|
+
* - sapiens-video-lite/fast/quality Veo 3.1: 4, 6 ou 8s (sem durationSec, 8s), preço
|
|
139
|
+
* por segundo; com imagem de referência ou frame final
|
|
140
|
+
* o Google só faz 8s. Números vivos em action=models.
|
|
141
|
+
* - sapiens-video-omni-11 Gemini Omni 1.1: texto ou imagem -> vídeo de 4, 6, 8 ou 10s (sem
|
|
142
|
+
* durationSec, 10s), 720p, com áudio nativo embutido. Aceita até 3
|
|
143
|
+
* imagens suas (frame inicial, frame final ou referência de
|
|
144
|
+
* personagem/estilo); vídeo de referência NÃO, e resolution segue
|
|
145
|
+
* ignorada (o render trava 720p).
|
|
143
146
|
* Também faz EDIÇÃO conversacional: `editOfImageId` aponta um vídeo Omni
|
|
144
147
|
* seu e o prompt edita a MESMA cena (troca item/personagem preservando
|
|
145
148
|
* o resto).
|
|
@@ -157,7 +160,8 @@ import { httpUrl } from "../schema.js";
|
|
|
157
160
|
* CUSTO: server-side por config (duração x resolução [x áudio]). NÃO existe "o preço"
|
|
158
161
|
* de um motor por segundo: existe faixa. Omitir `resolution` não pega o meio nem o
|
|
159
162
|
* mais barato, pega o tier MAIS CARO do motor (é o clamp de `resolveBilledVideoConfig`,
|
|
160
|
-
* que não subcobra), e omitir `durationSec` pega o piso de duração
|
|
163
|
+
* que não subcobra), e omitir `durationSec` pega o piso de duração (no VEO e no Omni,
|
|
164
|
+
* o padrão do motor: 8s e 10s, o clipe que eles entregavam antes de ter escolha). Antes de prometer
|
|
161
165
|
* um número pra pessoa, tire a cotação em action=price (sem custo, sem login).
|
|
162
166
|
* i2v/motion usam `references` em base64 (role 'start' = imagem inicial,
|
|
163
167
|
* 'end' = frame final, 'driving' = vídeo de movimento do Motion).
|
|
@@ -340,8 +344,8 @@ export const videoSchema = z.object({
|
|
|
340
344
|
durationSec: z
|
|
341
345
|
.number()
|
|
342
346
|
.optional()
|
|
343
|
-
.describe("action=create e action=price: duração em segundos (
|
|
344
|
-
"O PREÇO ESCALA COM A DURAÇÃO.
|
|
347
|
+
.describe("action=create e action=price: duração em segundos. Veo 3.1 (lite/fast/quality) 4/6/8 (com imagem de referência ou frame final, só 8), Gemini Omni 4/6/8/10, Seedance 2.0/Shot Mimic 4-15, Seedance 2.5 4-30 (o preço acompanha: confirme a duração com a pessoa antes de passar de 15), Kling 3-15, WAN 2.5 5/10, WAN 3.0 5/8/10, H3 5/6/8/10/12/15 nos dois tiers (768p e 2k), H3 Spicy 3-15, Seedance 2.0 Spicy 4-15 em 480p e 720p, 4-10 em 1080p. " +
|
|
348
|
+
"O PREÇO ESCALA COM A DURAÇÃO. Duração ausente ou FORA do leque do motor cai no PISO, menos no Veo e no Omni, que caem no padrão deles (8s e 10s). " +
|
|
345
349
|
"action=shadows: duração do vídeo-fonte, se souber (cobra 200/s; sem ela, flat ~2000)."),
|
|
346
350
|
resolution: z
|
|
347
351
|
.enum(["480p", "720p", "1080p", "768p", "2k"])
|
|
@@ -582,7 +586,7 @@ export async function video(args) {
|
|
|
582
586
|
"priceMin e priceMax são os dois cantos do motor, cada um com a config que o produz. " +
|
|
583
587
|
"Ao falar de preço com a pessoa, diga a faixa e a config, nunca um número solto. " +
|
|
584
588
|
"Pro número exato de uma config antes de gerar, use action=price (sem custo, sem login): ele devolve o valor que o create vai debitar. " +
|
|
585
|
-
"Motor com priceMode='por-clipe'
|
|
589
|
+
"Motor com priceMode='por-clipe' tem preço fixo e as três pontas são iguais (hoje nenhum: Veo e Omni cobram por segundo desde out/2026, e sem durationSec dão 8s e 10s). " +
|
|
586
590
|
"available=false = 'em breve' (depende de env, ex: Omni).",
|
|
587
591
|
};
|
|
588
592
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sapiens-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.86.0",
|
|
4
4
|
"mcpName": "com.sapiensinteticos/sapiens",
|
|
5
5
|
"description": "MCP server pra operar o Sapiens Sintéticos (sapiensinteticos.com) pelo Claude Code: gerar imagem, escrever artigo, voz, música e mais, na sua conta. Login pelo código de sapiensinteticos.com/conectar-claude.",
|
|
6
6
|
"type": "module",
|