@amg555/frameforge-mcp 2.3.3 → 2.3.4

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/CHANGELOG.md CHANGED
@@ -4,6 +4,29 @@ All notable changes to FrameForge are documented here.
4
4
 
5
5
  ---
6
6
 
7
+ ## [2.3.4] — 2026-11-09
8
+
9
+ ### Added
10
+ - **Full Code-Driven Video Production Harness** (`src/harness/`, `bin/harness.mjs`, `npx frameforge-harness`):
11
+ - H1 Browser resolution & GPU auto-selection (Direct3D11 / Metal / ANGLE)
12
+ - H2 Deterministic frame stepper & virtual clock injection
13
+ - H3 Resumable atomic frame worker pool (`.tmp` + `renameSync`, <1000B corruption checks)
14
+ - H4 Visual review generators: contact sheets, motion strips, 9:16 mobile crop previews
15
+ - H5 3-point history-leak & frame purity verification gate ($a === b \land a === c$) with `frames_sha256` digest
16
+ - H6 Pixel luminance and blind-spot frame math (blank, blown, corner-confined detection)
17
+ - H7 Determinism primitives in `engine.js` (`boilSeed`, `kf`, `onTwos`, `seg`, `pulse`, `shots`)
18
+ - H8 Broadcast-grade BT.709 color encoding & x264 VUI parameter tags
19
+ - H9 Unified CLI commands (`doctor`, `storyboard`, `verify`, `sheet`, `strip`, `crop`, `pixels`, `frames`, `encode`, `all`)
20
+ - **MCP `render_animation` parity**: added `verify`, `doctor`, `pixels` modes and structured `purityReport` return object.
21
+ - **VoxForge**: added `VOXFORGE_URL` detection to system doctor and documented in all provider tables.
22
+
23
+ ### Fixed
24
+ - Fixed relative module imports in scaffolded projects (`./browser.mjs`, etc.).
25
+ - Enforced BT.709 color tags across all procedural scene fallbacks in `renderer.js`.
26
+ - Included `plugins/` skill templates and assets in npm package distribution.
27
+
28
+ ---
29
+
7
30
  ## [2.3.2] — 2026-11-06
8
31
 
9
32
  ### Added
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  [![npm](https://img.shields.io/npm/v/@amg555/frameforge-mcp.svg?label=npm)](https://www.npmjs.com/package/@amg555/frameforge-mcp)
10
10
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
11
11
  [![Node.js](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg)](https://nodejs.org/)
12
- [![Version](https://img.shields.io/badge/version-2.3.3-blue.svg)](CHANGELOG.md)
12
+ [![Version](https://img.shields.io/badge/version-2.3.4-blue.svg)](CHANGELOG.md)
13
13
  [![MCP Spec](https://img.shields.io/badge/MCP-2024--11--05-blue.svg)](https://modelcontextprotocol.io/)
14
14
  [![Tests](https://img.shields.io/badge/tests-512%20passing-brightgreen.svg)](#testing)
15
15
 
@@ -219,6 +219,7 @@ Switch any provider with one `.env` change — no code changes.
219
219
  | Provider | Free? | Key needed |
220
220
  |----------|-------|------------|
221
221
  | `edge-tts` | ✅ free, offline | none — **default** |
222
+ | `voxforge` | ✅ free, local/private | none — `VOXFORGE_URL` ([VoxForge](https://github.com/AMG555/VoxForge)) |
222
223
  | `elevenlabs` | paid | `ELEVENLABS_API_KEY` |
223
224
  | `azure` | paid | `AZURE_SPEECH_KEY` + `AZURE_SPEECH_REGION` |
224
225
  | `openai` | paid | `OPENAI_API_KEY` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amg555/frameforge-mcp",
3
- "version": "2.3.3",
3
+ "version": "2.3.4",
4
4
  "description": "FrameForge — AI video production engine for agentic IDEs. npx @amg555/frameforge-mcp. FFmpeg + TTS run on your machine. 17 MCP tools.",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -41,7 +41,7 @@ IDE Agent (IBM Bob / Codex / opencode / Cursor / Windsurf / Claude Code)
41
41
  │ LLM provider: PROVIDER_LLM=groq|openrouter|anthropic|gemini
42
42
  │ |mistral|together|cerebras|openai
43
43
  │ |ollama|webhook
44
- │ TTS provider: PROVIDER_TTS=edge-tts|elevenlabs|azure|openai|webhook
44
+ │ TTS provider: PROVIDER_TTS=edge-tts|voxforge|elevenlabs|azure|openai|webhook
45
45
  │ Visuals: Code-driven animations (default) + user media (video_path / image_path)
46
46
  │
47
47
  ▼ Optional: queue_full_pipeline
@@ -52,6 +52,17 @@ PROVIDER_TTS=edge-tts
52
52
  # Voice list: edge-tts --list-voices
53
53
  ```
54
54
 
55
+ ### voxforge (free, private multi-engine neural TTS & voice cloning in Rust)
56
+ ```bash
57
+ PROVIDER_TTS=voxforge
58
+ VOXFORGE_URL=http://localhost:5005 # or your self-hosted VoxForge workstation URL
59
+ # Optional:
60
+ VOXFORGE_KEY=... # optional auth token if enabled
61
+ VOXFORGE_VOICE=default # voice/clone reference
62
+ VOXFORGE_MODEL=voxforge-v1 # engine model (XTTS, Piper, Kokoro, Whisper)
63
+ ```
64
+ Repo: [AMG555/VoxForge](https://github.com/AMG555/VoxForge) — local, private neural TTS & voice cloning workstation.
65
+
55
66
  ### elevenlabs (voice cloning)
56
67
  ```bash
57
68
  PROVIDER_TTS=elevenlabs
@@ -20,7 +20,7 @@ check('batch handling', code.includes('Array.isArray(body)'));
20
20
  check('ping handler', code.includes("method === 'ping'"));
21
21
  check('notifications/init', code.includes("notifications/initialized"));
22
22
  check('body size limit', code.includes('MAX_BODY_BYTES'));
23
- check('SERVER_INFO version 2.3.3', code.includes("version: '2.3.3'"));
23
+ check('SERVER_INFO version 2.3.4', code.includes("version: '2.3.4'"));
24
24
  check('18 tools defined (incl get_job_status)', code.includes('get_job_status'));
25
25
  check('export_to_editor tool defined', code.includes('export_to_editor'));
26
26
  check('voxforge TTS provider', code.includes('voxforge'));
@@ -293,7 +293,7 @@ check('cf-worker has checkRateLimit', cfWorker.includes('checkRateLimit'));
293
293
  check('cf-worker hashes token (SHA-256)', cfWorker.includes('SHA-256'));
294
294
  check('cf-worker uses RATE_LIMITS KV', cfWorker.includes('env.RATE_LIMITS'));
295
295
  check('cf-worker returns 429 on limit', cfWorker.includes('429'));
296
- check('cf-worker version 2.3.3', cfWorker.includes("'2.3.3'"));
296
+ check('cf-worker version 2.3.4', cfWorker.includes("'2.3.4'"));
297
297
  check('wrangler.toml has kv_namespaces',fs.readFileSync('./cloudflare-mcp/wrangler.toml','utf8').includes('kv_namespaces'));
298
298
 
299
299
  // ── plugins/skills present ────────────────────────────────────────────────
package/src/cli/doctor.js CHANGED
@@ -73,19 +73,26 @@ if (ffprobe.status === 0) {
73
73
  hasCriticalFailure = true;
74
74
  }
75
75
 
76
- // 4. Voice Engine (edge-tts or Cloud API)
76
+ // 4. Voice Engine (edge-tts, VoxForge, or Cloud API)
77
77
  const edgeTts = spawnSync('edge-tts', ['--version'], { encoding: 'utf8', timeout: 5000, shell: process.platform === 'win32' });
78
- const hasCloudTts = Boolean(process.env.ELEVENLABS_API_KEY || process.env.AZURE_SPEECH_KEY || process.env.OPENAI_API_KEY || process.env.CUSTOM_TTS_URL);
78
+ const hasCloudTts = Boolean(
79
+ process.env.ELEVENLABS_API_KEY ||
80
+ process.env.AZURE_SPEECH_KEY ||
81
+ process.env.OPENAI_API_KEY ||
82
+ process.env.CUSTOM_TTS_URL ||
83
+ process.env.WEBHOOK_TTS_URL ||
84
+ process.env.VOXFORGE_URL
85
+ );
79
86
 
80
87
  if (edgeTts.status === 0) {
81
88
  pass('Voice Engine', `edge-tts CLI available (${(edgeTts.stdout || '').trim()})`);
82
89
  } else if (hasCloudTts) {
83
- pass('Voice Engine', 'Cloud TTS API configured via environment');
90
+ pass('Voice Engine', 'TTS provider (VoxForge or Cloud API) configured via environment');
84
91
  } else {
85
92
  warn(
86
93
  'Voice Engine',
87
- 'Neither edge-tts CLI nor cloud TTS API detected',
88
- 'Run "pip install edge-tts" for free offline voiceover, or set OPENAI_API_KEY / ELEVENLABS_API_KEY in .env'
94
+ 'Neither edge-tts CLI nor configured TTS provider detected',
95
+ 'Run "pip install edge-tts" for free offline voiceover, set VOXFORGE_URL (VoxForge), or set OPENAI_API_KEY / ELEVENLABS_API_KEY in .env'
89
96
  );
90
97
  }
91
98
 
@@ -1372,7 +1372,7 @@ Operations (used with action="edit"):
1372
1372
 
1373
1373
  const SERVER_INFO = {
1374
1374
  name: 'video-pipeline',
1375
- version: '2.3.3',
1375
+ version: '2.3.4',
1376
1376
  };
1377
1377
 
1378
1378
  const CAPABILITIES = {