diff --git a/README.md b/README.md index 6538be8..f10be78 100644 --- a/README.md +++ b/README.md @@ -63,16 +63,20 @@ agent isn't scripting a black box; it drives the identical engine — and its ed | **Multi-track NLE** | Bespoke timeline: video/audio/text tracks, free clip positioning with gaps, drag-to-move across tracks, edge-drag trim, razor split, ripple delete, markers, mute/solo/lock, snapping to edges / playhead / **beats**. | | **Real playback** | Not a slideshow — one long-lived FFmpeg streams the **composited** cut (every track, effect, keyframe and overlay) paced against the audio clock, with J/K/L shuttle and audible Web-Audio scrub. | | **Delivery frames** | 16:9 / 9:16 / 1:1 / 4:5 is a property of the **project**, so preview, scrub and export all render the same frame — with platform **safe-area guides** and cover-crop instead of letterboxing. | +| **Smart crop** | Reshaping 16:9 to 9:16 throws away most of one axis. `smart_crop` samples where each shot's content actually is (edge detail + motion, no model to ship) and writes the crop that keeps it, per clip — an ordinary transform the sliders can still override. | +| **Ready to publish?** | `platform_check` judges the cut against Reels / Shorts / TikTok / Instagram / YouTube — length, shape, resolution, captions — and tells a **hard** limit (rejected) apart from a **reach** limit (accepted, then buried). Advisory only; nothing blocks an export. **Cover frames** save at the full delivery resolution. | | **Analysis & speech** | Silence and scene detection, an onset/**tempo** grid, EBU R128 loudness and speech-vs-music from one decode — plus **transcription in every build**, via FFmpeg's `whisper` filter or in-process whisper.cpp (models fetched on first use). | | **Cut to the beat** | The tempo grid is drawn on the ruler and snapped to while dragging, and `snap_to_beats` ripples a whole track's cuts onto it, retrimming each clip at its **outgoing** edge. | | **Effects, color & looks** | Per-clip video (`blur`/`sharpen`/`hue`/`negate`/`vignette`/`chromakey`) and audio (`highpass`/`lowpass`/`EQ`/`compressor`/`gate`) chains, transform + color grade, and one-click **Punchy / Warm / Cool / Faded / B&W** looks. | +| **Transitions & masks** | Eleven transitions — crossfade, dip to black / white, **slide** and **push** in four directions — that borrow the outgoing clip's handle and degrade to a hard cut when there is none. **Masks** cut a clip to a feathered rectangle or ellipse so a lower track shows through: a blurred face is a duplicated shot above, blurred and masked. | | **Keyframe animation** | Animated zoom, position, rotation and opacity via piecewise-linear keyframes — the Transform panel auto-keyframes at the playhead. | | **360 reframing** | Cut a normal, flat shot out of **equirect or Insta360 dual-fisheye** footage: aim a virtual camera (yaw / pitch / roll / FOV) and **keyframe the pan**. An **Insta360 lens pair imports as one 360 asset** — Kerf stitches the two capture files into an equirect sphere once and caches it. Spherical sources are detected on import; anything unflagged can be marked by hand. | -| **Titles & captions** | Text overlays / lower-thirds with their own keyframes, Title / Lower-third / Caption style presets, the system font list, one-click **captions from a transcript**, and SRT export. | +| **Titles & captions** | Text overlays / lower-thirds with their own keyframes, Title / Lower-third / Caption style presets, the system font list, and SRT export. **Captions follow the cut**: the transcript is projected through the clips that actually show its footage (trim / speed / reverse honored), so words you cut out get no caption — in a subtitle **Lines** style or the social **Word punch** style, one large word on the beat of the speech, fitted to the delivery frame. | | **Edit by transcript** | The transcript is an editing surface: lines resolve to the clip carrying them, a click seeks, and `×` cuts that sentence out of the timeline and ripples the gap closed. | -| **Smart mixing** | Per-track **ducking** (music dips under dialogue via sidechain) and single-pass **loudnorm** to −14 LUFS on export. | +| **Smart mixing** | A **mixer strip** per audible track (fader + pan, mirrored exactly in preview), per-track **ducking** (music dips under dialogue via sidechain) and single-pass **loudnorm** to −14 LUFS on export. | | **GPU-accelerated export** | NVENC / QSV / VideoToolbox / AMF are **verified with a real test encode** before being offered, hardware decode falls back to software on its own, and **range export** renders just the region between your in/out marks. | -| **Agent workflow** | 78 MCP tools, **staged edits with a reviewable diff**, a persisted task queue, and a fully revertible edit history attributed to user / agent / system. | +| **Agent workflow** | 87 MCP tools, **staged edits with a reviewable diff**, a persisted task queue, and a fully revertible edit history attributed to user / agent / system. | +| **Plays nicely with your machine** | One heavy FFmpeg job at a time, at a **CPU budget** you set (Background / Balanced / Full speed in Settings, or `KERF_CPU_PERCENT`) and below-normal priority — an agent analyzing eight sources no longer takes the desktop down. Every toast lands in a **notification center**, so a failure is still readable after it fades. | | **Auto-update** | The app updates itself from its own GitHub releases; a bundle only installs if its **minisign signature** verifies against the embedded public key. | --- @@ -127,15 +131,17 @@ Now ask the agent to work on the project you have open — _"skim the interview the dead air, and drop in captions."_ It will claim a task, use the tools below, and hand back a reviewable result. -### The tools (78) +### The tools (87)
See / analyze -`list_assets` · `get_asset_metadata` · `analyze_asset` · `get_timeline_state` · -`timeline_summary` · `get_waveform` · `get_energy` · **`get_frame`** (drill-in frame) · -**`skim_asset`** (contact-sheet montage) · **`preview_timeline`** (the composited cut) — -the last three return images the model can see. +`list_assets` · `import_asset` · `get_asset_metadata` · `analyze_asset` · +`get_timeline_state` · `timeline_summary` · `get_waveform` · `get_energy` · +**`get_frame`** (drill-in frame) · **`skim_asset`** (contact-sheet montage) · +**`preview_timeline`** (the composited cut) — the last three return images the model can +see, and `get_frame` / `preview_timeline` take a `region` to **zoom** into a quarter of the +frame at full source detail.
@@ -145,27 +151,29 @@ the last three return images the model can see. `remove` · `ripple_delete` · `cut_clip_range` · `duplicate_clips` · `set_clip_enabled` · `add_track` · `remove_track` · `set_track_duck` · `set_track_muted` · `set_track_solo` · `set_track_locked` · `add_marker` · `update_marker` · `remove_marker` · `remove_silence` · -`snap_to_beats` · `extract_audio` · `concatenate` +`snap_to_beats` · `smart_crop` · `extract_audio` · `concatenate`
Style & animate `set_volume` · `set_fade` · `set_speed` · `set_transform` · `set_color` · -`set_transition` · `set_video_effects` · `set_audio_effects` · `set_keyframes` · -`add_keyframe` · `clear_keyframes` · `set_reframe` · `clear_reframe` · -`set_reframe_keyframes` · `add_reframe_keyframe` · `add_overlay` · `update_overlay` · -`remove_overlay` · `set_overlay_keyframes` · `captions_from_transcript` · `export_srt` · -`list_fonts` · `set_delivery_format` · `set_asset_projection` +`set_transition` · `set_mask` · `set_video_effects` · `set_audio_effects` · +`set_keyframes` · `add_keyframe` · `clear_keyframes` · `set_reframe` · `clear_reframe` · +`set_reframe_keyframes` · `add_reframe_keyframe` · `set_track_volume` · `set_track_pan` · +`add_overlay` · `update_overlay` · `remove_overlay` · `set_overlay_keyframes` · +`generate_captions` · `clear_captions` · `export_srt` · `list_fonts` · +`set_delivery_format` · `set_asset_projection`
Render & hand-off -`export` · `export_capabilities` · `stage_edits` · `staged_diff` · `apply_staged_edits` · -`discard_staged_edits` · `revision_diff` · `list_tasks` · `add_task` · `claim_next_task` · -`complete_task` · `fail_task` · `resolve_task` · `remove_task` · `history` · `undo` · -`redo` · `revert_to` · `transcription_status` · `download_speech_model` +`export` · `export_capabilities` · `export_cover` · `platform_check` · `stage_edits` · +`staged_diff` · `apply_staged_edits` · `discard_staged_edits` · `revision_diff` · +`list_tasks` · `add_task` · `claim_next_task` · `complete_task` · `fail_task` · +`resolve_task` · `remove_task` · `history` · `undo` · `redo` · `revert_to` · +`transcription_status` · `set_speech_model` · `download_speech_model`
Every mutating tool emits a `project-changed` event, so the agent's proposal appears in @@ -282,8 +290,8 @@ Kerf is a working editor under active development — not a scaffold. The timeli preview, transcript, analysis, effects, keyframes, captions, playback and export are all wired to real backend state, and the MCP surface is exercised end-to-end. -**Roadmap:** a live activity stream pushed from the MCP server (the queue is polled -today), transitions beyond crossfade / dip-to-black, and audible reverse shuttle. +**Roadmap:** exporting one cut at every delivery frame in a single pass, a live activity +stream pushed from the MCP server (the queue is polled today), and audible reverse shuttle. Contributions welcome — see [`CONTRIBUTING.md`](./CONTRIBUTING.md). diff --git a/site/data/faq.yaml b/site/data/faq.yaml index de21ded..6e0948f 100644 --- a/site/data/faq.yaml +++ b/site/data/faq.yaml @@ -12,7 +12,7 @@ a: >- Most tools bolt a chatbot onto an editor and let it script a black box. Kerf inverts that: the editor is an API, exposed twice over one shared project — as the GUI you - click, and as 78 Model Context Protocol tools an agent calls. There is no import or + click, and as 87 Model Context Protocol tools an agent calls. There is no import or export round-trip and no second copy of the truth. - q: Which AI assistants can drive Kerf? a: >- diff --git a/site/layouts/partials/schema.html b/site/layouts/partials/schema.html index 0638971..c578aaa 100644 --- a/site/layouts/partials/schema.html +++ b/site/layouts/partials/schema.html @@ -34,7 +34,7 @@ "keywords" "AI video editor, MCP video editor, non-destructive editing, FFmpeg, Model Context Protocol, Claude, desktop video editor, 360 video, Insta360" "featureList" (slice "Multi-track non-destructive timeline with ripple delete, razor split and edge-drag trim" - "Embedded Model Context Protocol server — 78 tools an LLM can call on the live project" + "Embedded Model Context Protocol server — 87 tools an LLM can call on the live project" "Agent edits are staged as a reviewable diff, never applied behind your back" "The agent sees real frames: contact-sheet skims, single frames and composited previews" "Real streamed playback of the composited cut, paced against the audio clock"