@agimon-ai/video-editor-mcp 0.6.0 → 0.7.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/cli.cjs +1 -1
- package/dist/cli.mjs +1 -1
- package/package.json +4 -4
package/dist/cli.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const e=require(`./stdio-Dwc6SWvA.cjs`);let t=require(`node:child_process`),n=require(`node:path`);n=e.m(n);let r=require(`commander`),i=require(`node:fs`);i=e.m(i);let a=require(`@agimon-ai/foundation-port-registry`),o=require(`@agimon-ai/foundation-process-registry`),s=require(`chalk`);s=e.m(s);var c=`0.
|
|
2
|
+
const e=require(`./stdio-Dwc6SWvA.cjs`);let t=require(`node:child_process`),n=require(`node:path`);n=e.m(n);let r=require(`commander`),i=require(`node:fs`);i=e.m(i);let a=require(`@agimon-ai/foundation-port-registry`),o=require(`@agimon-ai/foundation-process-registry`),s=require(`chalk`);s=e.m(s);var c=`0.6.0`;const l=[`pnpm-workspace.yaml`,`nx.json`,`.git`],u=`video-editor-mcp-http`,d=`tool`;function f(e=process.cwd()){let t=n.default.resolve(e);for(;;){for(let e of l)if((0,i.existsSync)(n.default.join(t,e)))return t;let e=n.default.dirname(t);if(e===t)return process.cwd();t=e}}const p=new r.Command(`http-serve`).description(`Start Remotion Studio for video editing`).option(`-p, --port <port>`,`Port to run Remotion Studio on`,String(a.DEFAULT_PORT_RANGE.min)).action(async e=>{let r;try{let i=Number.parseInt(e.port,10),c=new a.PortRegistryService(process.env.PORT_REGISTRY_PATH),l=f(),p=i?{min:i,max:i}:a.DEFAULT_PORT_RANGE,m=await c.reservePort({repositoryPath:l,serviceName:u,serviceType:d,preferredPort:i||a.DEFAULT_PORT_RANGE.min,portRange:p,pid:process.pid,host:`127.0.0.1`,force:!0});if(!m.success||!m.record)throw Error(m.error||`Failed to reserve port ${i}`);let h=m.record.port;r=await(0,o.createProcessLease)({repositoryPath:l,serviceName:u,serviceType:d,pid:process.pid,port:h,host:`127.0.0.1`,command:process.argv[1],args:process.argv.slice(2)});let g=n.default.resolve(__dirname,`..`);console.error(s.default.green(`Starting Remotion Studio on port ${h}...`)),console.error(s.default.gray(` Working directory: ${g}`));let _=(0,t.spawn)(n.default.join(g,`node_modules`,`.bin`,`remotion`),[`studio`,`--port`,String(h)],{stdio:`inherit`,cwd:g});_.on(`error`,e=>{console.error(s.default.red(`Failed to start Remotion Studio: ${e.message}`)),process.exit(1)});let v=async e=>{_.kill(e),await r?.release(),await c.releasePort({repositoryPath:l,serviceName:u,serviceType:d,pid:process.pid}),process.exit(0)};process.on(`SIGINT`,()=>v(`SIGINT`)),process.on(`SIGTERM`,()=>v(`SIGTERM`))}catch(e){await r?.release(),console.error(`Error executing http-serve:`,e),process.exit(1)}}),m=[`pnpm-workspace.yaml`,`nx.json`,`.git`];function h(e=process.cwd()){let t=n.default.resolve(e);for(;;){for(let e of m)if((0,i.existsSync)(n.default.join(t,e)))return t;let e=n.default.dirname(t);if(e===t)return process.cwd();t=e}}async function g(e,t){await e.start();let n=async n=>{console.error(`\nReceived ${n}, shutting down gracefully...`);try{await e.stop(),await t?.(),process.exit(0)}catch(e){console.error(`Error during shutdown:`,e),process.exit(1)}};process.on(`SIGINT`,()=>n(`SIGINT`)),process.on(`SIGTERM`,()=>n(`SIGTERM`))}const _=new r.Command(`mcp-serve`).description(`Start MCP server with specified transport`).option(`-t, --type <type>`,`Transport type: stdio`,`stdio`).action(async t=>{let n;try{let r=t.type.toLowerCase(),i=h();if(r===`stdio`){let t=new e.t(e.n(e.r()));n=await(0,o.createProcessLease)({repositoryPath:i,serviceName:`video-editor-mcp-stdio`,pid:process.pid,metadata:{transport:`stdio`}}),await g(t,async()=>{await n?.release()})}else console.error(`Unknown transport type: ${r}. Use: stdio`),process.exit(1)}catch(e){await n?.release(),console.error(`Failed to start MCP server:`,e),process.exit(1)}}),v=new r.Command(`render`).description(`Render a video from JSON props file`).requiredOption(`-i, --input <path>`,`Path to JSON props file`).requiredOption(`-o, --output <path>`,`Output video file path`).option(`-c, --composition <id>`,`Composition ID`,`Main`).option(`--codec <codec>`,`Video codec (h264, h265, vp8, vp9)`,`h264`).action(async t=>{try{process.stderr.write(s.default.blue(`🎬 Starting video render...
|
|
3
3
|
`)),process.stderr.write(s.default.gray(` Input: ${t.input}\n`)),process.stderr.write(s.default.gray(` Output: ${t.output}\n`)),process.stderr.write(s.default.gray(` Composition: ${t.composition}\n`)),process.stderr.write(s.default.gray(` Codec: ${t.codec}\n`)),i.default.existsSync(t.input)||(process.stderr.write(s.default.red(`Error: Input file not found: ${t.input}\n`)),process.exit(1));let n=i.default.readFileSync(t.input,`utf-8`),r=JSON.parse(n),a=e.r().get(e.d.RenderService);process.stderr.write(s.default.blue(`📦 Bundling Remotion project...
|
|
4
4
|
`));let o=await a.render({compositionId:t.composition,inputProps:r,outputPath:t.output,codec:t.codec});process.stderr.write(s.default.green(`✓ Video rendered successfully: ${o.outputPath}\n`))}catch(e){process.stderr.write(s.default.red(`Error rendering video: ${e}\n`)),process.exit(1)}});async function y(){let e=new r.Command;e.name(`video-editor-mcp`).description(`MCP server for video editing with Remotion`).version(c),e.addCommand(_),e.addCommand(p),e.addCommand(v),await e.parseAsync(process.argv)}y();
|
|
5
5
|
//# sourceMappingURL=cli.cjs.map
|
package/dist/cli.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{d as e,n as t,r as n,t as r}from"./stdio-B6Hg5voC.mjs";import{spawn as i}from"node:child_process";import a from"node:path";import{Command as o}from"commander";import s,{existsSync as c}from"node:fs";import{DEFAULT_PORT_RANGE as l,PortRegistryService as u}from"@agimon-ai/foundation-port-registry";import{createProcessLease as d}from"@agimon-ai/foundation-process-registry";import f from"chalk";var p=`0.
|
|
2
|
+
import{d as e,n as t,r as n,t as r}from"./stdio-B6Hg5voC.mjs";import{spawn as i}from"node:child_process";import a from"node:path";import{Command as o}from"commander";import s,{existsSync as c}from"node:fs";import{DEFAULT_PORT_RANGE as l,PortRegistryService as u}from"@agimon-ai/foundation-port-registry";import{createProcessLease as d}from"@agimon-ai/foundation-process-registry";import f from"chalk";var p=`0.6.0`;const m=[`pnpm-workspace.yaml`,`nx.json`,`.git`],h=`video-editor-mcp-http`,g=`tool`;function _(e=process.cwd()){let t=a.resolve(e);for(;;){for(let e of m)if(c(a.join(t,e)))return t;let e=a.dirname(t);if(e===t)return process.cwd();t=e}}const v=new o(`http-serve`).description(`Start Remotion Studio for video editing`).option(`-p, --port <port>`,`Port to run Remotion Studio on`,String(l.min)).action(async e=>{let t;try{let n=Number.parseInt(e.port,10),r=new u(process.env.PORT_REGISTRY_PATH),o=_(),s=n?{min:n,max:n}:l,c=await r.reservePort({repositoryPath:o,serviceName:h,serviceType:g,preferredPort:n||l.min,portRange:s,pid:process.pid,host:`127.0.0.1`,force:!0});if(!c.success||!c.record)throw Error(c.error||`Failed to reserve port ${n}`);let p=c.record.port;t=await d({repositoryPath:o,serviceName:h,serviceType:g,pid:process.pid,port:p,host:`127.0.0.1`,command:process.argv[1],args:process.argv.slice(2)});let m=a.resolve(import.meta.dirname,`..`);console.error(f.green(`Starting Remotion Studio on port ${p}...`)),console.error(f.gray(` Working directory: ${m}`));let v=i(a.join(m,`node_modules`,`.bin`,`remotion`),[`studio`,`--port`,String(p)],{stdio:`inherit`,cwd:m});v.on(`error`,e=>{console.error(f.red(`Failed to start Remotion Studio: ${e.message}`)),process.exit(1)});let y=async e=>{v.kill(e),await t?.release(),await r.releasePort({repositoryPath:o,serviceName:h,serviceType:g,pid:process.pid}),process.exit(0)};process.on(`SIGINT`,()=>y(`SIGINT`)),process.on(`SIGTERM`,()=>y(`SIGTERM`))}catch(e){await t?.release(),console.error(`Error executing http-serve:`,e),process.exit(1)}}),y=[`pnpm-workspace.yaml`,`nx.json`,`.git`];function b(e=process.cwd()){let t=a.resolve(e);for(;;){for(let e of y)if(c(a.join(t,e)))return t;let e=a.dirname(t);if(e===t)return process.cwd();t=e}}async function x(e,t){await e.start();let n=async n=>{console.error(`\nReceived ${n}, shutting down gracefully...`);try{await e.stop(),await t?.(),process.exit(0)}catch(e){console.error(`Error during shutdown:`,e),process.exit(1)}};process.on(`SIGINT`,()=>n(`SIGINT`)),process.on(`SIGTERM`,()=>n(`SIGTERM`))}const S=new o(`mcp-serve`).description(`Start MCP server with specified transport`).option(`-t, --type <type>`,`Transport type: stdio`,`stdio`).action(async e=>{let i;try{let a=e.type.toLowerCase(),o=b();if(a===`stdio`){let e=new r(t(n()));i=await d({repositoryPath:o,serviceName:`video-editor-mcp-stdio`,pid:process.pid,metadata:{transport:`stdio`}}),await x(e,async()=>{await i?.release()})}else console.error(`Unknown transport type: ${a}. Use: stdio`),process.exit(1)}catch(e){await i?.release(),console.error(`Failed to start MCP server:`,e),process.exit(1)}}),C=new o(`render`).description(`Render a video from JSON props file`).requiredOption(`-i, --input <path>`,`Path to JSON props file`).requiredOption(`-o, --output <path>`,`Output video file path`).option(`-c, --composition <id>`,`Composition ID`,`Main`).option(`--codec <codec>`,`Video codec (h264, h265, vp8, vp9)`,`h264`).action(async t=>{try{process.stderr.write(f.blue(`🎬 Starting video render...
|
|
3
3
|
`)),process.stderr.write(f.gray(` Input: ${t.input}\n`)),process.stderr.write(f.gray(` Output: ${t.output}\n`)),process.stderr.write(f.gray(` Composition: ${t.composition}\n`)),process.stderr.write(f.gray(` Codec: ${t.codec}\n`)),s.existsSync(t.input)||(process.stderr.write(f.red(`Error: Input file not found: ${t.input}\n`)),process.exit(1));let r=s.readFileSync(t.input,`utf-8`),i=JSON.parse(r),a=n().get(e.RenderService);process.stderr.write(f.blue(`📦 Bundling Remotion project...
|
|
4
4
|
`));let o=await a.render({compositionId:t.composition,inputProps:i,outputPath:t.output,codec:t.codec});process.stderr.write(f.green(`✓ Video rendered successfully: ${o.outputPath}\n`))}catch(e){process.stderr.write(f.red(`Error rendering video: ${e}\n`)),process.exit(1)}});async function w(){let e=new o;e.name(`video-editor-mcp`).description(`MCP server for video editing with Remotion`).version(p),e.addCommand(S),e.addCommand(v),e.addCommand(C),await e.parseAsync(process.argv)}w();export{};
|
|
5
5
|
//# sourceMappingURL=cli.mjs.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agimon-ai/video-editor-mcp",
|
|
3
3
|
"description": "MCP server for video editing with Remotion",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.7.0",
|
|
5
5
|
"license": "AGPL-3.0",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"mcp",
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
"reflect-metadata": "0.2.2",
|
|
41
41
|
"remotion": "4.0.447",
|
|
42
42
|
"zod": "4.3.6",
|
|
43
|
-
"@agimon-ai/foundation-
|
|
44
|
-
"@agimon-ai/foundation-
|
|
45
|
-
"@agimon-ai/foundation-
|
|
43
|
+
"@agimon-ai/foundation-process-registry": "0.7.0",
|
|
44
|
+
"@agimon-ai/foundation-port-registry": "0.7.0",
|
|
45
|
+
"@agimon-ai/foundation-validator": "0.4.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/node": "25.6.0",
|