effectcraft/crates/engine/src
bflatastic 940bea3ba7 Effects: effect points on shape layers start at the layer centre (#227)
Shape and text layers have comp-sized effect bounds centred on their
origin, but effects measured positions from the origin: a point at its
default "layer centre" sat at the comp's bottom-right corner, so Twirl
on a centred shape changed nothing and Bulge only its bottom-right
quarter. As in After Effects, effects now work in effect space,
measured from the top-left of the layer's effect bounds.

The renderer moves the layer buffer into effect space for the whole
stack (Buf::rebase, CPU and GPU alike) and hands effects everything
else in it: masks, other layers' pixels for layer parameters (each in
its own effect space, so Set Matte and displacement maps see a whole
shape layer), the layer's own frames (layer_input, also what Puppet,
Roto Brush and the Layer panel read) and the comp camera
(CompScene::rebased). Layer bounds are now right for every effect, so
pin_rect and EffectEnv::bounds_origin go and layer_rect serves edge
pinning too. Adjustment layers still run on the comp below as it is.

effect_bounds / EvalCtx::effect_to_comp replace the repeated "comp size
when there is no source" code; the viewer's effect point handles and
eyedroppers, Puppet pins, the Layer panel (paint, Roto Brush) and the
tracker's Corner Pin output use them.

Project schema 2: opening a schema 1 project moves positions held by
effects on shape and text layers by half the comp size, so set points
keep their place (point parameters with keyframes, Paint paths and
clone positions, Puppet seeds and pins, Liquify and Roto Brush
strokes). Points still at their default become the layer centre;
expression controls, adjustment layers and expressions are left as
they are (docs/architecture.md). The disk cache's render version is
bumped.

Tests: default_effect_points_sit_at_the_centre_of_a_shape_layer and
layer_parameters_see_a_whole_shape_layer (render, both fail before),
effect_points_on_a_shape_layer (GPU vs CPU),
opening_a_schema_1_project_moves_shape_layer_effect_points_into_effect_space
(engine), and the effects migration tests.

Part of #227

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 20:33:03 +07:00
..
commands Effects: effect points on shape layers start at the layer centre (#227) 2026-10-08 20:33:03 +07:00
menus M3.13: menu bar: Group/Ungroup Shapes in the Layer menu, Window ▸ Learn, flowchart shortcuts, Center In View shortcut, Reveal in Explorer on Windows 2026-10-04 23:58:00 +07:00
autosave.rs M3.14: project files name the version that wrote them, never save unreadable, keep their format 2026-10-05 00:08:07 +07:00
camera_track.rs Effects: effect points on shape layers start at the layer centre (#227) 2026-10-08 20:33:03 +07:00
config.rs M13.1: branching history, puppet pin recording, WebAssembly plug-in API, ScriptUI model and hosts, File ▸ Scripts, deterministic render test 2026-10-03 04:07:20 -04:00
demo.rs M9.12: effect parameter fidelity – all categories 2026-10-03 00:15:06 -04:00
ease_presets.rs Keyframes: ease presets apply a saved curve to keyframe pairs (#254) 2026-10-08 17:25:00 +07:00
footage_check.rs M3.9: closing a modified project asks to save it first; the modified mark follows undo 2026-10-04 23:02:14 +07:00
guard.rs Never crash: last-resort guard around command execution, and a logging panic hook 2026-10-04 13:27:33 -04:00
history.rs M13.1: branching history, puppet pin recording, WebAssembly plug-in API, ScriptUI model and hosts, File ▸ Scripts, deterministic render test 2026-10-03 04:07:20 -04:00
jobs.rs M13.32: web main-thread stall: Warp Stabilizer plans solved in job workers 2026-10-04 03:40:46 -04:00
learn.rs M13.5: Home ▸ Learn tab with interactive tutorials (learn.list/start/step/stop/state, coach card, target highlight) 2026-10-03 05:25:45 -04:00
lib.rs Effects: effect points on shape layers start at the layer centre (#227) 2026-10-08 20:33:03 +07:00
links.rs Rename PrintCraft to PdfCraft (storytold/pdfcraft) (#207) 2026-10-07 15:37:26 -04:00
logging.rs Logging: RUST_LOG prints to stderr, and start-up logs its milestones (#234) 2026-10-08 13:32:16 +07:00
mask_track.rs M13.36: face tracking trained model — MediaPipe Face Landmarker on a pure-Rust TFLite interpreter 2026-10-05 20:39:45 +07:00
media_browser.rs M13.10: web frame workers fed by project diffs, offloaded Roto Brush propagation, non-blocking wait jobs, browser Media Browser 2026-10-03 08:36:00 -04:00
media_cache.rs G2: improve editing reliability and Windows rendering fidelity 2026-10-06 00:00:31 -05:00
menus.rs UI: Window > Ease Presets panel draws, edits and applies ease curves (#254) 2026-10-08 17:25:00 +07:00
models.rs M13.36: face tracking trained model — MediaPipe Face Landmarker on a pure-Rust TFLite interpreter 2026-10-05 20:39:45 +07:00
offload.rs M13.36: face tracking trained model — MediaPipe Face Landmarker on a pure-Rust TFLite interpreter 2026-10-05 20:39:45 +07:00
perf.rs Never crash: engine without expect() (job polling, commands, menus) 2026-10-04 13:40:46 -04:00
prefs.rs App: a launch whose window never drew makes the next use OpenGL (#243) 2026-10-08 13:57:21 +07:00
preview.rs M13.8: Preview panel shortcuts and Align panel commands 2026-10-03 07:38:46 -04:00
psd_import.rs M13.6: PSD smart objects apply perspective quads and placed-layer warps 2026-10-03 07:21:00 -04:00
remote.rs M13.30: web depth and polish 2026-10-04 02:57:17 -04:00
render_queue.rs CLI: --format hevc / av1 write HEVC / AV1; an unknown comp is named (#154, #155) 2026-10-07 12:28:12 +07:00
roto.rs Effects: effect points on shape layers start at the layer centre (#227) 2026-10-08 20:33:03 +07:00
rq_tests.rs G2: improve editing reliability and Windows rendering fidelity 2026-10-06 00:00:31 -05:00
scriptui.rs M13.11: scriptui concave fills, real images, wasm cfg gating 2026-10-03 10:28:56 -04:00
session_settings.rs Keyframes: ease presets apply a saved curve to keyframe pairs (#254) 2026-10-08 17:25:00 +07:00
shortcuts.rs M14.3: keyboard shortcut editor 2026-10-02 09:14:54 -04:00
storage.rs M13.24: web app depth (WEB-1) — GPU effects in frame workers, OPFS disk cache, storage manager 2026-10-03 18:35:03 -04:00
sysinfo.rs FreeBSD: system info reports memory, CPU model and OS version 2026-10-05 11:33:06 -04:00
templates.rs G2: improve editing reliability and Windows rendering fidelity 2026-10-06 00:00:31 -05:00
tests.rs Masks and Project panel: selecting a mask selects its points; linked Mask Feather; selection box (#203) 2026-10-07 22:13:19 +00:00
tests_3d.rs M7.3: Auto-Orient (along path, towards camera), Draft 3D, 3D switch off drops Z 2026-10-01 22:42:27 -04:00
tests_anim_tools.rs ANM-6, CMP-5, CMP-3: Wiggler/Smoother/Motion Sketch, marker dialog + timeline markers, pre-compose options + comp navigator 2026-10-02 10:47:02 -04:00
tests_camera_track.rs M12.6: 3D Camera Tracker effect + UI 2026-10-02 23:02:47 -04:00
tests_codec_options.rs Export: AV1 WebM refuses an explicit RGB + Alpha request (#166) 2026-10-07 15:48:17 +07:00
tests_color_view.rs M13.30: web depth and polish 2026-10-04 02:57:17 -04:00
tests_disk_cache.rs Preview: Audio, Lock and Shy keep the cache; playback with audio waits for frames (#103) 2026-10-07 01:46:35 +07:00
tests_ease_presets.rs Keyframes: ease presets apply a saved curve to keyframe pairs (#254) 2026-10-08 17:25:00 +07:00
tests_effects.rs Effects: effect points on shape layers start at the layer centre (#227) 2026-10-08 20:33:03 +07:00
tests_essential.rs M13.11: essential graphics mirrored and linked properties 2026-10-03 09:38:19 -04:00
tests_essential_more.rs Merge main into M13.11 (bokeh kernel_spans/blur_levels, Essential Graphics as_type controls with mirrors and links) 2026-10-03 09:54:37 -04:00
tests_face.rs M13.36: face tracking trained model — MediaPipe Face Landmarker on a pure-Rust TFLite interpreter 2026-10-05 20:39:45 +07:00
tests_fidelity.rs M4.4: collapse transformations + slip 2026-10-02 10:14:53 -04:00
tests_frame_export.rs M13.7: Save Frame As Photoshop Layers / ProEXR, Watch Folder, Vanishing Point (disabled), Create Nulls From Paths, VR Comp Editor, Help tutorials 2026-10-03 07:55:04 -04:00
tests_history.rs M3.9: a browser session restored with unsaved changes stays modified 2026-10-05 06:33:40 +07:00
tests_keylight.rs M5.16: Key Light: keyer eyedroppers pick from the effect input (effect.pickColor); "keylight" search 2026-10-05 11:04:10 +07:00
tests_lottie.rs M11.4: Lottie export/import 2026-10-02 08:56:03 -04:00
tests_m137.rs M13.7: Save Frame As Photoshop Layers / ProEXR, Watch Folder, Vanishing Point (disabled), Create Nulls From Paths, VR Comp Editor, Help tutorials 2026-10-03 07:55:04 -04:00
tests_m145.rs G2: improve editing reliability and Windows rendering fidelity 2026-10-06 00:00:31 -05:00
tests_markers.rs M13.33: nested comp markers on the precomp layer bar 2026-10-05 15:12:06 +07:00
tests_mask_warp.rs M13.32: web main-thread stall: Warp Stabilizer plans solved in job workers 2026-10-04 03:40:46 -04:00
tests_menu_cmds.rs Shapes: Duplicate duplicates the selected shape items, not the layer (#227) 2026-10-08 13:03:38 +07:00
tests_model3d.rs CMP-7: Essential Graphics controls, master properties, .ectemplate templates, Responsive Design — Time 2026-10-02 22:44:06 -04:00
tests_models.rs G2: improve editing reliability and Windows rendering fidelity 2026-10-06 00:00:31 -05:00
tests_motion_blur_depth.rs M4.13: motion blur of collapsed precomps and of animated shape / text content 2026-10-05 12:35:30 +07:00
tests_paint.rs M13.16: puppet Follow-Through — puppet.follow (Puppet tool bar ▸ Follow-Through…) makes pins trail a leader pin for hair, cloth and overlapping action: each follower's Position adds the leader's displacement from rest delayed by `delay` (the k-th nearest by k × delay with Cascade), scaled by Amount, keeping its own keyframes; leader = the first selected pin, followers = the others; one undo step; reachable over MCP (execute_command) 2026-10-04 00:19:26 +07:00
tests_panels.rs M13.30: Content-Aware Fill in a job worker on its GPU 2026-10-04 03:15:54 -04:00
tests_project_items.rs Edit: Delete removes selected animators, masks and shape groups (#151) 2026-10-07 13:32:40 +07:00
tests_proxy.rs Never crash: engine without expect() (job polling, commands, menus) 2026-10-04 13:40:46 -04:00
tests_rig3d.rs M7.7: camera/light rigs and Advanced 3D motion blur, blend modes, track mattes 2026-10-03 00:27:47 -04:00
tests_roto.rs G2: improve editing reliability and Windows rendering fidelity 2026-10-06 00:00:31 -05:00
tests_settings.rs Render: render.backend says why it renders on the CPU; mcp --gpu documented (#262) 2026-10-08 18:09:01 +07:00
tests_stubs.rs G2: improve editing reliability and Windows rendering fidelity 2026-10-06 00:00:31 -05:00
tests_styles.rs M9.4: layer styles render + commands 2026-10-02 00:00:00 -04:00
tests_tail.rs Fix variable-font animator test axis and endpoint selection 2026-10-07 21:38:19 -07:00
tests_text.rs Merge main (engine menu tree) into M9.6; wire text animation menus 2026-10-02 00:44:20 -04:00
tests_text_edit.rs test: tolerate installed variants of bundled font families 2026-10-06 16:40:12 -05:00
tests_timeline.rs M13.20: every Timeline property shortcut — double presses AA (Material Options), PP (paint / Roto Brush / Puppet), SS (selected properties), RR (Time Remap), TT (Mask Opacity), MM (all mask properties; a single M now shows Mask Path), FF (missing effects), EE (expressions) next to LL and UU; Alt+Shift+A/P/S/R/T add or remove a keyframe at the current time on every selected layer in one undo step (keys.toggleTransform: separated X/Y/Z Position, Orientation and X/Y/Z Rotation on 3D layers); Ctrl/Cmd+` twirls the selected layers open or closed (from a reveal, their full tree) 2026-10-04 01:10:33 +07:00
tests_timeline_interchange.rs Merge branch 'main' into worktree-agent-a9fea98fe9839069d (filmcraft rev 2c5ba7a: AAF and OMF interchange) 2026-10-04 00:45:00 -04:00
tests_track.rs CMP-7: Essential Graphics controls, master properties, .ectemplate templates, Responsive Design — Time 2026-10-02 22:44:06 -04:00
tests_vector_import.rs IO-2/SHP-5/PRV-2: PSD import, SVG import + vector/text conversions, persistent disk cache 2026-10-02 22:10:48 -04:00
tests_viewer.rs Viewer: Snapping options pick which layer features snap (#253) 2026-10-08 17:14:05 +07:00
tracking.rs Effects: effect points on shape layers start at the layer centre (#227) 2026-10-08 20:33:03 +07:00
vector.rs M13.12: Create Shapes from Vector Layer keeps images as parented footage layers in paint order 2026-10-03 09:23:29 -04:00
viewer.rs Viewer: Snapping options pick which layer features snap (#253) 2026-10-08 17:14:05 +07:00
warp.rs Effects: effect points on shape layers start at the layer centre (#227) 2026-10-08 20:33:03 +07:00
xml_project.rs M14.5: wire the remaining settings; keyframe assistants and labels; AE menu entries 2026-10-03 02:45:44 -04:00