sapiens-mcp 1.63.0 → 1.64.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/skills.js +12 -0
- package/dist/tools/image.js +4 -0
- package/dist/tools/reference.js +9 -4
- package/dist/tools/video.js +12 -0
- package/package.json +1 -1
package/dist/skills.js
CHANGED
|
@@ -206,6 +206,8 @@ Dar som a um vídeo SEU já pronto é \`sapiens_video action=sonorize\`, não é
|
|
|
206
206
|
|
|
207
207
|
\`action=models\` (sem custo, sem login) lista os modelos ativos com durações, resoluções, disponibilidade e a FAIXA de preço: o padrão, o piso e o teto, cada um dizendo em qual configuração acontece. Motor de preço-por-segundo não tem "um preço": o mesmo modelo custa 3x mais em 1080p e 30s do que em 720p e 5s.
|
|
208
208
|
|
|
209
|
+
Dois campos do payload evitam garimpo na lista. bestFor diz pra que o motor serve (audio = som nativo, fala = lip-sync, referencia = aceita referência de quem aparece, movimento = precisa de vídeo-guia, longo = passa dos 15s): filtre por aqui antes de comparar preço. family + variant dizem quem é o mesmo motor em geração ou tier diferente: as seis linhas de Seedance (1.0 Fast, 1.5 Pro, 2.0, 2.0 Fast, 2.0 Mini, 2.5) são UM motor, não seis. Escolha a família pelo trabalho, depois a variante pela conta.
|
|
210
|
+
|
|
209
211
|
\`action=price\` (sem custo, sem login) cota a configuração EXATA antes de rodar: passe \`model\`, \`durationSec\`, \`resolution\` e \`audio\` e receba o número que vai ser debitado, calculado pela mesma função que cobra. Ela também avisa quando o motor não aceita o que você pediu e vai cobrar outra coisa (\`clamped\`), o que acontece quando a duração não existe no enum ou a resolução cai num tier diferente.
|
|
210
212
|
|
|
211
213
|
Use \`price\` sempre que a pessoa perguntar quanto custa, e ANTES de qualquer \`create\` que não seja o default. Dizer o piso como se fosse o preço final é o jeito mais rápido de queimar a confiança dela: a cobrança vem maior e a culpa é sua.
|
|
@@ -231,6 +233,7 @@ Duração é o que pesa aqui, não o modelo: um take de 30s em 720p passa de 40
|
|
|
231
233
|
## Os outros modelos
|
|
232
234
|
|
|
233
235
|
- \`sapiens-video-h3\`: MiniMax H3, o mais barato por pixel da casa, com som nativo, texto ou imagem. A duração depende da resolução: \`2k\` vai até 10s, \`768p\` vai até 15s (o motor de 2K é lento demais pra 15s e o take se perderia no meio). Aceita até 9 imagens e 3 vídeos de referência, e é o caminho de take LONGO com personagem travada. Referência e frame inicial não vão juntos: escolha um. Sem \`resolution\` cai no 2k, que custa 40% mais por segundo.
|
|
236
|
+
- \`sapiens-video-h3-spicy\` e \`sapiens-video-seedance-spicy\`: os mesmos motores SEM freio de conteúdo. Os dois partem de uma IMAGEM sua (não fazem texto puro), e é isso que trava a identidade: quem aparece já veio pronto na imagem, o motor só dá movimento. O H3 Spicy é o mais barato e o mais rápido da casa (250 Sinapses o segundo em 480p, 3 a 15s); o Seedance Spicy tem o peso do 2.0 e para em 10s nos tiers acima de 480p.
|
|
234
237
|
- \`sapiens-video-kling\`: Kling 3.0 Pro, anima imagem, 3 a 15s, som opcional.
|
|
235
238
|
- \`sapiens-video-wan\`: WAN 2.5, imagem que fala ou canta, com lip-sync, 5 ou 10s.
|
|
236
239
|
- \`sapiens-video-wan-3\`: WAN 3.0, texto ou imagem, som nativo, frame final e 1080p, 5 a 10s.
|
|
@@ -305,6 +308,15 @@ Proibidos no prompt: "tarot card illustration", "intimate scale", "card-style po
|
|
|
305
308
|
|
|
306
309
|
\`action=generate\` com \`prompt\`, \`model\` e \`aspectRatio\`. \`action=models\` (sem custo, sem login) lista o catálogo vivo com preço atual, resolução máxima e se o modelo aceita referência.
|
|
307
310
|
|
|
311
|
+
## Escolher motor em dois passos
|
|
312
|
+
|
|
313
|
+
A lista de action=models é longa e ordenada por PREÇO, que não é a pergunta de quem vai gerar. Três campos do payload resolvem isso:
|
|
314
|
+
|
|
315
|
+
- bestFor: pra que o motor serve, num vocabulário fechado (foto, anime, texto pra palavra legível na arte, personagem pra segurar a mesma pessoa, adulto). FILTRE por aqui antes de comparar preço.
|
|
316
|
+
- family + variant: motores com a MESMA family são o mesmo motor em versão diferente (Krea 2 tem Realism, Livre e Base; Gemini tem 3 Pro e 3.1 Flash). O retorno traz um índice families já montado.
|
|
317
|
+
|
|
318
|
+
O caminho: filtre por bestFor, escolha a família, e só então compare as variantes dela entre si. Trocar de família porque uma variante é mais barata costuma trocar o resultado inteiro; trocar de variante dentro da família troca preço e acabamento, não o motor.
|
|
319
|
+
|
|
308
320
|
## Multi-referência
|
|
309
321
|
|
|
310
322
|
Combine até 4 imagens como referência numa geração só:
|
package/dist/tools/image.js
CHANGED
|
@@ -143,6 +143,10 @@ export async function image(args) {
|
|
|
143
143
|
// do browser tinha antes de agrupar. Ausência = motor sozinho.
|
|
144
144
|
family: m.family ?? null,
|
|
145
145
|
variant: m.variantLabel ?? null,
|
|
146
|
+
// Pra que este motor serve, no vocabulário fechado do catálogo: foto,
|
|
147
|
+
// anime, texto, personagem, adulto. É o que responde "qual motor pra
|
|
148
|
+
// isso" sem o cliente ter que interpretar vinte taglines.
|
|
149
|
+
bestFor: m.bestFor ?? [],
|
|
146
150
|
priceSinapses: m.effectivePriceSinapses,
|
|
147
151
|
maxResolution: m.maxResolution ?? "4K",
|
|
148
152
|
resolutionAdders: m.resolutionAdders,
|
package/dist/tools/reference.js
CHANGED
|
@@ -39,12 +39,13 @@ export const referenceSchema = z.object({
|
|
|
39
39
|
// set/2026). Fica no enum, depreciado e sem aparecer nas descrições, porque
|
|
40
40
|
// client publicado continua mandando ele e a regra de retrocompat da casa
|
|
41
41
|
// proíbe quebrar quem está atrasado. O servidor aceita os dois.
|
|
42
|
-
.enum(["history", "favorites", "videos", "stock_video", "acervo", "characters", "depth_map", "deepshadow"])
|
|
42
|
+
.enum(["history", "favorites", "videos", "stock_video", "acervo", "characters", "depth_map", "pose_map", "deepshadow"])
|
|
43
43
|
.optional()
|
|
44
44
|
.describe("Só 'browse': qual banco navegar: 'history' (suas imagens recentes), 'favorites' (as que você curtiu), " +
|
|
45
45
|
"'videos' (seus vídeos), 'stock_video' (Banco de Vídeo da casa: clipes/B-roll prontos, aceita term/orientation/loopOnly), " +
|
|
46
46
|
"'acervo' (stock + comunidade públicos de IMAGEM), 'characters' (personagens), " +
|
|
47
|
-
"'depth_map' (guias de movimento: os SEUS com shadowSource='mine', ou o banco curado da casa por default)
|
|
47
|
+
"'depth_map' (guias de movimento: os SEUS com shadowSource='mine', ou o banco curado da casa por default), " +
|
|
48
|
+
"'pose_map' (seu banco privado de POSE: mapa de profundidade de corpo num quadro parado, aceita term/orientation)."),
|
|
48
49
|
handle: z
|
|
49
50
|
.string()
|
|
50
51
|
.optional()
|
|
@@ -82,7 +83,7 @@ export const referenceSchema = z.object({
|
|
|
82
83
|
orientation: z
|
|
83
84
|
.enum(["vertical", "horizontal", "square"])
|
|
84
85
|
.optional()
|
|
85
|
-
.describe("
|
|
86
|
+
.describe("Buckets 'stock_video' e 'pose_map': filtra formato (vertical 9:16, horizontal 16:9, square 1:1)."),
|
|
86
87
|
loopOnly: z
|
|
87
88
|
.boolean()
|
|
88
89
|
.optional()
|
|
@@ -116,7 +117,7 @@ export async function reference(args) {
|
|
|
116
117
|
if (args.action === "browse") {
|
|
117
118
|
if (!args.bucket) {
|
|
118
119
|
return {
|
|
119
|
-
error: "browse exige `bucket` (history | favorites | videos | stock_video | acervo | characters | depth_map).",
|
|
120
|
+
error: "browse exige `bucket` (history | favorites | videos | stock_video | acervo | characters | depth_map | pose_map).",
|
|
120
121
|
};
|
|
121
122
|
}
|
|
122
123
|
const res = await convexAction("mcpReferences:referenceBrowse", {
|
|
@@ -144,6 +145,10 @@ export async function reference(args) {
|
|
|
144
145
|
note =
|
|
145
146
|
"Guias de movimento (mapa de profundidade). Use a `url` em sapiens_video referenceVideoUrls: a coreografia e a câmera do clipe guiam o take. `thumbnailUrl` é só preview (a soma com esqueleto), nunca mande ela como driving. Teto de duração varia por motor.";
|
|
146
147
|
}
|
|
148
|
+
else if (args.bucket === "pose_map") {
|
|
149
|
+
note =
|
|
150
|
+
"Poses do SEU banco privado (mapa de profundidade de corpo). Use a `url` em sapiens_image referenceImageUrls pra guiar a POSE da figura, do mesmo jeito que o depth_map guia o movimento no vídeo. `thumbnailUrl` é só preview da grade. É material privado seu: a peça gerada a partir dele é geração normal e publica normal, mas a pose em si não é acervo público da casa.";
|
|
151
|
+
}
|
|
147
152
|
else if (args.bucket === "acervo" || args.bucket === "characters") {
|
|
148
153
|
note =
|
|
149
154
|
"São referências públicas: use a `url` (characters trazem mainImageUrl + imageUrls) em sapiens_image referenceImageUrls, ou em sapiens_video startImageUrl/endImageUrl. Não são suas, então NÃO entram em sourceImageIds.";
|
package/dist/tools/video.js
CHANGED
|
@@ -88,6 +88,14 @@ import { httpUrl } from "../schema.js";
|
|
|
88
88
|
* vídeos (role 'refvideo', somando 15s), que é o caminho de take
|
|
89
89
|
* longo com personagem travada. Referência e frame inicial são
|
|
90
90
|
* EXCLUSIVOS (endpoints diferentes no provider): mande um dos dois.
|
|
91
|
+
* - sapiens-video-h3-spicy MiniMax H3 Spicy — o H3 SEM freio de conteúdo, a partir de uma
|
|
92
|
+
* imagem sua (i2v puro: a identidade entra pela imagem, não pelo
|
|
93
|
+
* texto). 3 a 15s, 480p/768p/1080p, som nativo, frame final. É o
|
|
94
|
+
* segundo de vídeo mais barato da casa (250 Sinapses/s em 480p) e
|
|
95
|
+
* o render mais rápido (5s em 480p sai em meio minuto).
|
|
96
|
+
* - sapiens-video-seedance-spicy Seedance 2.0 Spicy — o Seedance 2.0 SEM freio, também i2v puro.
|
|
97
|
+
* Som nativo. 4 a 15s em 480p; em 720p e 1080p para em 10s até
|
|
98
|
+
* alguém medir o render nesses tiers.
|
|
91
99
|
* - sapiens-video-wan WAN 2.5 — imagem que fala/canta (áudio+lip-sync nativo), 5/10s (i2v)
|
|
92
100
|
* - sapiens-video-kling-motion Kling Motion — transfere o movimento de um vídeo pra uma imagem
|
|
93
101
|
* (PRECISA de pessoa com tronco visível na imagem E no vídeo;
|
|
@@ -138,6 +146,8 @@ const VIDEO_MODELS = [
|
|
|
138
146
|
"sapiens-video-hailuo",
|
|
139
147
|
"sapiens-video-hailuo-pro",
|
|
140
148
|
"sapiens-video-h3",
|
|
149
|
+
"sapiens-video-h3-spicy",
|
|
150
|
+
"sapiens-video-seedance-spicy",
|
|
141
151
|
"sapiens-video-wan",
|
|
142
152
|
"sapiens-video-kling-motion",
|
|
143
153
|
"sapiens-video-shot-mimic",
|
|
@@ -503,6 +513,8 @@ export async function video(args) {
|
|
|
503
513
|
// motores sem relação. Ausência = motor sozinho.
|
|
504
514
|
family: m.family ?? null,
|
|
505
515
|
variant: m.variantLabel ?? null,
|
|
516
|
+
// Pra que este motor serve: audio, fala, referencia, movimento, longo.
|
|
517
|
+
bestFor: m.bestFor ?? [],
|
|
506
518
|
// "por-segundo" = o preço MUDA com duração, resolução e (no Kling) áudio.
|
|
507
519
|
// "por-clipe" = preço fixo, config não mexe na conta.
|
|
508
520
|
priceMode: m.priceMode ?? null,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sapiens-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.64.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",
|