Skip to content

v2.0.0-preview.9

Latest

Choose a tag to compare

@github-actions github-actions released this 26 Oct 02:09
· 23 commits to main since this release
649b247

日本語のリリースノートはこちらです。

What's Changed

New Features

  • Editing workflows
    • Added a command palette with interactive commands, tab switching and tool creation shortcuts
    • Refreshed the palette's available commands as the playhead and selection move
    • Added keyframe selection commands to the graph editor
    • Added a property editor for easing curves
    • Opened an empty tab from the dock add button so a tool can be chosen
    • Added a status popup next to the title bar's feedback button
    • Let tool tabs stay pinned to the object they show (breaking change)
  • Audio
    • Added a pitch-preserving time stretch audio effect
    • Added a noise reduction audio effect
  • Effects, text and 3D
    • Added a GLSL radial blur with zoom and spin modes
    • Added diagonal clipping controlled by a signed width
    • Added text line alignment
    • Added clip boundary transitions between adjacent elements
    • Added font fallback and Noto Color Emoji
    • Made fonts easier to find in the font picker
  • Media and files
    • Added a missing media repair tool
    • Added file pickers for custom file sources
    • Added file drag and drop in editors and AI tools
    • Added Media Foundation encoding on Windows
    • Added a second FFmpeg worker for file browser, proxy and AI reads
  • Extensions and packages
    • Let extensions add tools to the live MCP endpoint
    • Rendered extension descriptions and release notes as Markdown
    • Listed the types, methods and fields a package references that the host lacks
    • Saved packages that passed the API check
    • Refused packages that use APIs this Beutl lacks at load, install and update (breaking change)
    • Generated the library lists from project marks and packed Beutl.Controls
  • Agent and AI
    • Unified the headless and live MCP servers into one beutl-agent server (breaking change)
    • Let agents generate with Beutl's AI through MCP
    • Followed live MCP edits in the editor (experimental)
    • Dropped the agent workspace root and required absolute tool paths (breaking change)
    • Used PKCE and DPoP for desktop sign-in
  • Project editing and data
    • Merged Exclude into an undoable Delete bound to Delete and Ctrl+Delete (breaking change)
    • Kept multi-selection in the editor selection API and let menu Delete remove it with its groups (breaking change)
    • Saved edits of objects whose type is missing
    • Counted duplicate IDs, resolved references within their scene and regenerated IDs in one pass
    • Added MediaTime, an exact flick-based time (breaking change)
    • Exposed property units to schemas and editors
    • Added target pickers for reference properties (breaking change)
    • Gave history one edit session at a time and queued other writers behind it (breaking change)
    • Gave context commands IDs and handlers and keyed the keymap by ID (breaking change)
    • Ended pointer drags through a drag session that confirms on capture loss (breaking change)
    • Rendered playback one frame per render-thread job and showed edits on the next frame
    • Exported from a snapshot of the scene and kept the editor enabled while it runs
    • Warned when code compares two property objects with equality or Equals
    • Reported EngineObject constructors that skip ScanProperties
  • Platforms
    • Added Linux ARM64 builds

Improvements & Refactoring

  • Property system
    • Held engine, node graph, core object, project system and settings values in value-only properties (breaking change)
    • Exposed value-only properties as property objects and generated every CoreObject's scan (breaking change)
    • Made keyframes the bottom of each property's expression chain (breaking change)
    • Moved IProperty and the expression interfaces to Beutl.Core and the property adapter interfaces to Beutl.Engine (breaking change)
    • Made reference property values non-owning (breaking change)
    • Replaced property editor extension methods with typed registrations (breaking change)
  • Project format and compatibility
    • Replaced TimeSpan with MediaTime across the model, engine and UI (breaking change)
    • Stored frame rates as exact rationals and wrote flick counts (breaking change)
    • Replaced migration propagation with a per-build format floor and one load gate (breaking change)
    • Kept unknown members and types so 2.x builds keep each other's data
    • Loaded renamed types and members under their former persisted names
  • Rendering and audio
    • Reworked renderer, node renderer and proxy cleanup for reliability (breaking change)
    • Unified audio effect latency reporting (breaking change)
    • Made frame providers and sample providers sequential (breaking change)
    • Replaced Pcm with AudioBuffer and updated audio decoding (breaking change)
    • Sampled Vulkan render targets in place instead of copying them
    • Bounded playback and export read-ahead by memory
    • Applied the FFmpeg encoding thread count setting
    • Shipped Beutl's libSkiaSharp for macOS
  • Editor and version control
    • Simplified Git operations, snapshots, pull, restore and branch switching (breaking change)
    • Kept the version-control coordinator on the UI thread behind one gate
    • Made the editor clock and selection read-only with Seek and Select (breaking change)
    • Moved the AI workspace, history, dock layout, transition, missing media, output and version-control tabs into Beutl.Editor.Components (breaking change)
    • Trimmed unnecessary public API across the libraries (breaking change)
    • Stabilized default fonts and shared API subscriptions (breaking change)
    • Let BEUTL_API_BASE_URL choose the API server (breaking change)
  • Agent and MCP
    • Targeted live MCP scenes per request (breaking change)
    • Renamed Resource.Update and its helpers to Reconcile (breaking change)
    • Required synchronous C# render scripts (breaking change)
    • Removed the AI job and caption extension kinds and their leases (breaking change)
    • Removed the unused proxy generation admission (breaking change)
  • Distribution
    • Shipped self-contained builds only and removed the Windows and unsigned macOS zips
    • Included license files in release artifacts

Bug Fixes

  • Playback and media
    • Prevented black frames at the end of video exports and kept the last frame
    • Started playback at the playhead frame and played the last frame
    • Kept preview frames during delayed binding updates
    • Prevented preview input from freezing the UI during playback
    • Updated the playhead and preview on the UI thread during playback
    • Resampled audio to the encoder's format when the format is Auto
    • Counted FFmpeg, AVFoundation and Media Foundation frames and samples from the container start
    • Reopened FFmpeg readers after a decode worker exit and bounded worker memory
    • Fixed audio seeks past EOF and aligned them with the video time origin
    • Preserved the audio resampler state across unchanged rebuilds
    • Played GIFs and WebPs that repeat a set number of times for every pass
    • Handled video sources without a video stream
    • Wrote AVFoundation exports in the container their extension names
  • Rendering, effects and 3D
    • Corrected 3D LUT interpolation grid spacing
    • Snapped Mosaic samples in the source's own texel grid so tiles match across GPUs
    • Fixed shadow and wave rendering and zero-direction lights
    • Fixed the color wheel and triangle gradients
    • Prevented large LUTs from exceeding GPU texture limits
    • Preferred an integrated GPU over SwiftShader and released the color space name
    • Released Vulkan resources on the command pool's thread and waited for Skia before releasing non-shared textures
    • Stopped the HDR presenter on a failed Vulkan call and fell back to CPU when Vulkan is unavailable
    • Corrected sRGB encoding for UNORM swapchain formats
    • Aligned drawable brush fills with text bounds
    • Applied brush opacity to bare shaders
    • Kept the path editor's geometry overlay out of hit testing after playback
    • Mapped 3D presses into moved or scaled Scene3D objects and groups
    • Rotated 3D transforms about their center when the center sums to zero
    • Dollied the camera with the wheel in camera mode
    • Kept the 3D gizmo out of exports, saved scenes and history
    • Kept the files of 1.x elements drawn by a node tree and warned on open
    • Kept portal resizing independent of imported media
  • Timeline and editing
    • Returned an element to its layer when undoing Exclude or Cut
    • Kept layer headers in sync with their layers after undoing a move
    • Stopped a ripple at a locked clip a follower would pass over
    • Advanced split offsets by the speed integral
    • Snapped timeline moves to clip start
    • Placed single pasted clips in a free slot
    • Included all selected groups in timeline operations
    • Kept the editor's maximum time at the remaining elements after bulk removals
    • Made locked clips read-only in property editors, the graph editor and the path editor
    • Refused agent edits to locked clips and layers
    • Let paste, media length matching and inline animation work with the timeline closed
  • Project data, saving and recovery
    • Played embedded scene references from the referenced scene's window
    • Preserved project references in export snapshots, cross-drive media and escaped paths
    • Gave copied clips their own file-backed objects
    • Wrote a newly added element's file at the next save
    • Kept the requested length when media cannot be read
    • Kept unknown settings.json sections and copied an unreadable file aside
    • Kept starting when settings.json holds a value of the wrong type
    • Saved GPU and proxy store settings as soon as they change
    • Treated elements that could not be fully loaded as read-only
    • Repaired a value that loading dropped only by an edit that replaces it
    • Migrated a 1.x decorator or group operator that was turned off as turned off
    • Restored the nested view state of geometry, path figure and effect groups
    • Saved a new AI image with the default file mode
    • Created tutorial projects in the Beutl home
  • Version control
    • Showed Git's error in remote failures instead of calling SSH failures offline
    • Let git status and LFS pointer checks run past the 30-second limit
    • Let Git remove its index lock when a close cancels a snapshot
    • Kept tracking a project whose repository cannot be watched
    • Enabled version control from a floating version control tab
    • Hid the stale-lock banner once the lock file is removed
    • Accepted drops for MIME- and UTI-only file filters
  • File browser, packages and updates
    • Prevented file browser freezes when opening large directories
    • Stopped the file browser from reading collapsed folders as files
    • Copied and moved dropped files off the UI thread
    • Asked before copying into an existing folder and stopped following folder links
    • Rejected linked ancestors in folder copy destinations
    • Compared file browser move paths per file system
    • Kept media named with escaped characters through copies and file URI conversions
    • Preserved package registrations when the registry is unreadable
    • Resolved extension dependencies from the installed packages
    • Ignored the source generator dependency of older extensions
    • Kept the installed package until its update is in place
    • Verified and contained app update downloads
    • Listed only creatable types in the library picker and updated the Library tab as items arrived
  • Agent tools
    • Preserved unchanged nested objects and transitions during agent edits
    • Preserved escaped media paths in agent edits
    • Exposed DrawableObject3D and GateEffect to the Agent Editing Toolkit schema
    • Let agent edits through node graphs whose ports hold values or bind properties
    • Rejected agent edits that leave an element that could not be loaded unrepaired
    • Let duplicate_object wrapInGroup keep the copy's media
    • Stopped rewriting commented MCP configs and kept the Codex MCP config's file mode
    • Registered the built-in media decoders in the stdio MCP server
    • Allowed live MCP access to multiple Beutl instances and persisted its tokens outside settings
    • Retried excluded ports for the live MCP endpoint
  • Interface and localization
    • Completed missing localized resources and fixed English text that showed Japanese or garbled characters
    • Translated the extensions window's tabs, three tool tabs and the graph editor's tab name and loop tooltip
    • Kept the tab context menu text readable and removed empty space after closing tool tabs
    • Resized picker popups when their contents change
    • Synced opacity when switching to a gradient brush
    • Showed Aqua and Fuchsia once in the color palette
    • Showed the color and read-only state in the settings color editors
    • Put the boolean editor's menu after its keyframe buttons
    • Kept dragging the same curve point after it passes a neighbor
    • Preserved partial input in bounded numeric editors
    • Fixed the new scene dialog's location text clear of its folder button
    • Opened the notifications flyout only when there are notifications
Changelog

Full Changelog: v2.0.0-preview.8...v2.0.0-preview.9