ronak-create/FableCut 发布 FableCut v1.10.0 — pro audio: mixer, effects, buses, noise reduction; agents can edit and export
Added Mixer. A Mixer tab beside the Inspector: one strip per audio track with a fader (console taper, unity at ¾ throw, double-click for 0 dB, or type a level), pan, mute, solo and a meter, plus a master fader with a live LUFS readout. Levels are saved as tracks[].gain / tracks[].pan and master.gain in project.json , written only when they differ from 0. Clip gain ( props.gain , dB): a trim before volume, so volume keyframes and fades keep working on top of it. Channels ( props.channelMode ): stereo, mono (L+R folded to one channel), left, right or swap, per clip. Normalize. In the inspector, pick a target (−14 LUFS streaming, −16 LUFS podcast, −23 LUFS broadcast, −1 dBFS peak) and Apply : the selected clips are measured (ITU-R BS.1770 integrated loudness with EBU R128 gating, or sample peak) and their clip gain set to hit it. Linked stems are measured together and share one gain. MCP: fablecut_normalize_audio does the same from an agent (needs ffmpeg), with the same measurement as the editor. fablecut_patch_project gains a setTrack op for track faders / pan and a master field on setProject ; the compact project view shows a MIX: line when any level is off 0. Audio effects. Effect chains on audio clips (Inspector → Audio effects), tracks and the master (Mixer → FX): EQ (3-band), high-pass, low-pass, compressor, limiter (brickwall, 5 ms lookahead), noise gate, delay, reverb, distortion and stereo width. Reorder, bypass or tweak each effect; preview and export run the same chain. Saved as fx on clips, tracks[].fx and master.fx . Audio presets. Voice: Clean voice, Podcast, Radio, Deep voice (EQ-based), Telephone. Music: Cinematic, Wide, Muffled. A preset writes ordinary effects into the chain, so it can be adjusted afterwards. MCP: fablecut_patch_project gains setFx (a chain or a preset on a clip and its linked stems, a track or the master; validated). The compact view lists chains. The MCPB bundle manifest now lists every tool ( fablecut_encode_profiles was missing). Volume line. Audio clips draw their volume as a line: drag it to change the level (with keyframes, the two around the pointer move together), Ctrl/Cmd-click to add a keyframe, drag a point to move it, Alt-click or double-click to remove one. Edits apply to linked stems too. Fade grips and fade curves. Drag the grip in a clip's top corner to fade in or out. Audio fades take a curve : constant power, constant gain or exponential (inspector → Transition), drawn as the real curve on the clip. Fades without a curve sound exactly as before. Crossfade (Shift+D, or the clip menu). Crossfades the audio cut next to the selection, or the one at the playhead: the overlap is borrowed from spare media on both sides of the cut, so nothing downstream moves; linked picture dissolves in. Overlapping audio that is crossfaded no longer shows the overlap warning. Auto-duck. In the inspector (or the clip menu): the selected music dips by the chosen amount wherever the dialogue tracks have sound, ramping down just before and back up after, with short pauses bridged. Written as a new duck keyframe channel (dB) on top of volume, so the music's own levels are never touched and a re-run replaces the old dips. MCP: fablecut_auto_duck , same detection as the editor. Agents can export. fablecut_export renders the timeline to a file in exports/ with the editor's own Fast export and returns its path. An open editor tab takes the job, or the server starts a headless Chrome / Edge ( FABLECUT_CHROME to choose) and closes it afterwards. Range, encoding profile, waiting, status and cancel are options. REST: POST /api/export/request and GET /api/export/job . MCP: fablecut_patch_project runs the editor's own timeline edits — split , rippleDelete , closeGap , lift , extract , insert , overwrite , rippleTrim , roll , slip , slide and crossfade — with the same linked-stem sync, track targeting and locks as the keyboard shortcuts. setProject takes inPoint / outPoint , and the compact view shows them. Pitch shift effect (±12 semitones, speed unchanged). The Deep voice preset now lowers the pitch (−4 semitones) instead of only EQ-ing the tone. Effect automation. Any effect parameter (except reverb decay) can follow keyframes: a ◆ beside each slider sets or removes a key at the playhead, and the slider then edits the key under the playhead. Clip, track, bus and master effects; preview and export follow the same curve. Saved as keys on the effect. MCP: the setFxKeys patch op, or keys inside a setFx chain. Submix buses. + Bus in the Mixer adds a bus with its own effects, fader, pan, mute and meter; the menu under a track's name routes it into a bus instead of the master. Saved as buses and tracks[].out . MCP: setBus , removeBus , setTrack {out} , and setFx / setFxKeys on a bus. Noise reduction. The inspector's Noise control (Light / Medium / Strong / Off) measures the file's noise floor and renders a cleaned copy with ffmpeg's FFT denoiser; the clip's audio stems switch to it, and Off switches back. MCP: fablecut_denoise ; REST: POST /api/denoise . Needs ffmpeg. Changed The editor's split, ripple, insert, trim and crossfade code moved into edit-ops.js , which the editor and the MCP server both load. The master loudness readout is measured on the finished mix, after master effects and the master fader. Preview and export now mix audio through the same graph: each clip feeds its track, each track the master. Before, the export mix sent every clip straight to the output, so anything set on a track or the master could not reach the exported file. Fixed Titles draw in their own fonts again. Every title style (Anton, Playfair Display, Bebas Neue, Caveat, …) was falling back to the system sans-serif: The 20 fonts in library/fonts were the wrong slice of each Google font (Cyrillic, Vietnamese, …) with no A–Z in them. They are now the Latin files, and the variable ones (Caveat, DM Sans, Inter, Montserrat, Oswald, Playfair Display, Roboto, Rubik, Teko) keep their whole weight range, so weight 100–900 draws real weights instead of a faked bold. Fonts that aren't in the library (Cinzel for the Luxury style, or any Google Font typed by name) never loaded: the check meant to skip fonts already present passed for every name. They load now, and Load says so when Google Fonts has no family by that name. A data directory seeded before this release (the Claude Code plugin keeps one) gets the new font files on the next start; a file you changed or added yourself is never overwritten. Exports wait for every title font, including a font-cut title's whole set, before the first frame, so an opening frame can't come out in the fallback face. The font list no longer shows a library font twice after a quick run of project reloads. 官方 Release:v1.10.0。请查看 Release notes、依赖和许可证变化。
来源:GitHub · ronak-create/FableCut · github.com