Commit Graph
2718 Commits
Author SHA1 Message Date
dotCooCoo 0702cd23ee Merge main 2026-10-28 15:31:46 -07:00
dotCooCoo 5f560d7075 Merge #1762: Fix #341: on macOS, a quit goes through terminate:
# Conflicts:
#	Cargo.toml
#	crates/ui-egui/src/app/frame.rs
2026-10-28 15:31:45 -07:00
Dylan M. Taylor c99684e28e Honor CARGO_BUILD_TARGET in FreeBSD packaging for aarch64 release builds (#2555)
* Honor CARGO_BUILD_TARGET in FreeBSD packaging for aarch64 release builds

The shared release workflow cross-compiles FreeBSD aarch64 in the x86_64 VM and sets
CARGO_BUILD_TARGET. package.sh ignored it: it built for the host, read binaries from
target/release, and took the arch from uname -m (amd64 on that VM), so the aarch64 build
would have produced an x86_64 archive with x86_64 binaries.

When CARGO_BUILD_TARGET is set, pass --target, read binaries from target/<triple>/release,
name the archive from the target arch, and skip the --version smoke test (the binary cannot
run on the x86_64 host). Unset keeps the previous behavior.

* Reject unsupported CARGO_BUILD_TARGET and gate the smoke test on the host triple

Only x86_64-unknown-freebsd and aarch64-unknown-freebsd are accepted when CARGO_BUILD_TARGET
is set; anything else exits 2 instead of being labelled freebsd-x86_64.

The --version smoke test now runs when CARGO_BUILD_TARGET is unset or equals this host's
full FreeBSD triple, so a native explicit target is still checked.
2026-10-28 15:48:35 -04:00
Brandon ThomasandClaude Opus 5.5 c3600f9b59 Release 0.18.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.18.0
2026-10-28 12:18:42 -04:00
Brandon ThomasandClaude Opus 5.5 960620d607 macOS packaging: retry stapler when Apple's CloudKit drops the connection
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:18:40 -04:00
Dylan M. Taylor fa9cf47175 Merge pull request #2496 from dylanmtaylor/sonar/enforce-clippy-standards
Enforce Rust coding standards via Clippy
2026-10-28 06:18:48 -04:00
Dylan M. Taylor 51a22210de Enforce workspace Clippy standards and document lint policy 2026-10-28 06:09:21 +00:00
Dylan M. Taylor ba30fb6c38 Group benchmark measurement inputs 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 5fa72d83de Refactor the effectcraft apps for strict Clippy checks 2026-10-28 06:09:21 +00: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
Dylan M. Taylor 5d71dce7fc Refactor render for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 7926b8bd31 Refactor gpu for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 1d2c0d4248 Refactor script for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor c8994a2cfe Refactor hevcenc for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 3bc15c7c17 Refactor vp9enc for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 8e67bfce47 Refactor av1enc for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 7c27d88030 Refactor opusenc for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 072f2619bd Refactor export for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor d171d6cf88 Refactor project for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor f26f30871c Refactor track for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 51b910657d Refactor pdf for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 388ebc10ac Refactor psd for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 87e42c150c Refactor segment for strict Clippy checks 2026-10-28 06:09:21 +00:00
Dylan M. Taylor 7c74960c6f Refactor text for strict Clippy checks 2026-10-28 06:09:20 +00:00
Dylan M. Taylor 8d34f1d449 Refactor media for strict Clippy checks 2026-10-28 06:09:20 +00:00
Dylan M. Taylor 2fd6c448c5 Refactor expr for strict Clippy checks 2026-10-28 06:09:20 +00:00
Dylan M. Taylor e55e288397 Refactor raster for strict Clippy checks 2026-10-28 06:09:20 +00:00
Dylan M. Taylor d562e10acf Refactor path for strict Clippy checks 2026-10-28 06:09:20 +00:00
dotCooCoo d4e33b2bda Fix #341: the platform quit runs last in App::logic
The merge of main put craft_quit::on_close_request inside
EffectcraftApp::tick, so the control channel, autosave, screenshots and the
desktop host's file dialogs still ran after it in the same logic callback.
The tick keeps the unsaved-changes check; each desktop host's logic now calls
panels::unsaved::quit_on_close last, after the device-loss close as well.
2026-10-27 22:46:27 -07:00
dotCooCoo 49ba71b0ce Merge main into fix/macos-quit-crash 2026-10-27 14:21:30 -07:00
aiongg af415aa6e1 Merge pull request #2493 from Jeremy8776/feat/install-scope-policy
Windows installation policy: EffectCraft
2026-10-27 17:16:27 -04:00
Jeremy d0a67ac077 test(installer): cover the compiled folder searches, resolver chains and wizard folder replay
The policy check now reads the compiled AppSearch and RegLocator rows for the
remembered-folder properties (registry root, key, value name and type for both
scopes) and runs the DIR, FOLDER, PATH and legacy exe actions in sequence order
against seeded values, so their precedence and the preset-folder guard cannot
regress. It also replays the wizard folder actions in sequence order (a
remembered folder beats the new-install default, a typed folder beats both) and
requires the machine restore action between the scope page and costing.
2026-10-27 21:13:27 +00:00
aiongg a63b3bc7b8 ci: use storytold/craft-common-actions at the merged installer-policy commit 2026-10-27 20:51:53 +00:00
Jeremy 44061a3b33 fix(installer): check the exact architecture-specific machine folder
The pre-signing check matched any folder named Program Files, so it rejected
a valid MSI when Windows resolves Program Files elsewhere, accepted the 64-bit
root for an x86 package and accepted a different app name. Build the expected
folder from the package architecture's resolved root and the policy name.
2026-10-27 19:13:29 +00:00
aiongg dd12ed8f9c Merge pull request #2518 from Silvertree2010/perf/export-speed
Export: encode while the next batch renders, skip transparent pixels when compositing
2026-10-27 13:42:31 -04:00
dotCooCoo 385b93b9c8 Merge updated font menu fallback branch 2026-10-27 09:50:31 -07:00
dotCooCoo dac5fb46f7 Preserve readable font names in the shared font menu 2026-10-27 09:48:22 -07:00
dotCooCoo 530c7eff36 Merge updated footage interpretation and preset branches 2026-10-27 09:40:57 -07:00
NetterSilverandClaude Opus 5.5 94399e62ff Pin movie export bytes
H.264 and ProRes exports of a 60-frame comp (several render batches, a
rotating stroked ring, a fading solid at a fractional position, a
Screen-mode shape, 8 bpc) must keep the exact bytes main wrote before the
two previous commits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:40:41 +01:00
NetterSilverandClaude Opus 5.5 db41fa7980 Skip transparent pixels and quantise while compositing
Much of a layer buffer is often transparent (a stroked ring, a glow-padded
text layer, a precomp canvas), yet every destination pixel sampled it
bilinearly, and 8/16 bpc comps then re-quantised the layer's whole rotated
bounding box.

- Bilinear warps skip 16x16 source tiles whose pixels (and a one-pixel
  apron) all have zero alpha: their samples are transparent and were never
  drawn.
- The fast affine warp reports the rectangle it changed and, given the
  comp's levels, quantises each pixel as it blends it, so draw_comp has
  nothing left to re-quantise for that layer. quantize_px moves to
  effectcraft-raster for this.
- quantize_rect skips runs of four all-zero (+0.0) pixels, which quantise
  to themselves.
- to_rgba8 / to_rgba8_over convert row by row instead of per 4-byte item.

Every pixel stays bit-identical: tests compare the warp against the
reference path, fused quantising against quantising after blending, and
the zero-run skip against per-pixel quantising.

With the previous commit, demo comp to H.264 (`cargo xtask bench --scenario
demo --format h264 --frames 300`, 11 interleaved runs on a 16-thread Ryzen):
wall 9.26 s -> 6.97 s median (-24.8%), 8.55 s -> 6.55 s min (-23.3%); CPU
time -23%. Output byte-identical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:40:41 +01:00
NetterSilverandClaude Opus 5.5 d8bca3cdd9 Overlap movie encoding with rendering
Movie exports (H.264, HEVC, AV1, ProRes, uncompressed) rendered a batch of
frames on every core, then encoded it frame by frame while the render
threads waited. Each batch now encodes on a pool shared by all exports while the
next batch renders (Cx::frames_beside). With deferred GPU readbacks, or
where no thread can be started (wasm without threads), the two still take
turns. A panicking encoder becomes an export error.

H.264 frames are converted to 4:2:0 on the render threads, per frame, instead
of on the encoder's critical path. The conversion reads 8-bit levels from a
table and rounds without a libm call; both give the same values as before
(tested against the previous formula).

Demo comp (1920x1080, 300 frames) to H.264 on a 16-thread Ryzen, export
wall time -6% (median of 7 interleaved runs); output byte-identical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:40:41 +01:00
dotCooCoo e3480abf78 Upgrade saved effect parameters when applying animation presets 2026-10-27 09:40:00 -07:00
dotCooCoo 4b1c197055 Accept supported footage interpretation parameters 2026-10-27 09:35:34 -07:00
dotCooCoo 6da18d16df Merge composition proxy interpretation fixes 2026-10-27 09:23:22 -07:00
dotCooCoo 1c6cbd8c43 Include alpha interpretation in frame-blend cache keys 2026-10-27 09:22:27 -07:00
dotCooCoo 87eb51a089 Include alpha interpretation in frame-blend cache keys 2026-10-27 09:22:14 -07:00
Jeremy ca36861bde fix(installer): resolve the wizard scope and folder correctly
Real msiexec runs (per-user and all-users, silent and wizard) found two defects
that the metadata fixtures cannot see:

- "Only for me" published ALLUSERS=2, so FindRelatedProducts treated the run as
  per-machine and skipped the existing per-user copy. An interactive upgrade
  left two registered products and uninstall left files behind. The page now
  leaves ALLUSERS unset for a per-user choice.
- Windows Installer resolves Program Files once, for the context it started in,
  so choosing "Everyone" in the wizard installed into the user profile with a
  machine-wide registration. The wizard now sets the new-install folder itself
  after the choice (Program Files, Program Files (x86) for 32-bit, or the
  per-user Programs folder). Silent installs are unchanged.

check-install-policy.ps1 now fails if either regresses.
2026-10-27 15:32:20 +00:00