sapiens-mcp 1.29.1 → 1.29.2
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/index.js +2 -2
- package/dist/tools/shorts.js +4 -2
- package/dist/tools/video.js +39 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -106,12 +106,12 @@ const TOOLS = {
|
|
|
106
106
|
handler: musicator,
|
|
107
107
|
},
|
|
108
108
|
sapiens_shorts: {
|
|
109
|
-
description: "Sapiens Shorts — render vertical 9:16 via VEO com brief structured (v1.5, admin-only). Sub-action: render. Args: imageId (persona pré-existente em generatedImages, descubra via sapiens_gallery), styleId ('ugc'/'unboxing'/'app-demo'/'reflexao'), brief (product+hook+shots+vibe), references opcionais.
|
|
109
|
+
description: "Sapiens Shorts — render vertical 9:16 via VEO com brief structured (v1.5, admin-only). Sub-action: render. Args: imageId (persona pré-existente em generatedImages, descubra via sapiens_gallery), styleId ('ugc'/'unboxing'/'app-demo'/'reflexao'), brief (product+hook+shots+vibe), references opcionais. render é ASSÍNCRONO: volta na hora com {imageId, status:'rendering', url:null}, e você acompanha com sapiens_video action=status imageId=<id> até status='completed' (traz a url VEO, expiração curta, baixe logo) ou 'error'. Pré-requisito: o imageId precisa ter row em generatedImages do user da sessão e cost definido. Pra criar row, use a UI primeiro (v1.6 vai cobrir requestGeneration via MCP).",
|
|
110
110
|
schema: shortsSchema,
|
|
111
111
|
handler: shorts,
|
|
112
112
|
},
|
|
113
113
|
sapiens_video: {
|
|
114
|
-
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), 'sapiens-video-kling' (Kling 3.0 Pro, anima imagem, 3-15s, sound opcional, i2v/t2v), 'sapiens-video-wan' (WAN 2.5, imagem que fala/canta com áudio+lip-sync, 5/10s, i2v), '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' (Gemini Omni: texto vira vídeo 10s 720p com áudio nativo; NÃO aceita mídia do user, ignora references/durationSec/resolution; editOfImageId aponta um vídeo Omni seu e o prompt edita a MESMA cena, preservando câmera e ambiente), 'sapiens-video-lite/fast/quality' (Veo 3.1). Args create: model, prompt, durationSec, resolution ('480p'/'720p'/'1080p'), audio, aspectRatio. 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. 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.
|
|
114
|
+
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), 'sapiens-video-kling' (Kling 3.0 Pro, anima imagem, 3-15s, sound opcional, i2v/t2v), 'sapiens-video-wan' (WAN 2.5, imagem que fala/canta com áudio+lip-sync, 5/10s, i2v), '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' (Gemini Omni: texto vira vídeo 10s 720p com áudio nativo; NÃO aceita mídia do user, ignora references/durationSec/resolution; editOfImageId aponta um vídeo Omni seu e o prompt edita a MESMA cena, preservando câmera e ambiente), 'sapiens-video-lite/fast/quality' (Veo 3.1). Args create: model, prompt, durationSec, resolution ('480p'/'720p'/'1080p'), audio, aspectRatio. 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. 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. 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. Sub-action 'models' (sem custo, sem login): lista os modelos de vídeo ativos + preço-piso + config (durações/resoluções) + disponibilidade (Omni depende de env).",
|
|
115
115
|
schema: videoSchema,
|
|
116
116
|
handler: video,
|
|
117
117
|
},
|
package/dist/tools/shorts.js
CHANGED
|
@@ -17,8 +17,10 @@ import { convexAction, getSessionToken } from "../convexClient.js";
|
|
|
17
17
|
* - app-demo: persona + tela
|
|
18
18
|
* - reflexao: atmosfera mais lenta, contemplativa
|
|
19
19
|
*
|
|
20
|
-
* Retorna `{ success:
|
|
21
|
-
*
|
|
20
|
+
* Retorna `{ success:true, imageId, status:'rendering', url:null }` (ASSÍNCRONO):
|
|
21
|
+
* o render VEO roda fora da chamada. Acompanhe com sapiens_video action=status
|
|
22
|
+
* imageId=<id> até status='completed' (traz a url VEO, expiração curta, baixe
|
|
23
|
+
* logo) ou 'error'/'blocked'.
|
|
22
24
|
*/
|
|
23
25
|
export const shortsSchema = z.object({
|
|
24
26
|
action: z.enum(["render"]),
|
package/dist/tools/video.js
CHANGED
|
@@ -54,7 +54,7 @@ const VIDEO_MODELS = [
|
|
|
54
54
|
"sapiens-video-omni",
|
|
55
55
|
];
|
|
56
56
|
export const videoSchema = z.object({
|
|
57
|
-
action: z.enum(["create", "generate", "demos", "showcase", "shadows", "shadows-list"]),
|
|
57
|
+
action: z.enum(["create", "generate", "status", "models", "demos", "showcase", "shadows", "shadows-list"]),
|
|
58
58
|
// --- action=shadows (deepshadows: extrai o mapa de profundidade de um vídeo) ---
|
|
59
59
|
videoUrl: httpUrl()
|
|
60
60
|
.optional()
|
|
@@ -120,8 +120,8 @@ export const videoSchema = z.object({
|
|
|
120
120
|
imageId: z
|
|
121
121
|
.string()
|
|
122
122
|
.optional()
|
|
123
|
-
.describe("action=generate: generatedImages:_id
|
|
124
|
-
"Use sapiens_gallery action=list pra descobrir."),
|
|
123
|
+
.describe("action=generate ou action=status: generatedImages:_id do vídeo. O create devolve o imageId; " +
|
|
124
|
+
"ou um vídeo já criado no site (o row define modelo + custo). Use sapiens_gallery action=list pra descobrir."),
|
|
125
125
|
// --- comum ---
|
|
126
126
|
prompt: z
|
|
127
127
|
.string()
|
|
@@ -161,6 +161,33 @@ export const videoSchema = z.object({
|
|
|
161
161
|
.describe("Frame FINAL: url pública de galeria/Acervo/personagem. Vira reference role 'end' (suporte varia por modelo)."),
|
|
162
162
|
});
|
|
163
163
|
export async function video(args) {
|
|
164
|
+
// models: catálogo VIVO dos modelos de vídeo (ativos + preço-piso/config +
|
|
165
|
+
// override admin + disponibilidade). Público, sem custo e sem login — antes de
|
|
166
|
+
// exigir sessão. Espelha sapiens_image action=models.
|
|
167
|
+
if (args.action === "models") {
|
|
168
|
+
const all = await convexQuery("videoModels:listWithOverrides", {});
|
|
169
|
+
const models = (all ?? [])
|
|
170
|
+
.filter((m) => m?.isActive)
|
|
171
|
+
.map((m) => ({
|
|
172
|
+
id: m.id,
|
|
173
|
+
engine: m.engine,
|
|
174
|
+
label: m.label,
|
|
175
|
+
basePriceSinapses: m.basePriceSinapses,
|
|
176
|
+
modes: m.modes,
|
|
177
|
+
durationsSec: m.durationsSec,
|
|
178
|
+
resolutions: m.resolutions,
|
|
179
|
+
hasAudio: m.hasAudio,
|
|
180
|
+
available: m.available,
|
|
181
|
+
comingSoon: m.comingSoon,
|
|
182
|
+
note: m.description,
|
|
183
|
+
}));
|
|
184
|
+
return {
|
|
185
|
+
count: models.length,
|
|
186
|
+
default: "sapiens-video-seedance",
|
|
187
|
+
models,
|
|
188
|
+
note: "basePriceSinapses é o PISO (config mais barata, já com override admin); o preço real escala por duração x resolução [x áudio]. available=false = 'em breve' (depende de env, ex: Omni). O 'sapiens-cena-visual' (Hyperframes) não aparece: é render local, fora deste MCP.",
|
|
189
|
+
};
|
|
190
|
+
}
|
|
164
191
|
const sessionToken = getSessionToken();
|
|
165
192
|
if (args.action === "demos") {
|
|
166
193
|
return await convexQuery("videoSpecs:mcpListMyDemoFilms", { sessionToken });
|
|
@@ -180,6 +207,15 @@ export async function video(args) {
|
|
|
180
207
|
showcaseOrder: args.showcaseOrder,
|
|
181
208
|
});
|
|
182
209
|
}
|
|
210
|
+
if (args.action === "status") {
|
|
211
|
+
if (!args.imageId) {
|
|
212
|
+
throw new Error("action=status exige imageId (o que create/generate devolveu).");
|
|
213
|
+
}
|
|
214
|
+
return await convexQuery("mcpExtras:mcpVideoStatus", {
|
|
215
|
+
sessionToken,
|
|
216
|
+
imageId: args.imageId,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
183
219
|
if (args.action === "create") {
|
|
184
220
|
if (!args.model) {
|
|
185
221
|
throw new Error("action=create exige model (ex: sapiens-video-seedance, sapiens-video-kling, sapiens-video-wan, sapiens-video-kling-motion).");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sapiens-mcp",
|
|
3
|
-
"version": "1.29.
|
|
3
|
+
"version": "1.29.2",
|
|
4
4
|
"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.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|