Commit Graph
2256 Commits
Author SHA1 Message Date
BFlat 13fe4a3d4e Merge pull request #2422 from devius/ka-discord-label
i18n(ka): shorter Georgian for 14 labels that didn't fit
2026-10-30 00:08:43 +07:00
BFlat 1e5008cf29 Merge pull request #2446 from vangel76/vp9enc-forward-transform
vp9enc: forward transform accumulates all outputs together
2026-10-30 00:08:29 +07:00
BFlat 49a6391504 Merge pull request #2308 from marcoarnulfo/fix/lottie-zero-stretch
Lottie: import a layer's time stretch below 1 % as 100 %, with a warning
2026-10-30 00:08:17 +07:00
BFlat 5fd95e7df1 Merge pull request #2533 from dotCooCoo/fix/script-socket-tests-macos
Scripts: socket tests wait for the buffers to stay full on macOS
2026-10-30 00:07:48 +07:00
BFlat 429e44c8be Merge pull request #2542 from Silvertree2010/fix/h3276-lottie-text-stroke-colour-parser
Reject '+' signs in Lottie text stroke colour hex pairs
2026-10-30 00:07:18 +07:00
BFlat 9d0d1ee243 Merge pull request #2460 from Silvertree2010/fix/h2727-gltf-uri-decode-turns-x-into-a-c
Require hex digits in glTF uri_decode percent escapes
2026-10-30 00:07:05 +07:00
BFlat 41ae777480 Merge pull request #2288 from Silvertree2010/fix/2128-audit-f-08-svg-arc-with-a-huge-r
Bound SVG arc segment count for huge radii
2026-10-30 00:06:50 +07:00
BFlat b6cff1f522 Merge pull request #2287 from Silvertree2010/fix/h2000-framerate-from-f64-returns-a-zer
Keep FrameRate::from_f64 nonzero for tiny positive fps
2026-10-30 00:06:35 +07:00
BFlat 966fdd3c0a Merge pull request #1776 from sanyamsingh001/fix/hextile-centerline-symmetry
Fix HexTile centerline cell selection
2026-10-30 00:06:21 +07:00
BFlat 5ed0a3f9b1 Merge pull request #1669 from zitann2020/i18n/ja-comp-settings
i18n: two labels that already had a catalog row were formatted in English
2026-10-30 00:06:09 +07:00
BFlat 77b4d76455 Merge pull request #2338 from vangel76/camtrack-triangulate-stack
Camera tracking: avoid per-view triangulation allocations
2026-10-30 00:05:56 +07:00
bflatasticandClaude Opus 5.5 c70fccff99 SVG, FCP XML: bound XML entity expansion (#2129)
A few kilobytes of internal entities expanded to millions of nodes (each top-level
reference stays under roxmltree's per-reference cap), so a 1 MB file exhausted memory.
SVG keeps DTDs, which Illustrator's exports use for entities, but caps the expanded
document at 4 million nodes. Final Cut Pro XML and FCPXML, which FilmCraft parses
without a node limit, are refused when they declare an entity; real exports never do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:01:33 +07:00
bflatasticandClaude Opus 5.5 c526bb554a GPU: without_kernel copies the software and yuv fields too
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 10:10:45 +07:00
bflatastic 75e878f178 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-29 10:10:44 +07:00
BFlat b0e202a6e5 Merge pull request #1762 from dotCooCoo/fix/macos-quit-crash
Fix #341: on macOS, a quit goes through `terminate:`
2026-10-29 10:10:16 +07:00
BFlat bd4c68fcf8 Merge pull request #2291 from dotCooCoo/feat/recent-script-files
Scripts: Recent Script Files lists the last ten scripts and Cmd+Alt+Shift+D reruns the newest
2026-10-29 10:10:03 +07:00
BFlat 0a3142bcc8 Merge pull request #2517 from MatejKozlovsky/crypto-pick-probe
Cryptomatte pick: keep a hover probe, built off the UI thread (#473)
2026-10-29 10:09:49 +07:00
BFlat b950014850 Merge pull request #1873 from vangel76/rfx-blur-stylize
Glow, Radial Blur, Venetian Blinds, Radial Wipe, Fractal Noise and the Transform effect render as in After Effects
2026-10-29 10:09:36 +07:00
BFlat 226b954777 Merge pull request #2553 from arnav-hiwarkar/perf/2551-disk-cache-bounded
Disk cache: 20 GB default and a free-space reserve, so it no longer fills the disk (#2551)
2026-10-29 10:09:24 +07:00
BFlat 168c556d10 Merge pull request #2548 from Silvertree2010/fix/h3262-align-video-to-data-timestamp-pa
Fix Align Video to Data panic on multi-byte char in timestamp
2026-10-29 10:09:11 +07:00
BFlat f7b010e499 Merge pull request #2547 from Silvertree2010/fix/h3260-svg-css-parser-applies-the-secon
Skip whole CSS at-rule blocks in the SVG parser by brace depth
2026-10-29 10:08:59 +07:00
BFlat a19afa0b9b Merge pull request #2450 from dotCooCoo/feat/wiggle-paths-spatial-phase
Shapes: Wiggle Paths has Spatial Phase, which slides its wiggle along the path
2026-10-29 10:08:43 +07:00
BFlat e17600e869 Merge pull request #2448 from vangel76/vp9enc-loop-filter-lanes
vp9enc: loop filter in 8-lane groups
2026-10-29 10:08:30 +07:00
BFlat aafcf93a6a Merge pull request #2405 from vangel76/av1enc-scratch-buffers
av1enc: reuse scratch buffers in the transform path, the coefficient writer and the level search
2026-10-29 10:08:17 +07:00
BFlat b771f171d0 Merge pull request #2341 from vangel76/camtrack-validate-input
Camera tracking: validate solver input and bound workspaces
2026-10-29 10:08:05 +07:00
BFlat 6efe743a95 Merge pull request #2334 from vangel76/trkx-face-polygon-rows
Face tracker: find polygon crossings once per window row
2026-10-29 10:07:53 +07:00
dotCooCoo 6e8acedc0d Merge main into feat/recent-script-files 2026-10-28 14:23:49 -07:00
arnav-hiwarkarandClaude Opus 5.5 4171b6c0db Disk cache: negative free space from df counts as none (#2551)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:53:53 +05:30
arnav-hiwarkarandClaude Opus 5.5 8ab492d8cd Disk cache: apply the free-space reading where it's taken, evict off the UI thread at open (#2551)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:45:48 +05:30
arnav-hiwarkarandClaude Opus 5.5 74ea0be88f Disk cache: a failed free-space reading clears the last one (#2551)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:29:21 +05:30
dotCooCoo 509e250c4f Scripts: leave a script out of Recent Script Files when its path can't be made absolute
Services::full_path now returns None when the working directory can't be
read, instead of the relative path. file.runScript still runs the script
but does not add it to the list, so a later working directory can't make
the entry open a different file.
2026-10-28 09:37:46 -07:00
arnav-hiwarkarandClaude Opus 5.5 52dda004a5 Disk cache: evict before writing, reset the disk reading when the folder changes (#2551)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:55:33 +05:30
Matej Kozlovský 6bcb76b9dc GPU: Classic 3D builds with FXC, so the GPU compositor starts on DirectX 12 (#613)
occlusion computes its three channels as one vector instead of writing a
vector component through a loop index, which FXC cannot address and tried
to unroll every enclosing loop for (X3550/X3511). classic3d now also
builds like the effect kernels: if a compiler rejects it, 3D runs render
on the CPU instead of the whole compositor failing to start. The ignored
FXC diagnostic test now checks classic3d instead of the stale pointwise
failure.
2026-10-28 17:08:46 +01:00
vangel76andClaude Sonnet 5.5 153e907afa Merge upstream/main into vp9enc-loop-filter-lanes
Resolve crates/vp9enc/src/lf.rs: main moved sb_plane into FrameFilter::sb_plane
(mi grid and limits as struct fields, no allow(too_many_arguments)). The
branch's 8-lane group filtering (apply mask per lane, filter_group) is
re-applied inside that method; the now-unneeded too_many_arguments allow on
filter_group is dropped (7 arguments).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 15:41:16 +01:00
vangel76andClaude Sonnet 5.5 bcc21b939c Merge upstream/main into av1enc-scratch-buffers
Resolve crates/av1enc/src/decide.rs: main replaced the long try_tx/code_tx
argument lists with the TransformBlock struct. try_tx and code_tx keep the
branch's scratch-buffer design (TxScratch taken out of the decider) and take
a TransformBlock; reconstruct now takes its three output buffers as a
ReconBuffers struct to satisfy the denied clippy::too_many_arguments.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 15:39:44 +01:00
vangel76andClaude Sonnet 5.5 26798dce42 Merge upstream/main into rfx-blur-stylize
Resolve the conflict in crates/gpu/src/fx_stylize.rs: main moved ops::warp to
the ops::WarpOptions parameter struct; the branch's per-sample transform loop
(motion-blur samples, now passing the sample by reference) uses the new
signature with the branch's reference argument kept.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 15:37:16 +01:00
vangel76andClaude Sonnet 5.5 1ec9947efb Merge upstream/main into camtrack-validate-input
Conflict in crates/track/src/camtrack/bundle.rs (imports): upstream replaced
the linalg glob import with an explicit list; kept that list and added the
branch's SolveError import (use super::{Distortion, SolveError}). Input
validation, size budget and Result-returning adjust/cost are unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 15:28:34 +01:00
vangel76andClaude Sonnet 5.5 130298ef82 Merge upstream/main into trkx-face-polygon-rows
Conflict in crates/track/src/face.rs: upstream moved the feature-blob search
into FaceTracker::feature_blobs. Re-applied the branch there: the per-pixel
point-in-polygon loop is replaced by non_skin_inside (one crossing pass per
window row) and the roll rotation is hoisted with face_mapper.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 15:24:18 +01:00
dotCooCoo b8b1a3a6a2 Run the File > Scripts entry when a panel shares its name
File > Scripts lists a bundled script even when an installed ScriptUI
panel has the same name, but running it by name opened the panel. A
script now runs before a panel of the same name, and it enters Recent
Script Files.
2026-10-28 06:33:44 -07:00
arnav-hiwarkarandClaude Opus 5.5 8af5f54c92 Disk cache: give space back below the free-space reserve, skip writes that can't fit (#2551)
A disk reported as 0 bytes (an automount map) counts as unknown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 18:34:02 +05:30
arnav-hiwarkarandClaude Opus 5.5 6efeae3793 Disk cache: 20 GB default, a free-space reserve and cheaper eviction (#2551)
- Default disk cache size 20 GB (was 100 GB); settings version 3 migrates the stored old
  default and keeps a size the user chose.
- The cache keeps max(2 GB, 5% of the disk) free: sysinfo::disk_space (df -Pk / PowerShell
  DriveInfo) is read in the background from memory_tick and caps the limit
  (DiskCache::set_disk_space); cache.diskStats reports limitBytes.
- Eviction goes down to 90% of the limit, so the LRU sort runs once per tenth of the limit
  written instead of on every write at the limit.
- Failed writes are counted (cache.diskStats failed) and the first is logged.

Also fixes #2063.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 18:27:31 +05:30
dotCooCoo 32f058ea05 Merge main into feat/wiggle-paths-spatial-phase 2026-10-28 05:39:33 -07:00
Matej Kozlovský 6e69b91a80 Export: H.264 frames convert to YUV 4:2:0 on the GPU
Accelerator::comp_frame_yuv420 (default None) renders a top-level comp frame and
converts it over the background to the H.264 export's 8-bit BT.709 limited-range
4:2:0, every byte within one level of the CPU conversion (the GPU kernel follows
it operation for operation, including NaN and half-away-from-zero ties, but a
driver may contract its arithmetic). A 4K frame then reads back 12 MB of planes
instead of 133 MB of RGBA f32.

The H.264 export asks the accelerator for planes when a frame needs nothing after
the render (progressive, project depth, no crop/resize, rendered at the output
size) and otherwise renders and converts on the CPU as before. Deferred
readbacks (a browser worker) keep the pass-based path. Sizes the kernel can't
take (width not a multiple of 8, odd height) are declined before any GPU work.

Like Cx::frames, h264_frames caps GPU frames in flight only while the
accelerator is up (map_frames_while with the same liveness check): once the GPU
stops for good, the remaining frames render on the CPU side by side instead of
one at a time.

rgba_to_yuv420 moves to effectcraft_raster::yuv so the export and the GPU tests
share one reference. The GPU tests skip without an adapter (tests::gpu()), as
the crate's others do.
2026-10-28 13:19:24 +01:00
Matej Kozlovský 4407e82c62 Cryptomatte pick: keep a hover probe, built off the UI thread (#473)
effect.cryptomatteAt rendered the effect's input on every call to learn its pixel grid (up
to ~1 s per hover on a 3D precomp). The aux channels and that grid are now kept in a
CryptoProbe on the Session, keyed by the project revision, layer, effect, frame, scale and
render prefs (nested switches, draft shadows). On footage with nothing animated before the
Cryptomatte effect the frame is the source frame, so a still or a held frame keeps one
probe for every comp time. The effect's own Selection doesn't count: the probe never reads
it, so an animated Selection keeps the probe too.

Session::crypto_probe_ready says whether a query answers from the kept probe and changes
nothing. Session::crypto_probe_job builds it on another thread for the viewer; asking for a
job is starting it. Each started job has a generation: it stores its result only while it
is the newest, a newer job or an edit cancels it, and a panic in the build becomes the
probe's error. A cancelled build checks its generation between its stages (reading the IDs,
rendering the effect's input), so it stops early and lets go of what it read. `probeOnly`
makes cryptomatteAt / pickCryptomatte answer {pending} instead of building on the caller.

A pick re-keys the probe (it only edits the Selection), and undo, redo and history jumps
over picks keep it too (each pick is labelled "Pick Cryptomatte"). Any other edit, footage
changes, Open / New and Session::drop_crypto_probe (the eyedropper disarmed) let it go. The
slot's type is crate-private (the Session field stays public, doc(hidden), so other crates
can still build a Session); crypto_probe_stats and crypto_probe_jobs (jobs run, cancelled
ones included) are doc(hidden), for tests.
2026-10-28 12:29:41 +01:00
NetterSilverandClaude Haiku 5.5 3cfd7e461f Fix Align Video to Data panic on multi-byte char in timestamp
Found while testing crates/engine/src/cmd/align_data.rs:75 (parse_stamp)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 09:09:43 +01:00
NetterSilverandClaude Haiku 5.5 10e173c0e4 Skip whole CSS at-rule blocks in the SVG parser by brace depth
Found while testing crates/svg/src/lib.rs:510-520 (parse_css)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 09:00:16 +01:00
Dylan M. Taylor 6194a157d7 Refactor automation tests for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 6e72ab3b57 Refactor ui-egui for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor f20d22bf36 Refactor engine for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor d01871516a Refactor effects for strict Clippy checks 2026-10-28 06:09:21 +00:00