@writepanda/mcp 1.15.0 → 1.17.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.
Files changed (2) hide show
  1. package/bin/server.mjs +15 -13
  2. package/package.json +1 -1
package/bin/server.mjs CHANGED
@@ -242,8 +242,7 @@ const TOOLS = [
242
242
  media: { type: "string", description: "Absolute path to video file" },
243
243
  atIndex: {
244
244
  type: "number",
245
- description:
246
- "Insert before this zero-based clip index. Omit to append at the end.",
245
+ description: "Insert before this zero-based clip index. Omit to append at the end.",
247
246
  },
248
247
  expectedRevision: { type: "number" },
249
248
  },
@@ -305,7 +304,7 @@ const TOOLS = [
305
304
  designType: {
306
305
  type: "string",
307
306
  description:
308
- "name-bar | slash-reveal | center-stack | minimal-underline | box-reveal | corner-brackets | border-frame | split-horizontal",
307
+ "slash-reveal | center-stack | split-horizontal | name-bar | border-frame | minimal-underline | box-reveal | corner-brackets. Default: slash-reveal.",
309
308
  },
310
309
  accentColor: { type: "string", description: "Hex accent/background color" },
311
310
  textColor: { type: "string", description: "Hex text color. Default #ffffff" },
@@ -605,8 +604,7 @@ const TOOLS = [
605
604
  },
606
605
  resolution: {
607
606
  type: "string",
608
- description:
609
- "Output resolution: 4k | 1080p | 720p | 480p | source. Default source.",
607
+ description: "Output resolution: 4k | 1080p | 720p | 480p | source. Default source.",
610
608
  },
611
609
  gifFrameRate: {
612
610
  type: "number",
@@ -614,8 +612,7 @@ const TOOLS = [
614
612
  },
615
613
  gifSize: {
616
614
  type: "string",
617
- description:
618
- "GIF size preset: small | medium | large. Only used when format is gif.",
615
+ description: "GIF size preset: small | medium | large. Only used when format is gif.",
619
616
  },
620
617
  expectedRevision: { type: "number" },
621
618
  },
@@ -957,7 +954,7 @@ const TOOLS = [
957
954
  {
958
955
  name: "motion_list",
959
956
  description:
960
- "List every motion-graphic template (id, name, slots, defaults, aspectRatios). 19 templates ship today.",
957
+ "List every motion-graphic template (id, name, slots, defaults, aspectRatios). 20 templates ship today, including youtube-lower-third for YouTube-style name plates.",
961
958
  inputSchema: { type: "object", properties: {} },
962
959
  command: "motion.list",
963
960
  },
@@ -971,7 +968,7 @@ const TOOLS = [
971
968
  {
972
969
  name: "motion_generate",
973
970
  description:
974
- "Render a motion graphic asynchronously. Returns { jobId, outputPath }; call job_wait. Output is an MP4 you can pass to project_add_motion_graphic.",
971
+ "Render a motion graphic asynchronously. Returns { jobId, outputPath }; call job_wait. Output is an MP4 you can pass to project_add_motion_graphic. Use templateId=youtube-lower-third (slots: channelName, handle, accentColor) for YouTube-style name plates with avatar + Subscribe button.",
975
972
  inputSchema: {
976
973
  type: "object",
977
974
  properties: {
@@ -987,7 +984,7 @@ const TOOLS = [
987
984
  {
988
985
  name: "motion_render_html",
989
986
  description:
990
- "Render arbitrary HTML/CSS/JS to an MP4. Use this when the bundled motion-graphic templates don't fit the brief. Pass either inline `html` or a `htmlPath`. Animations should auto-start on DOMContentLoaded. IMPORTANT: renders are sequential — call job_wait to completion before starting another render, or you'll get a RENDER_BUSY error. Async — returns { jobId, outputPath }; poll job_wait for the final MP4.",
987
+ "Render arbitrary HTML/CSS/JS to video. Use this when the bundled motion-graphic templates don't fit the brief — you write the HTML, the Chromium → capturePage → FFmpeg pipeline does the rest. Pass either inline `html` or a `htmlPath`. Animations should auto-start on DOMContentLoaded. Set `transparent: true` to get a WebM with alpha channel for overlays (lower thirds, watermarks, name plates) that composite over existing video. IMPORTANT: renders are sequential — call job_wait to completion before starting another render, or you'll get a RENDER_BUSY error. Async — returns { jobId, outputPath }; poll job_wait for the final file.",
991
988
  inputSchema: {
992
989
  type: "object",
993
990
  properties: {
@@ -1011,7 +1008,7 @@ const TOOLS = [
1011
1008
  audioPath: {
1012
1009
  type: "string",
1013
1010
  description:
1014
- "Absolute path to an audio file (mp3, wav, aac, m4a) to mux into the MP4. Without this the output is silent.",
1011
+ "Absolute path to an audio file (mp3, wav, aac, m4a) to mux into the MP4. Without this the output is silent. Ignored when transparent: true.",
1015
1012
  },
1016
1013
  audioVolume: {
1017
1014
  type: "number",
@@ -1021,7 +1018,12 @@ const TOOLS = [
1021
1018
  type: "array",
1022
1019
  items: { type: "string" },
1023
1020
  description:
1024
- "Absolute paths to local files to stage alongside inline HTML. Reference them by basename: pass [\"/path/logo.png\"] and use <img src=\"logo.png\"> in the HTML. Avoids base64-encoding large images.",
1021
+ 'Absolute paths to local files to stage alongside inline HTML. Reference them by basename: pass ["/path/logo.png"] and use <img src="logo.png"> in the HTML. Avoids base64-encoding large images.',
1022
+ },
1023
+ transparent: {
1024
+ type: "boolean",
1025
+ description:
1026
+ "Render with a transparent background (VP9/yuva420p WebM instead of H.264 MP4). Use for overlays — lower thirds, watermarks, bug logos, name plates — anything that composites on top of existing video without a white/black fill. The returned outputPath will have a .webm extension. Note: audioPath is ignored in transparent mode.",
1025
1027
  },
1026
1028
  },
1027
1029
  },
@@ -1159,7 +1161,7 @@ const TOOLS = [
1159
1161
  {
1160
1162
  name: "export_start",
1161
1163
  description:
1162
- "Render the project to MP4 via the same Skia native render-helper the editor's Export button uses. ASYNC — returns { jobId, outputPath }; call job_wait. Honours every region/style/caption/FX/lower-third/motion-graphic.",
1164
+ "Render the project to MP4 via the same Skia native render-helper the editor's Export button uses. ASYNC — returns { jobId, outputPath }; call job_wait. Honours every region/style/caption/FX/lower-third/motion-graphic. Video overlays (motion graphics added via project_add_motion_graphic) are automatically composited in a post-process FFmpeg pass — both opaque MP4 and transparent WebM/VP9+alpha overlays are supported; no extra call needed.",
1163
1165
  inputSchema: {
1164
1166
  type: "object",
1165
1167
  properties: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@writepanda/mcp",
3
- "version": "1.15.0",
3
+ "version": "1.17.0",
4
4
  "description": "Model Context Protocol server for PandaStudio. Exposes the desktop video editor's automation surface to Cursor, Continue, Cline, Claude Desktop, and any MCP-compliant client.",
5
5
  "keywords": [
6
6
  "pandastudio",