beplus-mcp 0.34.0 → 0.35.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/index.js CHANGED
@@ -22546,7 +22546,7 @@ ${BUDGET_BLOCKED_GUIDANCE}`);
22546
22546
  "generate_video",
22547
22547
  {
22548
22548
  title: "Gerar v\xEDdeo",
22549
- description: "Gera um v\xEDdeo curto usando o IA Lab da BePlus. LENTO (geralmente 1-5+ min). Aguarda at\xE9 ~2 min; se n\xE3o terminar, retorna o generation_id e o status \u2014 ent\xE3o use check_generation. Consome diamantes (mais caro para dura\xE7\xF5es/resolu\xE7\xF5es maiores). Suporta image-to-video (`first_frame_image`), \xFAltimo frame (`last_frame_image`), refer\xEAncias de imagem/v\xEDdeo/\xE1udio, prompt negativo, \xE1udio gerado e mais \u2014 os campos aceitos variam por modelo (consulte list_models). `kling-v2.6-motion-control` usa `first_frame_image` + `motion_video`. Nos modelos Seedance, refer\xEAncia com rosto de pessoa REAL \xE9 bloqueada pelo provedor padr\xE3o (BytePlus) \u2014 use `real_people_references: true` para rotear pra fal.ai, que aceita (custa mais caro). Kling e outros provedores n\xE3o t\xEAm essa op\xE7\xE3o." + TEAM_GATING_NOTE,
22549
+ description: "Gera um v\xEDdeo curto usando o IA Lab da BePlus. LENTO (geralmente 1-5+ min). Aguarda at\xE9 ~2 min; se n\xE3o terminar, retorna o generation_id e o status \u2014 ent\xE3o use check_generation. Consome diamantes (mais caro para dura\xE7\xF5es/resolu\xE7\xF5es maiores). Suporta image-to-video (`first_frame_image`), \xFAltimo frame (`last_frame_image`), refer\xEAncias de imagem/v\xEDdeo/\xE1udio, prompt negativo, \xE1udio gerado e mais \u2014 os campos aceitos variam por modelo (consulte list_models). `kling-v2.6-motion-control` usa `first_frame_image` + `motion_video`. Nos modelos Seedance d\xE1 pra escolher o provedor com `provider`: `byteplus` (padr\xE3o) ou `fal`. A BytePlus bloqueia refer\xEAncia com rosto de pessoa REAL; a fal.ai aceita (custa mais caro) e \xE9 a alternativa quando a BytePlus estiver inst\xE1vel. Kling e outros modelos n\xE3o t\xEAm essa op\xE7\xE3o." + TEAM_GATING_NOTE,
22550
22550
  inputSchema: {
22551
22551
  // Sem teto local — ver nota em generate_image. O Seedance não publica
22552
22552
  // limite; o Kling publica 2500 e o backend recusa dizendo quanto cortar.
@@ -22582,16 +22582,17 @@ ${BUDGET_BLOCKED_GUIDANCE}`);
22582
22582
  video_task_type: external_exports.enum(["auto", "reference", "edit", "extend"]).optional().describe(
22583
22583
  "O que fazer com os v\xEDdeos de refer\xEAncia (s\xF3 seedance-2.5): `reference` gera um v\xEDdeo novo; `edit` edita o original (exige 1 v\xEDdeo de 4-30s, a dura\xE7\xE3o vira a dele); `extend` estende o original. Sem isto o modelo adivinha e um par\xE2metro incompat\xEDvel s\xF3 falha DEPOIS da fila."
22584
22584
  ),
22585
- real_people_references: external_exports.boolean().optional().describe(
22586
- 'S\xF3 Seedance (2.0/2.0-fast/2.0-mini/2.5): quando true, roteia pra fal.ai em vez da BytePlus \u2014 a BytePlus recusa refer\xEAncia com pessoa real, a fal aceita (mais caro). `first_frame_image` + `last_frame_image` continuam funcionando (viram image-to-video da fal, com end frame). Com isto ligado, `output_format` e `video_task_type` (edit/extend) n\xE3o t\xEAm equivalente na fal e s\xE3o recusados antes de cobrar \u2014 e `seedance-2.0-fast` com `resolution: "480p"` tamb\xE9m, porque a fal n\xE3o publica pre\xE7o para essa combina\xE7\xE3o.'
22585
+ provider: external_exports.enum(["byteplus", "fal"]).optional().describe(
22586
+ "S\xF3 Seedance (2.0/2.0-fast/2.0-mini/2.5): qual empresa gera o v\xEDdeo. `byteplus` (padr\xE3o) \xE9 a API oficial da ByteDance. `fal` usa a fal.ai: aceita refer\xEAncia com pessoa real (a BytePlus recusa) e custa mais caro. Na fal, `first_frame_image` + `last_frame_image` funcionam (image-to-video com end frame) e o Draft Mode funciona no seedance-2.5; `output_format` e `video_task_type` (edit/extend) n\xE3o t\xEAm equivalente e s\xE3o recusados antes de cobrar, assim como `seedance-2.0-fast` em 480p (a fal n\xE3o publica pre\xE7o para essa combina\xE7\xE3o)."
22587
22587
  ),
22588
+ real_people_references: external_exports.boolean().optional().describe('OBSOLETO: use `provider: "fal"`. `true` aqui equivale a `provider: "fal"`.'),
22588
22589
  project: external_exports.string().max(64).optional().describe('Projeto (uuid OU code curto, ex.: "VRAO-26"). S\xF3 omita se o usu\xE1rio J\xC1 confirmou o projeto ativo nesta sess\xE3o.'),
22589
22590
  billing: BILLING_FIELD,
22590
22591
  draft: external_exports.boolean().optional().describe(
22591
- 'Draft Mode (s\xF3 seedance-2.5, lan\xE7ado pela BytePlus em 22/set/2026): gera um preview 480p barato para validar composi\xE7\xE3o/movimento antes de pagar o 1080p. Depois de check_generation mostrar "completed", o `draft_task_id` vem no retorno \u2014 \xE9 o que voc\xEA passa no pr\xF3ximo generate_video para render a vers\xE3o final, a mesma tomada, sem regenerar do zero.'
22592
+ 'Draft Mode (s\xF3 seedance-2.5, nos dois provedores): gera um preview 480p barato para validar composi\xE7\xE3o/movimento antes de pagar o 1080p. `resolution` fica em 480p (omita ou use "480p"). Depois de check_generation mostrar "completed", o `draft_task_id` e o provedor v\xEAm no retorno \u2014 \xE9 o que voc\xEA passa no pr\xF3ximo generate_video para render a vers\xE3o final, a mesma tomada, sem regenerar do zero.'
22592
22593
  ),
22593
22594
  draft_task_id: external_exports.string().min(1).optional().describe(
22594
- "Gera a vers\xE3o 1080p de um draft j\xE1 pronto (feito com `draft: true`). Passe aqui o `draft_task_id` que check_generation devolveu para aquele draft \u2014 N\xC3O o generation_id. Prompt/refs/seed/ratio/\xE1udio s\xE3o HERDADOS do draft, n\xE3o os reenvie. `duration` \xE9 OBRIGAT\xD3RIO e tem que ser exatamente a dura\xE7\xE3o do draft original (\xE9 o que precifica certo); `resolution` \xE9 sempre 1080p. Drafts expiram em 7 dias."
22595
+ "Gera a vers\xE3o 1080p de um draft j\xE1 pronto (feito com `draft: true`). Passe aqui o `draft_task_id` que check_generation devolveu para aquele draft \u2014 N\xC3O o generation_id \u2014 e o MESMO `provider` do draft (o id s\xF3 vale no provedor que gerou). Prompt/refs/seed/ratio/\xE1udio s\xE3o HERDADOS do draft, n\xE3o os reenvie. `duration` \xE9 OBRIGAT\xD3RIO e tem que ser exatamente a dura\xE7\xE3o do draft original (\xE9 o que precifica certo); `resolution` \xE9 sempre 1080p. Drafts expiram em 7 dias."
22595
22596
  )
22596
22597
  }
22597
22598
  },
@@ -22618,6 +22619,12 @@ ${BUDGET_BLOCKED_GUIDANCE}`);
22618
22619
  if (!args.draft_task_id && !args.prompt) {
22619
22620
  return errorResult("`prompt` \xE9 obrigat\xF3rio (s\xF3 pode faltar ao usar `draft_task_id`).");
22620
22621
  }
22622
+ if (args.draft && args.draft_task_id) {
22623
+ return errorResult("Use `draft` OU `draft_task_id`, n\xE3o os dois no mesmo pedido.");
22624
+ }
22625
+ if (args.draft && args.resolution && args.resolution !== "480p") {
22626
+ return errorResult('O Draft Mode s\xF3 gera em 480p \u2014 omita `resolution` ou use "480p".');
22627
+ }
22621
22628
  if (args.draft_task_id) {
22622
22629
  if (args.duration == null) {
22623
22630
  return errorResult("Ao usar `draft_task_id`, `duration` \xE9 obrigat\xF3rio \u2014 a mesma dura\xE7\xE3o do draft original.");
@@ -22629,21 +22636,24 @@ ${BUDGET_BLOCKED_GUIDANCE}`);
22629
22636
  if (!isSeedance25 && args.video_task_type && args.video_task_type !== "auto") {
22630
22637
  return errorResult(`Editar e estender v\xEDdeo s\xF3 existe no seedance-2.5 (voc\xEA pediu ${args.model}).`);
22631
22638
  }
22632
- if (args.real_people_references && !args.model?.startsWith("bytedance/seedance-")) {
22633
- return errorResult(`real_people_references s\xF3 existe nos modelos Seedance (voc\xEA pediu ${args.model}).`);
22639
+ const isSeedance = !!args.model?.startsWith("bytedance/seedance-");
22640
+ if ((args.provider || args.real_people_references) && !isSeedance) {
22641
+ return errorResult(`A escolha de provedor (provider/real_people_references) s\xF3 existe nos modelos Seedance (voc\xEA pediu ${args.model}).`);
22634
22642
  }
22635
- if (args.real_people_references) {
22643
+ if (args.provider === "byteplus" && args.real_people_references) {
22644
+ return errorResult('`real_people_references: true` usa a fal.ai e contradiz `provider: "byteplus"`. Use s\xF3 `provider`.');
22645
+ }
22646
+ const seedanceProvider = args.provider ?? (args.real_people_references ? "fal" : void 0);
22647
+ if (seedanceProvider === "fal") {
22636
22648
  const unsupported = [];
22637
22649
  if (args.output_format && args.output_format !== "mp4") unsupported.push("output_format");
22638
22650
  if (args.video_task_type && args.video_task_type !== "auto") unsupported.push("video_task_type (edit/extend)");
22639
22651
  if (args.model === "bytedance/seedance-2.0-fast" && args.resolution === "480p") {
22640
22652
  unsupported.push("resolution 480p (a fal n\xE3o publica pre\xE7o para seedance-2.0-fast nesta resolu\xE7\xE3o)");
22641
22653
  }
22642
- if (args.draft) unsupported.push("draft (Modo Rascunho \u2014 s\xF3 existe na BytePlus)");
22643
- if (args.draft_task_id) unsupported.push("draft_task_id (upscale de rascunho \u2014 s\xF3 existe na BytePlus)");
22644
22654
  if (unsupported.length > 0) {
22645
22655
  return errorResult(
22646
- `Com real_people_references, a fal.ai n\xE3o suporta: ${unsupported.join(", ")}. Remova essas op\xE7\xF5es.`
22656
+ `Com provider "fal", a fal.ai n\xE3o suporta: ${unsupported.join(", ")}. Remova essas op\xE7\xF5es.`
22647
22657
  );
22648
22658
  }
22649
22659
  }
@@ -22681,11 +22691,12 @@ ${BUDGET_BLOCKED_GUIDANCE}`);
22681
22691
  draft_task_id: args.draft_task_id,
22682
22692
  resolution: "1080p",
22683
22693
  duration: args.duration,
22684
- output_format: args.output_format
22694
+ output_format: args.output_format,
22695
+ seedanceProvider
22685
22696
  }) : compact({
22686
22697
  prompt: args.prompt,
22687
22698
  aspect_ratio: args.aspect_ratio ?? DEFAULTS.videoAspect,
22688
- resolution: args.resolution ?? DEFAULTS.videoResolution,
22699
+ resolution: args.resolution ?? (args.draft ? "480p" : DEFAULTS.videoResolution),
22689
22700
  duration: args.duration ?? DEFAULTS.videoDuration,
22690
22701
  negative_prompt: args.negative_prompt,
22691
22702
  mode: args.mode,
@@ -22703,7 +22714,7 @@ ${BUDGET_BLOCKED_GUIDANCE}`);
22703
22714
  output_format: args.output_format,
22704
22715
  omni_reference_task_type: args.video_task_type,
22705
22716
  draft: args.draft,
22706
- realPeopleReferences: args.real_people_references
22717
+ seedanceProvider
22707
22718
  });
22708
22719
  const start = await client.startGeneration(
22709
22720
  compact({
@@ -22761,9 +22772,10 @@ ${BUDGET_BLOCKED_GUIDANCE}`);
22761
22772
  const urls = outputUrls(status);
22762
22773
  const blocks = await buildImageBlocks(urls, cfg);
22763
22774
  const list = urls.map((u, i) => `${i + 1}. ${u}`).join("\n") || "(sem URLs)";
22775
+ const draftProvider = status.seedance_provider ?? "byteplus";
22764
22776
  const draftHint = status.draft_task_id ? `
22765
22777
 
22766
- \u{1F3AC} Draft pronto \u2014 pra gerar em 1080p, chame generate_video de novo com draft_task_id: "${status.draft_task_id}" (mesma duration deste draft).` : "";
22778
+ \u{1F3AC} Draft pronto (provedor: ${draftProvider === "fal" ? "fal.ai" : "BytePlus"}) \u2014 pra gerar em 1080p, chame generate_video de novo com draft_task_id: "${status.draft_task_id}", provider: "${draftProvider}" e a mesma duration deste draft.` : "";
22767
22779
  return { content: [{ type: "text", text: `\u2705 Pronto.
22768
22780
  ${list}${flagsLine(status)}${draftHint}` }, ...blocks] };
22769
22781
  }
@@ -23871,6 +23883,7 @@ Limites simult\xE2neos por usu\xE1rio: imagem=${m.limits.perUserMaxImage}, v\xED
23871
23883
  quality: external_exports.string().optional(),
23872
23884
  aspect_ratio: external_exports.string().optional().describe("Seedream Pro: a propor\xE7\xE3o muda os pixels e a faixa de pre\xE7o."),
23873
23885
  num_images: external_exports.number().int().min(1).optional().describe("Seedream Pro: imagens por pedido; cada uma \xE9 cobrada."),
23886
+ provider: external_exports.enum(["byteplus", "fal"]).optional().describe("Seedance: provedor que vai gerar (padr\xE3o byteplus). `fal` tem pre\xE7o pr\xF3prio, mais caro."),
23874
23887
  // Upscale: o preço não sai de uma chave fixa — vem das medidas do
23875
23888
  // arquivo (megapixel de saída na imagem, bloco de 10s no vídeo). Sem
23876
23889
  // elas o backend responde pelo padrão de 1024²/10s, que não é o preço
@@ -23914,6 +23927,7 @@ Limites simult\xE2neos por usu\xE1rio: imagem=${m.limits.perUserMaxImage}, v\xED
23914
23927
  quality: args.quality,
23915
23928
  aspect_ratio: args.aspect_ratio,
23916
23929
  num_images: args.num_images,
23930
+ seedance_provider: args.provider === "fal" ? "fal" : void 0,
23917
23931
  upscale_factor: args.upscale_factor,
23918
23932
  model_variant: args.model_variant,
23919
23933
  source_width: width2,
@@ -27037,7 +27051,7 @@ N\xF3s: ${Object.entries(ids).map(([k, v]) => `${k}=${v}`).join(" \xB7 ")}` : ""
27037
27051
  import { createRequire } from "module";
27038
27052
  var require2 = createRequire(import.meta.url);
27039
27053
  function readVersion() {
27040
- if ("0.34.0") return "0.34.0";
27054
+ if ("0.35.0") return "0.35.0";
27041
27055
  try {
27042
27056
  const pkg = require2("../package.json");
27043
27057
  return pkg.version ?? "0.0.0-unknown";