Lightningbeam/lightningbeam-ui/lightningbeam-core/src
Skyler Lehmkuhl 1bfd09f151 Phase 3a-3: low-res image proxy for cold-scrub raster frames
Scrubbing onto a paged-out raster keyframe flashed blank for the 1-2 frames its
full pixels took to page in. Now a low-res proxy is shown in that gap.

- core: `MediaKind::RasterProxy` (id derived from the keyframe id via
  `raster_proxy_media_id`); `brush_engine::encode_raster_proxy_png` downscales a full
  RGBA buffer to a ≤192px-long-edge PNG. Save writes a proxy beside each resident
  frame's full PNG (paged-out frames keep their existing proxy row, like the full).
  Load eagerly decodes proxies (small) into `RasterKeyframe::proxy`.
- editor: a separate `proxy_layer_cache` in the GPU brush (own recency LRU, budget 64
  since each is ~1/100th a full frame) + `ensure_proxy_texture`/`get_proxy_texture`.
  The raster render, when the full texture isn't resident, blits the proxy mapped to
  the keyframe's FULL logical dims so it upscales via the sampler. F3 VRAM figure now
  includes proxy textures.

When the full pixels land (async fault-in), the full path takes over automatically.
Proxies only exist after a save+reload; freshly-painted unsaved frames stay resident
so they need none.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 20:05:46 -04:00
..
actions Phase 3b: bound resident raster pixels with an eviction LRU 2026-06-19 17:56:37 -04:00
dcel2 Merge branch 'rust-ui' of https://git.skyler.io/skyler/Lightningbeam into rust-ui 2026-03-09 13:41:48 -04:00
gpu Fix gamma handling and improve brush canvas performance 2026-06-16 08:32:39 -04:00
shaders Fix gamma handling and improve brush canvas performance 2026-06-16 08:32:39 -04:00
vector_graph work on vector graph 2026-03-22 18:16:17 -04:00
action.rs All events now have three time references for seconds, measures/beats, frames 2026-03-30 10:15:55 -04:00
animation.rs Group shapes 2026-02-20 11:13:56 -05:00
asset_folder.rs add folders to asset library 2025-12-30 00:45:19 -05:00
beam_archive.rs Phase 3a-3: low-res image proxy for cold-scrub raster frames 2026-06-20 20:05:46 -04:00
beat_time.rs Massive tempo refactor - make beats canonical time rep and allow them to be non constant 2026-04-02 10:26:01 -04:00
bezier_vertex.rs initial vector editing 2025-12-22 18:34:01 -05:00
bezpath_editing.rs initial vector editing 2025-12-22 18:34:01 -05:00
brush_engine.rs Phase 3a-3: low-res image proxy for cold-scrub raster frames 2026-06-20 20:05:46 -04:00
brush_settings.rs add brush library 2026-03-04 16:42:43 -05:00
clip.rs Phase 5: fix broken unit tests; cargo test --lib green again 2026-06-19 16:45:23 -04:00
clipboard.rs More work on DCEL correctness 2026-03-09 13:41:45 -04:00
clipboard_platform.rs Address Mac build failures 2026-03-09 22:03:51 -04:00
curve_intersection.rs Paint bucket 2025-11-19 01:47:37 -05:00
curve_intersections.rs rewrite vector backend again 2026-03-13 18:53:33 -04:00
curve_segment.rs Paint bucket 2025-11-19 01:47:37 -05:00
dcel.rs rewrite dcel 2026-02-26 18:48:21 -05:00
document.rs Phase 3a-1: lazy fault-in of raster keyframe pixels 2026-06-19 16:59:46 -04:00
effect.rs add folders to asset library 2025-12-30 00:45:19 -05:00
effect_layer.rs Phase 5: fix broken unit tests; cargo test --lib green again 2026-06-19 16:45:23 -04:00
effect_registry.rs Fix gamma handling and improve brush canvas performance 2026-06-16 08:32:39 -04:00
export.rs Massive tempo refactor - make beats canonical time rep and allow them to be non constant 2026-04-02 10:26:01 -04:00
file_io.rs Phase 3a-3: low-res image proxy for cold-scrub raster frames 2026-06-20 20:05:46 -04:00
file_types.rs Add asset pane 2025-11-30 06:54:53 -05:00
flood_fill.rs Magic wand selection 2026-03-07 03:39:09 -05:00
gap_handling.rs Paint bucket 2025-11-19 01:47:37 -05:00
gradient.rs Add gradient support to vector graphics 2026-03-10 00:57:47 -04:00
hit_test.rs Massive tempo refactor - make beats canonical time rep and allow them to be non constant 2026-04-02 10:26:01 -04:00
instance_group.rs Audio from videos 2025-12-03 01:04:09 -05:00
intersection_graph.rs Clean up build warnings 2026-02-14 11:07:32 -05:00
layer.rs Make beats canonical representation rather than seconds 2026-06-02 13:06:36 -04:00
layer_tree.rs Initial work on movie clips 2026-02-21 00:54:38 -05:00
layout.rs Add Rust desktop UI with Blender-style pane system 2025-11-12 06:13:00 -05:00
lib.rs Phase 3a-1: lazy fault-in of raster keyframe pixels 2026-06-19 16:59:46 -04:00
object.rs tests 2025-11-29 13:39:31 -05:00
pane.rs Add script node 2026-02-19 09:29:14 -05:00
path_fitting.rs Clean up build warnings 2026-02-14 11:07:32 -05:00
path_interpolation.rs Render shape on stage 2025-11-16 02:40:06 -05:00
planar_graph.rs Clean up build warnings 2026-02-14 11:07:32 -05:00
quadtree.rs Paint bucket 2025-11-19 01:47:37 -05:00
raster_draw.rs Shape tools 2026-03-07 07:27:45 -05:00
raster_layer.rs Phase 3a-3: low-res image proxy for cold-scrub raster frames 2026-06-20 20:05:46 -04:00
raster_store.rs Phase 3a-1: lazy fault-in of raster keyframe pixels 2026-06-19 16:59:46 -04:00
region_select.rs rewrite dcel 2026-02-26 18:48:21 -05:00
renderer.rs Downmix surround to stereo + reload video audio via FFmpeg 2026-06-17 18:30:42 -04:00
script.rs Add script node 2026-02-19 09:29:14 -05:00
segment_builder.rs Clean up build warnings 2026-02-14 11:07:32 -05:00
selection.rs work on vector graph 2026-03-22 18:16:17 -04:00
shape.rs Phase 5: fix broken unit tests; cargo test --lib green again 2026-06-19 16:45:23 -04:00
snap.rs work on vector graph 2026-03-22 18:16:17 -04:00
svg_export.rs More work on DCEL correctness 2026-03-09 13:41:45 -04:00
tempo_map.rs Massive tempo refactor - make beats canonical time rep and allow them to be non constant 2026-04-02 10:26:01 -04:00
test_mode.rs Fix DCEL selection bugs 2026-03-05 19:55:39 -05:00
tolerance_quadtree.rs Paint bucket 2025-11-19 01:47:37 -05:00
tool.rs work on vector graph 2026-03-22 18:16:17 -04:00
video.rs Fix video thumbnail strip bugs + persist thumbnails (resumable) 2026-06-17 15:36:56 -04:00
webcam.rs Record to multiple layers 2026-03-01 13:48:43 -05:00