Skip to content

Release v0.5 — more improvements#7

Merged
AlanRockefeller merged 1 commit intomainfrom
test
Nov 3, 2025
Merged

Release v0.5 — more improvements#7
AlanRockefeller merged 1 commit intomainfrom
test

Conversation

@AlanRockefeller
Copy link
Copy Markdown
Owner

@AlanRockefeller AlanRockefeller commented Nov 3, 2025

[0.5.0] - 2025-11-03

Added

  • Load full-resolution images when zooming in for maximum detail.
  • Call Helicon Focus for each defined stack when multiple stacks are present.

Changed

  • The filesystem watcher is now less sensitive to spurious modification events, reducing unnecessary refreshes.
  • The preloading process now shares the same thread pool as the prefetcher for better resource utilization.
  • Stacks are now cleared automatically after being sent to Helicon Focus.

Fixed

  • Corrected a ValueError in PyTurboJPEG caused by unsupported scaling factors.
  • Resolved an AttributeError in the JPEG scaling factor calculation.
  • Fixed an issue where panning the image was not working correctly.
  • Addressed a bug where panning speed was incorrect at high zoom levels.
  • Ensured that stale prefetcher futures are cancelled when the display size changes.

Performance

  • Improved image decoding performance by using PyTurboJPEG for resized decoding.
  • Tuned the number of prefetcher thread pool workers based on system CPU cores.
  • Replaced synchronous file reads with memory-mapped I/O for faster image loading.
  • Optimized image resizing by using BILINEAR resampling for large downscales.
  • Debounced display size change notifications to reduce redundant UI updates.

Summary by CodeRabbit

  • New Features

    • Load full-resolution images when zooming
    • Zoom and pan support in image viewer
    • Multi-stack Helicon Focus integration
  • Bug Fixes

    • Resolved JPEG decoding and panning issues
    • Fixed stale prefetch cancellation on display resize
    • Added zoom state guards to prevent redundant changes
  • Improvements

    • Reduced filesystem watcher sensitivity
    • Auto-clear stacks after Helicon Focus processing
    • Debounced UI resize updates
    • Performance optimizations for image decoding and prefetching

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Nov 3, 2025

Walkthrough

Version 0.5.0 release with zoom/pan display handling, Helicon Focus multi-stack workflow refactoring, unified preloading integrated with the prefetcher, PyTurboJPEG-accelerated JPEG decoding, memory-mapped I/O for prefetching, thread pool tuning, filesystem watcher event-handler refactoring, and QML zoom/pan with debounced resize.

Changes

Cohort / File(s) Summary
Version and documentation
faststack/ChangeLog.md, faststack/pyproject.toml
Version bumped to 0.5.0; ChangeLog entry added documenting new zoom/pan, Helicon multi-stack, preloading refactor, and performance optimizations; previous version 0.4 section added with todo.
Core application controller
faststack/faststack/app.py
Zoom-aware display handling with is_zoomed state and set_zoomed() method; display/cache invalidation and prefetch cancellation on resize; Helicon workflow refactored for multi-stack handling with per-stack raw file lists and stack clearing; preloading logic unified via callback-based approach using shared prefetcher; removed dedicated preload_executor.
JPEG decoding optimizations
faststack/faststack/imaging/jpeg.py
PyTurboJPEG-enabled fast path in decode_jpeg_resized with scaling factor selection; thumbnail decoding enhanced via decode_header; error logging improved to capture tracebacks; resampling method selection based on downscale factor (BILINEAR for large downscales, LANCZOS otherwise).
Prefetching and I/O
faststack/faststack/imaging/prefetch.py
Memory-mapped file I/O for image decoding; thread pool sizing tuned to min((cpu_count \* 2), 8) instead of fixed 4.
Filesystem watching
faststack/faststack/io/watcher.py
Replaced generic on_any_event with explicit on_created, on_deleted, on_moved, on_modified handlers; ephemeral file filtering; enhanced Watcher lifecycle with robust start/stop/is_alive logic.
QML display components
faststack/faststack/qml/Components.qml
Debounced resize handling via resizeDebounceTimer; Transform stack (Scale and Translate) for zoom/pan; MouseArea tracking for drag-based panning and wheel-based zoom; onScaleChanged handler to toggle zoom state.
QML menu
faststack/faststack/qml/Main.qml
Removed all Menu items and Actions from MenuBar (File, View, Actions, Help menus stripped).
UI state provider
faststack/faststack/ui/provider.py
Added isZoomedChanged signal, isZoomed property, and setZoomed(slot) for zoom state synchronization between QML and app controller.

Sequence Diagram(s)

sequenceDiagram
    participant QML
    participant UIState
    participant AppCtrl
    participant Prefetcher

    QML->>UIState: setZoomed(true)
    UIState->>AppCtrl: set_zoomed(true)
    AppCtrl->>AppCtrl: is_zoomed = true
    AppCtrl->>Prefetcher: cancel_all()
    AppCtrl->>AppCtrl: clear image cache
    AppCtrl->>UIState: emit zoom state signal
    UIState->>QML: isZoomedChanged(true)
    
    Note over QML: get_display_info short-circuited<br/>returns (0, 0, generation)
Loading
sequenceDiagram
    participant QML
    participant AppCtrl
    participant HelicFocus
    participant Sidecar

    QML->>AppCtrl: launch_helicon()
    AppCtrl->>AppCtrl: has_multiple_stacks?
    alt Multiple stacks
        AppCtrl->>AppCtrl: build per-stack raw file lists
    else Single/No stack
        AppCtrl->>AppCtrl: use selected RAWs
    end
    AppCtrl->>AppCtrl: _launch_helicon_with_files(file_list)
    AppCtrl->>HelicFocus: launch_helicon_focus(files)
    AppCtrl->>Sidecar: persist stacking metadata<br/>(stacked, stacked_date)
    AppCtrl->>AppCtrl: clear stacks
Loading
sequenceDiagram
    participant QML as Display
    participant AppCtrl as AppController
    participant Prefetcher
    participant JPEG

    QML->>AppCtrl: onDisplaySizeChanged (debounced)
    AppCtrl->>AppCtrl: display_generation++
    AppCtrl->>Prefetcher: cancel_all()
    AppCtrl->>Prefetcher: start_prefetch(current_index)
    
    Prefetcher->>Prefetcher: _decode_and_cache(image)
    Prefetcher->>JPEG: decode_jpeg_resized (mmap I/O)
    JPEG->>JPEG: TurboJPEG fast path<br/>(if available)
    JPEG-->>Prefetcher: decoded image
    Prefetcher-->>AppCtrl: emit progress
    AppCtrl-->>QML: refresh UI
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Areas requiring extra attention:

  • app.py: Zoom state machine integration (is_zoomed guard logic), Helicon multi-stack file list building and stack clearing semantics, preloading callback-based flow integration with existing prefetcher, cancellation logic interaction with display size changes.
  • imaging/jpeg.py: PyTurboJPEG scaling factor selection logic and fallback handling, resampling method selection (BILINEAR vs LANCZOS) threshold rationale, error logging changes across multiple code paths.
  • imaging/prefetch.py: Memory-mapped I/O correctness (mmap lifecycle, file handle management), thread pool sizing formula and implications for I/O-bound workload (min((cpu_count * 2), 8)).
  • qml/Components.qml: Debounce timer interaction with initial Component.onCompleted, Transform scale/translate interaction with MouseArea pan tracking, zoom state signal propagation.

Possibly related PRs

Pre-merge checks and finishing touches

✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title 'Release v0.5 — more improvements' directly corresponds to the main changes in the changeset. The PR bumps the version to 0.5 in pyproject.toml, adds a comprehensive ChangeLog entry for Version 0.5.0, and implements numerous features and optimizations documented in the objectives. While the phrase 'more improvements' is somewhat generic, it is paired with the specific version identifier and clearly indicates this is a release commit for v0.5, which aligns with the core purpose of the changeset.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch test

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@AlanRockefeller
Copy link
Copy Markdown
Owner Author

@coderabbitai I made many of the changes you suggested for performance improvements. Analyze this debug log snippet and consider what the rest of the code is doing to see if further performance or functionality enhancements can be made - or if there is code that isn't doing what it is supposed to do.

2025-11-03 02:18:28,665 - main - INFO - Starting FastStack
2025-11-03 02:18:28,740 - faststack.imaging.cache - INFO - Initialized byte-aware LRU cache with 5120.00 MB capacity.
2025-11-03 02:18:28,877 - main - DEBUG - get_current_metadata: image_files is empty, returning {}.
2025-11-03 02:18:28,877 - main - DEBUG - get_current_metadata: image_files is empty, returning {}.
2025-11-03 02:18:28,877 - main - DEBUG - get_current_metadata: image_files is empty, returning {}.
2025-11-03 02:18:28,878 - main - DEBUG - get_current_metadata: image_files is empty, returning {}.
2025-11-03 02:18:28,878 - main - DEBUG - get_current_metadata: image_files is empty, returning {}.
2025-11-03 02:18:28,878 - main - DEBUG - get_current_metadata: image_files is empty, returning {}.
2025-11-03 02:18:28,878 - main - DEBUG - get_current_metadata: image_files is empty, returning {}.
2025-11-03 02:18:28,878 - main - DEBUG - get_current_metadata: image_files is empty, returning {}.
2025-11-03 02:18:28,878 - main - DEBUG - get_current_metadata: image_files is empty, returning {}.
2025-11-03 02:18:29,305 - faststack.io.indexer - INFO - Scanning directory for images: C:\Users\alanr\Pictures\Lightroom\2025\2025-10-30
2025-11-03 02:18:29,392 - faststack.io.indexer - INFO - Found 1400 JPG files and paired 1258 with RAWs.
2025-11-03 02:18:29,393 - faststack.imaging.prefetch - INFO - Cancelling all prefetch tasks.
2025-11-03 02:18:29,393 - main - WARNING - Cache miss for index 0 (gen: 0). Forcing synchronous load.
2025-11-03 02:18:29,394 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 0
2025-11-03 02:18:29,499 - faststack.imaging.cache - DEBUG - Cached item '0_0'. Cache size: 57.67 MB
2025-11-03 02:18:29,499 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 0 for display gen 0
2025-11-03 02:18:29,516 - faststack.io.watcher - INFO - Started watching directory: C:\Users\alanr\Pictures\Lightroom\2025\2025-10-30
2025-11-03 02:18:29,516 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1051, generation 2
2025-11-03 02:18:29,516 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1031
2025-11-03 02:18:29,522 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1032
2025-11-03 02:18:29,526 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1033
2025-11-03 02:18:29,531 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1034
2025-11-03 02:18:29,535 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1035
2025-11-03 02:18:29,540 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1036
2025-11-03 02:18:29,551 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1037
2025-11-03 02:18:29,552 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1038
2025-11-03 02:18:29,552 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1039
2025-11-03 02:18:29,552 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1040
2025-11-03 02:18:29,556 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1041
2025-11-03 02:18:29,556 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1042
2025-11-03 02:18:29,557 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1043
2025-11-03 02:18:29,557 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1044
2025-11-03 02:18:29,557 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1045
2025-11-03 02:18:29,557 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1046
2025-11-03 02:18:29,557 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1047
2025-11-03 02:18:29,557 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1048
2025-11-03 02:18:29,557 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1049
2025-11-03 02:18:29,557 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1050
2025-11-03 02:18:29,557 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1051
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1052
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1053
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1054
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1055
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1056
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1057
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1058
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1059
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1060
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1061
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1062
2025-11-03 02:18:29,558 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1063
2025-11-03 02:18:29,559 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1064
2025-11-03 02:18:29,559 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1065
2025-11-03 02:18:29,559 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1066
2025-11-03 02:18:29,559 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1067
2025-11-03 02:18:29,559 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1068
2025-11-03 02:18:29,559 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1069
2025-11-03 02:18:29,559 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1070
2025-11-03 02:18:29,559 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1071
2025-11-03 02:18:29,564 - main - WARNING - Cache miss for index 1051 (gen: 0). Forcing synchronous load.
2025-11-03 02:18:29,659 - faststack.imaging.cache - DEBUG - Cached item '1032_0'. Cache size: 115.33 MB
2025-11-03 02:18:29,659 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1032 for display gen 0
2025-11-03 02:18:29,669 - faststack.imaging.cache - DEBUG - Cached item '1034_0'. Cache size: 173.00 MB
2025-11-03 02:18:29,669 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1034 for display gen 0
2025-11-03 02:18:29,670 - faststack.imaging.cache - DEBUG - Cached item '1031_0'. Cache size: 230.66 MB
2025-11-03 02:18:29,670 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1031 for display gen 0
2025-11-03 02:18:29,675 - faststack.imaging.cache - DEBUG - Cached item '1035_0'. Cache size: 288.33 MB
2025-11-03 02:18:29,675 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1035 for display gen 0
2025-11-03 02:18:29,686 - faststack.imaging.cache - DEBUG - Cached item '1036_0'. Cache size: 345.99 MB
2025-11-03 02:18:29,687 - faststack.imaging.cache - DEBUG - Cached item '1033_0'. Cache size: 403.66 MB
2025-11-03 02:18:29,687 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1036 for display gen 0
2025-11-03 02:18:29,687 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1033 for display gen 0
2025-11-03 02:18:29,697 - faststack.imaging.cache - DEBUG - Cached item '1038_0'. Cache size: 461.32 MB
2025-11-03 02:18:29,697 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1038 for display gen 0
2025-11-03 02:18:29,703 - faststack.imaging.cache - DEBUG - Cached item '1037_0'. Cache size: 518.99 MB
2025-11-03 02:18:29,703 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1037 for display gen 0
2025-11-03 02:18:29,788 - faststack.imaging.cache - DEBUG - Cached item '1039_0'. Cache size: 576.65 MB
2025-11-03 02:18:29,788 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1039 for display gen 0
2025-11-03 02:18:29,813 - faststack.imaging.cache - DEBUG - Cached item '1041_0'. Cache size: 634.32 MB
2025-11-03 02:18:29,813 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1041 for display gen 0
2025-11-03 02:18:29,823 - faststack.imaging.cache - DEBUG - Cached item '1040_0'. Cache size: 691.98 MB
2025-11-03 02:18:29,823 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1040 for display gen 0
2025-11-03 02:18:29,829 - faststack.imaging.cache - DEBUG - Cached item '1042_0'. Cache size: 749.65 MB
2025-11-03 02:18:29,829 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1042 for display gen 0
2025-11-03 02:18:29,830 - faststack.imaging.cache - DEBUG - Cached item '1044_0'. Cache size: 807.31 MB
2025-11-03 02:18:29,830 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1044 for display gen 0
2025-11-03 02:18:29,842 - faststack.imaging.cache - DEBUG - Cached item '1043_0'. Cache size: 864.98 MB
2025-11-03 02:18:29,842 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1043 for display gen 0
2025-11-03 02:18:29,842 - faststack.imaging.cache - DEBUG - Cached item '1045_0'. Cache size: 922.64 MB
2025-11-03 02:18:29,842 - faststack.imaging.cache - DEBUG - Cached item '1046_0'. Cache size: 980.31 MB
2025-11-03 02:18:29,843 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1045 for display gen 0
2025-11-03 02:18:29,848 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1046 for display gen 0
2025-11-03 02:18:29,935 - faststack.imaging.cache - DEBUG - Cached item '1047_0'. Cache size: 1037.97 MB
2025-11-03 02:18:29,935 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1047 for display gen 0
2025-11-03 02:18:29,971 - faststack.imaging.cache - DEBUG - Cached item '1049_0'. Cache size: 1095.64 MB
2025-11-03 02:18:29,971 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1049 for display gen 0
2025-11-03 02:18:29,980 - faststack.imaging.cache - DEBUG - Cached item '1050_0'. Cache size: 1153.30 MB
2025-11-03 02:18:29,980 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1050 for display gen 0
2025-11-03 02:18:29,987 - faststack.imaging.cache - DEBUG - Cached item '1048_0'. Cache size: 1210.97 MB
2025-11-03 02:18:29,987 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1048 for display gen 0
2025-11-03 02:18:29,995 - faststack.imaging.cache - DEBUG - Cached item '1052_0'. Cache size: 1268.63 MB
2025-11-03 02:18:29,995 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1052 for display gen 0
2025-11-03 02:18:30,007 - faststack.imaging.cache - DEBUG - Cached item '1051_0'. Cache size: 1326.30 MB
2025-11-03 02:18:30,007 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1051 for display gen 0
2025-11-03 02:18:30,015 - faststack.imaging.cache - DEBUG - Cached item '1053_0'. Cache size: 1383.96 MB
2025-11-03 02:18:30,016 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1053 for display gen 0
2025-11-03 02:18:30,040 - faststack.imaging.cache - DEBUG - Cached item '1054_0'. Cache size: 1441.63 MB
2025-11-03 02:18:30,040 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1054 for display gen 0
2025-11-03 02:18:30,050 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,050 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,050 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,051 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,051 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,051 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,051 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,051 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,051 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,051 - main - DEBUG - UI State Synced: Index=1051, Count=1400
2025-11-03 02:18:30,051 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,051 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,051 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,051 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,051 - main - DEBUG - Metadata Synced: Filename=20251030-PA305860.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:30,122 - faststack.imaging.cache - DEBUG - Cached item '1055_0'. Cache size: 1499.29 MB
2025-11-03 02:18:30,122 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1055 for display gen 0
2025-11-03 02:18:30,133 - faststack.imaging.cache - DEBUG - Cached item '1056_0'. Cache size: 1556.96 MB
2025-11-03 02:18:30,133 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1056 for display gen 0
2025-11-03 02:18:30,149 - faststack.imaging.cache - DEBUG - Cached item '1057_0'. Cache size: 1614.62 MB
2025-11-03 02:18:30,150 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1057 for display gen 0
2025-11-03 02:18:30,160 - faststack.imaging.cache - DEBUG - Cached item '1058_0'. Cache size: 1672.29 MB
2025-11-03 02:18:30,160 - faststack.imaging.cache - DEBUG - Cached item '1059_0'. Cache size: 1729.95 MB
2025-11-03 02:18:30,160 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1058 for display gen 0
2025-11-03 02:18:30,160 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1059 for display gen 0
2025-11-03 02:18:30,197 - faststack.imaging.cache - DEBUG - Cached item '1060_0'. Cache size: 1787.62 MB
2025-11-03 02:18:30,197 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1060 for display gen 0
2025-11-03 02:18:30,208 - faststack.imaging.cache - DEBUG - Cached item '1061_0'. Cache size: 1845.28 MB
2025-11-03 02:18:30,208 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1061 for display gen 0
2025-11-03 02:18:30,223 - faststack.imaging.cache - DEBUG - Cached item '1062_0'. Cache size: 1902.95 MB
2025-11-03 02:18:30,224 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1062 for display gen 0
2025-11-03 02:18:30,248 - main - INFO - Display size changed to: 1536x863
2025-11-03 02:18:30,248 - faststack.imaging.cache - DEBUG - Evicted item '0_0' to free up space. Cache size: 1845.28 MB
2025-11-03 02:18:30,253 - faststack.imaging.cache - DEBUG - Evicted item '1032_0' to free up space. Cache size: 1787.62 MB
2025-11-03 02:18:30,258 - faststack.imaging.cache - DEBUG - Evicted item '1034_0' to free up space. Cache size: 1729.95 MB
2025-11-03 02:18:30,262 - faststack.imaging.cache - DEBUG - Evicted item '1031_0' to free up space. Cache size: 1672.29 MB
2025-11-03 02:18:30,265 - faststack.imaging.cache - DEBUG - Evicted item '1035_0' to free up space. Cache size: 1614.62 MB
2025-11-03 02:18:30,268 - faststack.imaging.cache - DEBUG - Evicted item '1036_0' to free up space. Cache size: 1556.96 MB
2025-11-03 02:18:30,272 - faststack.imaging.cache - DEBUG - Evicted item '1033_0' to free up space. Cache size: 1499.29 MB
2025-11-03 02:18:30,277 - faststack.imaging.cache - DEBUG - Evicted item '1038_0' to free up space. Cache size: 1441.63 MB
2025-11-03 02:18:30,281 - faststack.imaging.cache - DEBUG - Evicted item '1037_0' to free up space. Cache size: 1383.96 MB
2025-11-03 02:18:30,285 - faststack.imaging.cache - DEBUG - Evicted item '1039_0' to free up space. Cache size: 1326.30 MB
2025-11-03 02:18:30,289 - faststack.imaging.cache - DEBUG - Evicted item '1041_0' to free up space. Cache size: 1268.63 MB
2025-11-03 02:18:30,293 - faststack.imaging.cache - DEBUG - Cached item '1063_0'. Cache size: 1326.30 MB
2025-11-03 02:18:30,293 - faststack.imaging.cache - DEBUG - Evicted item '1040_0' to free up space. Cache size: 1268.63 MB
2025-11-03 02:18:30,293 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1063 for display gen 0
2025-11-03 02:18:30,296 - faststack.imaging.cache - DEBUG - Evicted item '1042_0' to free up space. Cache size: 1210.97 MB
2025-11-03 02:18:30,300 - faststack.imaging.cache - DEBUG - Evicted item '1044_0' to free up space. Cache size: 1153.30 MB
2025-11-03 02:18:30,303 - faststack.imaging.cache - DEBUG - Evicted item '1043_0' to free up space. Cache size: 1095.64 MB
2025-11-03 02:18:30,306 - faststack.imaging.cache - DEBUG - Evicted item '1045_0' to free up space. Cache size: 1037.97 MB
2025-11-03 02:18:30,315 - faststack.imaging.cache - DEBUG - Evicted item '1046_0' to free up space. Cache size: 980.31 MB
2025-11-03 02:18:30,318 - faststack.imaging.cache - DEBUG - Evicted item '1047_0' to free up space. Cache size: 922.64 MB
2025-11-03 02:18:30,318 - faststack.imaging.cache - DEBUG - Cached item '1065_0'. Cache size: 980.31 MB
2025-11-03 02:18:30,323 - faststack.imaging.cache - DEBUG - Evicted item '1049_0' to free up space. Cache size: 922.64 MB
2025-11-03 02:18:30,323 - faststack.imaging.cache - DEBUG - Cached item '1064_0'. Cache size: 980.31 MB
2025-11-03 02:18:30,323 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1065 for display gen 0
2025-11-03 02:18:30,328 - faststack.imaging.cache - DEBUG - Evicted item '1050_0' to free up space. Cache size: 922.64 MB
2025-11-03 02:18:30,328 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1064 for display gen 0
2025-11-03 02:18:30,328 - faststack.imaging.cache - DEBUG - Cached item '1066_0'. Cache size: 980.31 MB
2025-11-03 02:18:30,334 - faststack.imaging.cache - DEBUG - Evicted item '1048_0' to free up space. Cache size: 922.64 MB
2025-11-03 02:18:30,334 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1066 for display gen 0
2025-11-03 02:18:30,340 - faststack.imaging.cache - DEBUG - Evicted item '1052_0' to free up space. Cache size: 864.98 MB
2025-11-03 02:18:30,346 - faststack.imaging.cache - DEBUG - Evicted item '1051_0' to free up space. Cache size: 807.31 MB
2025-11-03 02:18:30,346 - faststack.imaging.cache - DEBUG - Cached item '1067_0'. Cache size: 864.98 MB
2025-11-03 02:18:30,351 - faststack.imaging.cache - DEBUG - Evicted item '1053_0' to free up space. Cache size: 807.31 MB
2025-11-03 02:18:30,351 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1067 for display gen 0
2025-11-03 02:18:30,357 - faststack.imaging.cache - DEBUG - Evicted item '1054_0' to free up space. Cache size: 749.65 MB
2025-11-03 02:18:30,363 - faststack.imaging.cache - DEBUG - Evicted item '1055_0' to free up space. Cache size: 691.98 MB
2025-11-03 02:18:30,368 - faststack.imaging.cache - DEBUG - Evicted item '1056_0' to free up space. Cache size: 634.32 MB
2025-11-03 02:18:30,368 - faststack.imaging.cache - DEBUG - Cached item '1068_0'. Cache size: 691.98 MB
2025-11-03 02:18:30,368 - faststack.imaging.cache - DEBUG - Cached item '1070_0'. Cache size: 749.65 MB
2025-11-03 02:18:30,368 - faststack.imaging.cache - DEBUG - Cached item '1069_0'. Cache size: 807.31 MB
2025-11-03 02:18:30,374 - faststack.imaging.cache - DEBUG - Evicted item '1057_0' to free up space. Cache size: 749.65 MB
2025-11-03 02:18:30,374 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1068 for display gen 0
2025-11-03 02:18:30,374 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1070 for display gen 0
2025-11-03 02:18:30,374 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1069 for display gen 0
2025-11-03 02:18:30,380 - faststack.imaging.cache - DEBUG - Evicted item '1058_0' to free up space. Cache size: 691.98 MB
2025-11-03 02:18:30,388 - faststack.imaging.cache - DEBUG - Evicted item '1059_0' to free up space. Cache size: 634.32 MB
2025-11-03 02:18:30,393 - faststack.imaging.cache - DEBUG - Evicted item '1060_0' to free up space. Cache size: 576.65 MB
2025-11-03 02:18:30,398 - faststack.imaging.cache - DEBUG - Evicted item '1061_0' to free up space. Cache size: 518.99 MB
2025-11-03 02:18:30,403 - faststack.imaging.cache - DEBUG - Evicted item '1062_0' to free up space. Cache size: 461.32 MB
2025-11-03 02:18:30,408 - faststack.imaging.cache - DEBUG - Evicted item '1063_0' to free up space. Cache size: 403.66 MB
2025-11-03 02:18:30,413 - faststack.imaging.cache - DEBUG - Evicted item '1065_0' to free up space. Cache size: 345.99 MB
2025-11-03 02:18:30,416 - faststack.imaging.cache - DEBUG - Evicted item '1064_0' to free up space. Cache size: 288.33 MB
2025-11-03 02:18:30,421 - faststack.imaging.cache - DEBUG - Evicted item '1066_0' to free up space. Cache size: 230.66 MB
2025-11-03 02:18:30,425 - faststack.imaging.cache - DEBUG - Evicted item '1067_0' to free up space. Cache size: 173.00 MB
2025-11-03 02:18:30,429 - faststack.imaging.cache - DEBUG - Evicted item '1068_0' to free up space. Cache size: 115.33 MB
2025-11-03 02:18:30,431 - faststack.imaging.cache - DEBUG - Evicted item '1070_0' to free up space. Cache size: 57.67 MB
2025-11-03 02:18:30,435 - faststack.imaging.cache - DEBUG - Evicted item '1069_0' to free up space. Cache size: 0.00 MB
2025-11-03 02:18:30,438 - faststack.imaging.prefetch - INFO - Cancelling all prefetch tasks.
2025-11-03 02:18:30,438 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1051, generation 4
2025-11-03 02:18:30,438 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1031
2025-11-03 02:18:30,438 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1032
2025-11-03 02:18:30,438 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1033
2025-11-03 02:18:30,442 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1034
2025-11-03 02:18:30,443 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1035
2025-11-03 02:18:30,443 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1036
2025-11-03 02:18:30,447 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1037
2025-11-03 02:18:30,447 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1038
2025-11-03 02:18:30,447 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1039
2025-11-03 02:18:30,447 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1040
2025-11-03 02:18:30,448 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1041
2025-11-03 02:18:30,448 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1071 before caching. Skipping cache_put.
2025-11-03 02:18:30,448 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1042
2025-11-03 02:18:30,469 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1043
2025-11-03 02:18:30,474 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1044
2025-11-03 02:18:30,474 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1045
2025-11-03 02:18:30,474 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1046
2025-11-03 02:18:30,479 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1047
2025-11-03 02:18:30,479 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1048
2025-11-03 02:18:30,479 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1049
2025-11-03 02:18:30,479 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1050
2025-11-03 02:18:30,480 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1051
2025-11-03 02:18:30,480 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1052
2025-11-03 02:18:30,480 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1053
2025-11-03 02:18:30,480 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1054
2025-11-03 02:18:30,480 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1055
2025-11-03 02:18:30,480 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1056
2025-11-03 02:18:30,480 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1057
2025-11-03 02:18:30,481 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1058
2025-11-03 02:18:30,481 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1059
2025-11-03 02:18:30,481 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1060
2025-11-03 02:18:30,481 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1061
2025-11-03 02:18:30,481 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1062
2025-11-03 02:18:30,481 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1063
2025-11-03 02:18:30,481 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1064
2025-11-03 02:18:30,482 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1065
2025-11-03 02:18:30,482 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1066
2025-11-03 02:18:30,482 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1067
2025-11-03 02:18:30,482 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1068
2025-11-03 02:18:30,482 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1069
2025-11-03 02:18:30,482 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1070
2025-11-03 02:18:30,482 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1071
2025-11-03 02:18:30,493 - main - WARNING - Cache miss for index 1051 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:30,585 - faststack.imaging.cache - DEBUG - Cached item '1031_1'. Cache size: 2.84 MB
2025-11-03 02:18:30,585 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1031 for display gen 1
2025-11-03 02:18:30,613 - faststack.imaging.cache - DEBUG - Cached item '1033_1'. Cache size: 5.68 MB
2025-11-03 02:18:30,614 - faststack.imaging.cache - DEBUG - Cached item '1036_1'. Cache size: 8.53 MB
2025-11-03 02:18:30,615 - faststack.imaging.cache - DEBUG - Cached item '1038_1'. Cache size: 11.37 MB
2025-11-03 02:18:30,615 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1033 for display gen 1
2025-11-03 02:18:30,617 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1036 for display gen 1
2025-11-03 02:18:30,618 - faststack.imaging.cache - DEBUG - Cached item '1032_1'. Cache size: 14.21 MB
2025-11-03 02:18:30,618 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1038 for display gen 1
2025-11-03 02:18:30,621 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1032 for display gen 1
2025-11-03 02:18:30,637 - faststack.imaging.cache - DEBUG - Cached item '1035_1'. Cache size: 17.05 MB
2025-11-03 02:18:30,637 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1035 for display gen 1
2025-11-03 02:18:30,654 - faststack.imaging.cache - DEBUG - Cached item '1034_1'. Cache size: 19.89 MB
2025-11-03 02:18:30,659 - faststack.imaging.cache - DEBUG - Cached item '1037_1'. Cache size: 22.74 MB
2025-11-03 02:18:30,659 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1037 for display gen 1
2025-11-03 02:18:30,659 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1034 for display gen 1
2025-11-03 02:18:30,716 - faststack.imaging.cache - DEBUG - Cached item '1039_1'. Cache size: 25.58 MB
2025-11-03 02:18:30,716 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1039 for display gen 1
2025-11-03 02:18:30,758 - faststack.imaging.cache - DEBUG - Cached item '1041_1'. Cache size: 28.42 MB
2025-11-03 02:18:30,758 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1041 for display gen 1
2025-11-03 02:18:30,768 - faststack.imaging.cache - DEBUG - Cached item '1040_1'. Cache size: 31.26 MB
2025-11-03 02:18:30,768 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1040 for display gen 1
2025-11-03 02:18:30,778 - faststack.imaging.cache - DEBUG - Cached item '1042_1'. Cache size: 34.10 MB
2025-11-03 02:18:30,779 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1042 for display gen 1
2025-11-03 02:18:30,805 - faststack.imaging.cache - DEBUG - Cached item '1044_1'. Cache size: 36.94 MB
2025-11-03 02:18:30,805 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1044 for display gen 1
2025-11-03 02:18:30,817 - faststack.imaging.cache - DEBUG - Cached item '1045_1'. Cache size: 39.79 MB
2025-11-03 02:18:30,818 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1045 for display gen 1
2025-11-03 02:18:30,825 - faststack.imaging.cache - DEBUG - Cached item '1046_1'. Cache size: 42.63 MB
2025-11-03 02:18:30,825 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1046 for display gen 1
2025-11-03 02:18:30,826 - faststack.imaging.cache - DEBUG - Cached item '1043_1'. Cache size: 45.47 MB
2025-11-03 02:18:30,826 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1043 for display gen 1
2025-11-03 02:18:30,856 - faststack.imaging.cache - DEBUG - Cached item '1047_1'. Cache size: 48.31 MB
2025-11-03 02:18:30,856 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1047 for display gen 1
2025-11-03 02:18:30,917 - faststack.imaging.cache - DEBUG - Cached item '1050_1'. Cache size: 51.15 MB
2025-11-03 02:18:30,917 - faststack.imaging.cache - DEBUG - Cached item '1049_1'. Cache size: 54.00 MB
2025-11-03 02:18:30,918 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1049 for display gen 1
2025-11-03 02:18:30,918 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1050 for display gen 1
2025-11-03 02:18:30,918 - faststack.imaging.cache - DEBUG - Cached item '1048_1'. Cache size: 56.84 MB
2025-11-03 02:18:30,923 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1048 for display gen 1
2025-11-03 02:18:30,963 - faststack.imaging.cache - DEBUG - Cached item '1053_1'. Cache size: 59.68 MB
2025-11-03 02:18:30,964 - faststack.imaging.cache - DEBUG - Cached item '1054_1'. Cache size: 62.52 MB
2025-11-03 02:18:30,964 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1053 for display gen 1
2025-11-03 02:18:30,964 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1054 for display gen 1
2025-11-03 02:18:30,981 - faststack.imaging.cache - DEBUG - Cached item '1051_1'. Cache size: 65.36 MB
2025-11-03 02:18:30,982 - faststack.imaging.cache - DEBUG - Cached item '1052_1'. Cache size: 68.21 MB
2025-11-03 02:18:30,982 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1051 for display gen 1
2025-11-03 02:18:30,982 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1052 for display gen 1
2025-11-03 02:18:30,987 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,993 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,996 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,996 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,997 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,997 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,997 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,997 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,997 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,997 - main - DEBUG - UI State Synced: Index=1051, Count=1400
2025-11-03 02:18:30,998 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,998 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,998 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,999 - faststack.imaging.cache - DEBUG - Cached item '1055_1'. Cache size: 71.05 MB
2025-11-03 02:18:30,999 - main - INFO - _get_stack_info for index 1051:
2025-11-03 02:18:30,999 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1055 for display gen 1
2025-11-03 02:18:30,999 - main - DEBUG - Metadata Synced: Filename=20251030-PA305860.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:31,005 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:31,005 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1052, generation 5
2025-11-03 02:18:31,006 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1072
2025-11-03 02:18:31,007 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,007 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,008 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,008 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,008 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,008 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,008 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,008 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,008 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,009 - main - DEBUG - UI State Synced: Index=1052, Count=1400
2025-11-03 02:18:31,009 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,009 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,009 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,009 - main - INFO - _get_stack_info for index 1052:
2025-11-03 02:18:31,009 - main - DEBUG - Metadata Synced: Filename=20251030-PA305861.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:31,064 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1056 before caching. Skipping cache_put.
2025-11-03 02:18:31,064 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1058 before caching. Skipping cache_put.
2025-11-03 02:18:31,065 - faststack.imaging.prefetch - DEBUG - Skipping stale task for index 1064 (gen 4 != 5)
2025-11-03 02:18:31,066 - faststack.imaging.prefetch - DEBUG - Skipping stale task for index 1065 (gen 4 != 5)
2025-11-03 02:18:31,066 - faststack.imaging.prefetch - DEBUG - Skipping stale task for index 1066 (gen 4 != 5)
2025-11-03 02:18:31,066 - faststack.imaging.prefetch - DEBUG - Skipping stale task for index 1067 (gen 4 != 5)
2025-11-03 02:18:31,066 - faststack.imaging.prefetch - DEBUG - Skipping stale task for index 1068 (gen 4 != 5)
2025-11-03 02:18:31,066 - faststack.imaging.prefetch - DEBUG - Skipping stale task for index 1069 (gen 4 != 5)
2025-11-03 02:18:31,070 - faststack.imaging.prefetch - DEBUG - Skipping stale task for index 1070 (gen 4 != 5)
2025-11-03 02:18:31,070 - faststack.imaging.prefetch - DEBUG - Skipping stale task for index 1071 (gen 4 != 5)
2025-11-03 02:18:31,087 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1057 before caching. Skipping cache_put.
2025-11-03 02:18:31,114 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1060 before caching. Skipping cache_put.
2025-11-03 02:18:31,134 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1062 before caching. Skipping cache_put.
2025-11-03 02:18:31,135 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1059 before caching. Skipping cache_put.
2025-11-03 02:18:31,138 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1061 before caching. Skipping cache_put.
2025-11-03 02:18:31,165 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1063 before caching. Skipping cache_put.
2025-11-03 02:18:31,207 - faststack.imaging.cache - DEBUG - Cached item '1072_1'. Cache size: 73.89 MB
2025-11-03 02:18:31,207 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1072 for display gen 1
2025-11-03 02:18:31,222 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:31,222 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1053, generation 6
2025-11-03 02:18:31,222 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1073
2025-11-03 02:18:31,239 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,239 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,239 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,239 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,239 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,239 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,239 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,239 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,239 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,240 - main - DEBUG - UI State Synced: Index=1053, Count=1400
2025-11-03 02:18:31,240 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,240 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,240 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,240 - main - INFO - _get_stack_info for index 1053:
2025-11-03 02:18:31,240 - main - DEBUG - Metadata Synced: Filename=20251030-PA305862.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:31,254 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:31,254 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1054, generation 7
2025-11-03 02:18:31,254 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1074
2025-11-03 02:18:31,270 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,270 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,270 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,270 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,270 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,270 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,270 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,270 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,270 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,271 - main - DEBUG - UI State Synced: Index=1054, Count=1400
2025-11-03 02:18:31,271 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,271 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,271 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,271 - main - INFO - _get_stack_info for index 1054:
2025-11-03 02:18:31,271 - main - DEBUG - Metadata Synced: Filename=20251030-PA305863.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:31,287 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:31,287 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1055, generation 8
2025-11-03 02:18:31,287 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1075
2025-11-03 02:18:31,304 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,304 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,304 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,304 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,304 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,304 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,304 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,304 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,304 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,304 - main - DEBUG - UI State Synced: Index=1055, Count=1400
2025-11-03 02:18:31,305 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,305 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,305 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,305 - main - INFO - _get_stack_info for index 1055:
2025-11-03 02:18:31,305 - main - DEBUG - Metadata Synced: Filename=20251030-PA305864.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:31,320 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:31,320 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1056, generation 9
2025-11-03 02:18:31,320 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1076
2025-11-03 02:18:31,335 - main - WARNING - Cache miss for index 1056 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:31,336 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1056
2025-11-03 02:18:31,368 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1073 before caching. Skipping cache_put.
2025-11-03 02:18:31,389 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1074 before caching. Skipping cache_put.
2025-11-03 02:18:31,425 - faststack.imaging.prefetch - DEBUG - Generation changed for index 1075 before caching. Skipping cache_put.
2025-11-03 02:18:31,459 - faststack.imaging.cache - DEBUG - Cached item '1076_1'. Cache size: 76.73 MB
2025-11-03 02:18:31,460 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1076 for display gen 1
2025-11-03 02:18:31,461 - faststack.imaging.cache - DEBUG - Cached item '1056_1'. Cache size: 79.57 MB
2025-11-03 02:18:31,461 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1056 for display gen 1
2025-11-03 02:18:31,462 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,462 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,462 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,462 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,462 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,462 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,463 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,463 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,463 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,463 - main - DEBUG - UI State Synced: Index=1056, Count=1400
2025-11-03 02:18:31,463 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,463 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,463 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,463 - main - INFO - _get_stack_info for index 1056:
2025-11-03 02:18:31,463 - main - DEBUG - Metadata Synced: Filename=20251030-PA305865.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:31,464 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:31,464 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1057, generation 10
2025-11-03 02:18:31,464 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1077
2025-11-03 02:18:31,479 - main - WARNING - Cache miss for index 1057 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:31,480 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1057
2025-11-03 02:18:31,599 - faststack.imaging.cache - DEBUG - Cached item '1077_1'. Cache size: 82.41 MB
2025-11-03 02:18:31,599 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1077 for display gen 1
2025-11-03 02:18:31,599 - faststack.imaging.cache - DEBUG - Cached item '1057_1'. Cache size: 85.26 MB
2025-11-03 02:18:31,600 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1057 for display gen 1
2025-11-03 02:18:31,601 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,601 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - DEBUG - UI State Synced: Index=1057, Count=1400
2025-11-03 02:18:31,602 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - INFO - _get_stack_info for index 1057:
2025-11-03 02:18:31,602 - main - DEBUG - Metadata Synced: Filename=20251030-PA305866.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:31,604 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:31,604 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1058, generation 11
2025-11-03 02:18:31,604 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1078
2025-11-03 02:18:31,604 - main - WARNING - Cache miss for index 1058 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:31,604 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1058
2025-11-03 02:18:31,732 - faststack.imaging.cache - DEBUG - Cached item '1078_1'. Cache size: 88.10 MB
2025-11-03 02:18:31,732 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1078 for display gen 1
2025-11-03 02:18:31,733 - faststack.imaging.cache - DEBUG - Cached item '1058_1'. Cache size: 90.94 MB
2025-11-03 02:18:31,733 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1058 for display gen 1
2025-11-03 02:18:31,735 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,735 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,735 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,735 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,735 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,735 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,735 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,735 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,735 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,735 - main - DEBUG - UI State Synced: Index=1058, Count=1400
2025-11-03 02:18:31,735 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,736 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,736 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,736 - main - INFO - _get_stack_info for index 1058:
2025-11-03 02:18:31,736 - main - DEBUG - Metadata Synced: Filename=20251030-PA305867.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:31,738 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:31,738 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1059, generation 12
2025-11-03 02:18:31,738 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1079
2025-11-03 02:18:31,753 - main - WARNING - Cache miss for index 1059 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:31,753 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1059
2025-11-03 02:18:31,865 - faststack.imaging.cache - DEBUG - Cached item '1079_1'. Cache size: 93.78 MB
2025-11-03 02:18:31,866 - faststack.imaging.cache - DEBUG - Cached item '1059_1'. Cache size: 96.62 MB
2025-11-03 02:18:31,866 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1079 for display gen 1
2025-11-03 02:18:31,866 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1059 for display gen 1
2025-11-03 02:18:31,868 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,868 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,868 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,868 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,868 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,868 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,868 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,868 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,869 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,869 - main - DEBUG - UI State Synced: Index=1059, Count=1400
2025-11-03 02:18:31,869 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,869 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,869 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,869 - main - INFO - _get_stack_info for index 1059:
2025-11-03 02:18:31,869 - main - DEBUG - Metadata Synced: Filename=20251030-PA305868.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:31,870 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:31,870 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1060, generation 13
2025-11-03 02:18:31,870 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1080
2025-11-03 02:18:31,885 - main - WARNING - Cache miss for index 1060 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:31,885 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1060
2025-11-03 02:18:32,001 - faststack.imaging.cache - DEBUG - Cached item '1080_1'. Cache size: 99.47 MB
2025-11-03 02:18:32,001 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1080 for display gen 1
2025-11-03 02:18:32,003 - faststack.imaging.cache - DEBUG - Cached item '1060_1'. Cache size: 102.31 MB
2025-11-03 02:18:32,003 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1060 for display gen 1
2025-11-03 02:18:32,005 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,005 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,005 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,005 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,005 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,005 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,005 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,005 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,005 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,005 - main - DEBUG - UI State Synced: Index=1060, Count=1400
2025-11-03 02:18:32,005 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,006 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,006 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,006 - main - INFO - _get_stack_info for index 1060:
2025-11-03 02:18:32,006 - main - DEBUG - Metadata Synced: Filename=20251030-PA305869.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:32,008 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:32,008 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1061, generation 14
2025-11-03 02:18:32,008 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1081
2025-11-03 02:18:32,008 - main - WARNING - Cache miss for index 1061 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:32,008 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1061
2025-11-03 02:18:32,139 - faststack.imaging.cache - DEBUG - Cached item '1081_1'. Cache size: 105.15 MB
2025-11-03 02:18:32,140 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1081 for display gen 1
2025-11-03 02:18:32,140 - faststack.imaging.cache - DEBUG - Cached item '1061_1'. Cache size: 107.99 MB
2025-11-03 02:18:32,140 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1061 for display gen 1
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - DEBUG - UI State Synced: Index=1061, Count=1400
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,142 - main - INFO - _get_stack_info for index 1061:
2025-11-03 02:18:32,143 - main - DEBUG - Metadata Synced: Filename=20251030-PA305870.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:32,143 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:32,143 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1062, generation 15
2025-11-03 02:18:32,143 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1082
2025-11-03 02:18:32,160 - main - WARNING - Cache miss for index 1062 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:32,160 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1062
2025-11-03 02:18:32,276 - faststack.imaging.cache - DEBUG - Cached item '1082_1'. Cache size: 110.83 MB
2025-11-03 02:18:32,277 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1082 for display gen 1
2025-11-03 02:18:32,277 - faststack.imaging.cache - DEBUG - Cached item '1062_1'. Cache size: 113.68 MB
2025-11-03 02:18:32,277 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1062 for display gen 1
2025-11-03 02:18:32,279 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,279 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,279 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,279 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,279 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,279 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,279 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,279 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,280 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,280 - main - DEBUG - UI State Synced: Index=1062, Count=1400
2025-11-03 02:18:32,280 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,280 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,280 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,280 - main - INFO - _get_stack_info for index 1062:
2025-11-03 02:18:32,280 - main - DEBUG - Metadata Synced: Filename=20251030-PA305871.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:32,281 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:32,281 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1063, generation 16
2025-11-03 02:18:32,281 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1083
2025-11-03 02:18:32,297 - main - WARNING - Cache miss for index 1063 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:32,297 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1063
2025-11-03 02:18:32,407 - faststack.imaging.cache - DEBUG - Cached item '1083_1'. Cache size: 116.52 MB
2025-11-03 02:18:32,409 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1083 for display gen 1
2025-11-03 02:18:32,411 - faststack.imaging.cache - DEBUG - Cached item '1063_1'. Cache size: 119.36 MB
2025-11-03 02:18:32,411 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1063 for display gen 1
2025-11-03 02:18:32,412 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,412 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,412 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,412 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,412 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,412 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,412 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,412 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,412 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,413 - main - DEBUG - UI State Synced: Index=1063, Count=1400
2025-11-03 02:18:32,413 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,413 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,413 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,413 - main - INFO - _get_stack_info for index 1063:
2025-11-03 02:18:32,413 - main - DEBUG - Metadata Synced: Filename=20251030-PA305872.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:32,413 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:32,413 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1064, generation 17
2025-11-03 02:18:32,414 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1084
2025-11-03 02:18:32,414 - main - WARNING - Cache miss for index 1064 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:32,414 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1064
2025-11-03 02:18:32,541 - faststack.imaging.cache - DEBUG - Cached item '1084_1'. Cache size: 122.20 MB
2025-11-03 02:18:32,541 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1084 for display gen 1
2025-11-03 02:18:32,543 - faststack.imaging.cache - DEBUG - Cached item '1064_1'. Cache size: 125.04 MB
2025-11-03 02:18:32,543 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1064 for display gen 1
2025-11-03 02:18:32,544 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,544 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,544 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,544 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,544 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,544 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,544 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,545 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,545 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,545 - main - DEBUG - UI State Synced: Index=1064, Count=1400
2025-11-03 02:18:32,545 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,545 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,545 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,545 - main - INFO - _get_stack_info for index 1064:
2025-11-03 02:18:32,545 - main - DEBUG - Metadata Synced: Filename=20251030-PA305873.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:32,549 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:32,550 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1065, generation 18
2025-11-03 02:18:32,550 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1085
2025-11-03 02:18:32,550 - main - WARNING - Cache miss for index 1065 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:32,550 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1065
2025-11-03 02:18:32,686 - faststack.imaging.cache - DEBUG - Cached item '1065_1'. Cache size: 127.89 MB
2025-11-03 02:18:32,686 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1065 for display gen 1
2025-11-03 02:18:32,687 - faststack.imaging.cache - DEBUG - Cached item '1085_1'. Cache size: 130.73 MB
2025-11-03 02:18:32,687 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1085 for display gen 1
2025-11-03 02:18:32,688 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,688 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,688 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,688 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,688 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,688 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,688 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,688 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,688 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,689 - main - DEBUG - UI State Synced: Index=1065, Count=1400
2025-11-03 02:18:32,689 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,689 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,689 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,689 - main - INFO - _get_stack_info for index 1065:
2025-11-03 02:18:32,689 - main - DEBUG - Metadata Synced: Filename=20251030-PA305874.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:32,693 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:32,693 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1066, generation 19
2025-11-03 02:18:32,693 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1086
2025-11-03 02:18:32,693 - main - WARNING - Cache miss for index 1066 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:32,693 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1066
2025-11-03 02:18:32,817 - faststack.imaging.cache - DEBUG - Cached item '1086_1'. Cache size: 133.57 MB
2025-11-03 02:18:32,817 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1086 for display gen 1
2025-11-03 02:18:32,818 - faststack.imaging.cache - DEBUG - Cached item '1066_1'. Cache size: 136.41 MB
2025-11-03 02:18:32,818 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1066 for display gen 1
2025-11-03 02:18:32,820 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,820 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - DEBUG - UI State Synced: Index=1066, Count=1400
2025-11-03 02:18:32,821 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - INFO - _get_stack_info for index 1066:
2025-11-03 02:18:32,821 - main - DEBUG - Metadata Synced: Filename=20251030-PA305875.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:32,822 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:32,822 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1067, generation 20
2025-11-03 02:18:32,822 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1087
2025-11-03 02:18:32,838 - main - WARNING - Cache miss for index 1067 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:32,838 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1067
2025-11-03 02:18:32,951 - faststack.imaging.cache - DEBUG - Cached item '1087_1'. Cache size: 139.25 MB
2025-11-03 02:18:32,952 - faststack.imaging.cache - DEBUG - Cached item '1067_1'. Cache size: 142.09 MB
2025-11-03 02:18:32,952 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1067 for display gen 1
2025-11-03 02:18:32,952 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1087 for display gen 1
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - DEBUG - UI State Synced: Index=1067, Count=1400
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,954 - main - INFO - _get_stack_info for index 1067:
2025-11-03 02:18:32,955 - main - DEBUG - Metadata Synced: Filename=20251030-PA305876.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:32,955 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:32,955 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1068, generation 21
2025-11-03 02:18:32,955 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1088
2025-11-03 02:18:32,971 - main - WARNING - Cache miss for index 1068 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:32,971 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1068
2025-11-03 02:18:33,086 - faststack.imaging.cache - DEBUG - Cached item '1088_1'. Cache size: 144.94 MB
2025-11-03 02:18:33,086 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1088 for display gen 1
2025-11-03 02:18:33,087 - faststack.imaging.cache - DEBUG - Cached item '1068_1'. Cache size: 147.78 MB
2025-11-03 02:18:33,087 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1068 for display gen 1
2025-11-03 02:18:33,089 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,089 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,090 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,090 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,090 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,090 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,090 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,090 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,090 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,090 - main - DEBUG - UI State Synced: Index=1068, Count=1400
2025-11-03 02:18:33,090 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,091 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,091 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,091 - main - INFO - _get_stack_info for index 1068:
2025-11-03 02:18:33,091 - main - DEBUG - Metadata Synced: Filename=20251030-PA305877.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:33,092 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:33,092 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1069, generation 22
2025-11-03 02:18:33,092 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1089
2025-11-03 02:18:33,093 - main - WARNING - Cache miss for index 1069 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:33,093 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1069
2025-11-03 02:18:33,221 - faststack.imaging.cache - DEBUG - Cached item '1089_1'. Cache size: 150.62 MB
2025-11-03 02:18:33,222 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1089 for display gen 1
2025-11-03 02:18:33,223 - faststack.imaging.cache - DEBUG - Cached item '1069_1'. Cache size: 153.46 MB
2025-11-03 02:18:33,223 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1069 for display gen 1
2025-11-03 02:18:33,224 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,224 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,224 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,224 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,224 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,224 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,224 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,225 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,225 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,225 - main - DEBUG - UI State Synced: Index=1069, Count=1400
2025-11-03 02:18:33,225 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,225 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,225 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,225 - main - INFO - _get_stack_info for index 1069:
2025-11-03 02:18:33,225 - main - DEBUG - Metadata Synced: Filename=20251030-PA305878.JPG, Flagged=False, Rejected=False, StackInfo=''
2025-11-03 02:18:33,226 - faststack.ui.keystrokes - INFO - Key pressed: 16777236
2025-11-03 02:18:33,226 - faststack.imaging.prefetch - DEBUG - Updating prefetch for index 1070, generation 23
2025-11-03 02:18:33,226 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1090
2025-11-03 02:18:33,242 - main - WARNING - Cache miss for index 1070 (gen: 1). Forcing synchronous load.
2025-11-03 02:18:33,243 - faststack.imaging.prefetch - DEBUG - Submitted prefetch task for index 1070
2025-11-03 02:18:33,344 - faststack.imaging.cache - DEBUG - Cached item '1070_1'. Cache size: 156.30 MB
2025-11-03 02:18:33,345 - faststack.imaging.prefetch - DEBUG - Successfully decoded and cached image at index 1070 for display gen 1

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Nov 3, 2025

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# First, let's find where _get_stack_info is called from to understand why it's being invoked so many times
ast-grep --pattern '$_._get_stack_info($$$)'

Length of output: 92


🏁 Script executed:

#!/bin/bash
# Also search for direct calls to _get_stack_info
rg -n "_get_stack_info" --type=py -C2

Length of output: 978


🏁 Script executed:

#!/bin/bash
# Find where get_current_metadata is defined and called
rg -n "get_current_metadata" --type=py -C3

Length of output: 2695


🏁 Script executed:

#!/bin/bash
# Find the prefetch update logic to understand the lookahead strategy
rg -n "Updating prefetch for index" --type=py -B5 -A10

Length of output: 1287


🏁 Script executed:

#!/bin/bash
# Look at the display size change handler
rg -n "Display size changed" --type=py -B5 -A10

Length of output: 1114


🏁 Script executed:

#!/bin/bash
# Find where the prefetch range/window is configured
rg -n "PREFETCH|lookahead|prefetch.*range|prefetch.*window" --type=py -i

Length of output: 4494


🏁 Script executed:

#!/bin/bash
# Check how many Qt properties are reading get_current_metadata
rg -n "@Property.*notify=metadataChanged" --type=py -A2

Length of output: 1860


🏁 Script executed:

#!/bin/bash
# Look at sync_ui_state to see what triggers metadata updates
rg -n "sync_ui_state|metadataChanged" --type=py -C3

Length of output: 9577


🏁 Script executed:

#!/bin/bash
# Check the prefetch radius configuration value
rg -n "prefetch_radius.*=.*[0-9]" --type=py

Length of output: 102


🏁 Script executed:

#!/bin/bash
# Look at how the cache handles display size changes
rg -n "def clear\(|cache.clear\(\)" --type=py -C3

Length of output: 1048


🏁 Script executed:

#!/bin/bash
# Find if there's caching/memoization for get_current_metadata
ast-grep --pattern 'def get_current_metadata($$$) {
  $$$
}'

Length of output: 0


🏁 Script executed:

#!/bin/bash
# Check if there's any debouncing on the display size change
rg -n "debounce|throttle|timer|QTimer" --type=py -i

Length of output: 203


🏁 Script executed:

#!/bin/bash
# Check how the image cache is implemented
fd -e py cache.py | head -1 | xargs cat

Length of output: 1646


🏁 Script executed:

#!/bin/bash
# See the prefetch radius default and check the prefetch window calculation
rg -n "prefetch_radius|_is_in_prefetch_range" --type=py -A5

Length of output: 4793


@AlanRockefeller Great work on implementing the performance improvements! I've analyzed the debug log and identified several issues that are impacting performance:

Critical Performance Issues

1. Excessive get_current_metadata() Calls (Most Important)

Each navigation triggers get_current_metadata() 13+ times for the same index:

2025-11-03 02:18:30,050 - __main__ - INFO - _get_stack_info for index 1051:  (13 times!)

Root cause: When sync_ui_state() emits metadataChanged, all 6 Qt Properties bound to it call get_current_metadata() independently:

  • currentFilename → calls get_current_metadata()
  • isFlagged → calls get_current_metadata()
  • isRejected → calls get_current_metadata()
  • isStacked → calls get_current_metadata()
  • stackedDate → calls get_current_metadata()
  • stackInfoText → calls get_current_metadata()

Each call also invokes _get_stack_info(), which iterates through all stacks. This is very wasteful.

Solution: Cache the metadata result per index/generation:

def __init__(self):
    # ... existing code ...
    self._metadata_cache = {}
    self._metadata_cache_index = -1

def get_current_metadata(self) -> Dict:
    if not self.image_files:
        log.debug("get_current_metadata: image_files is empty, returning {}.")
        return {}
    
    # Cache hit check
    cache_key = (self.current_index, self.display_generation)
    if cache_key == self._metadata_cache_index:
        return self._metadata_cache
    
    # Compute and cache
    stem = self.image_files[self.current_index].path.stem
    meta = self.sidecar.get_metadata(stem)
    stack_info = self._get_stack_info(self.current_index)
    
    self._metadata_cache = {
        "filename": self.image_files[self.current_index].path.name,
        "flag": meta.flag,
        "reject": meta.reject,
        "stacked": meta.stacked,
        "stacked_date": meta.stacked_date or "",
        "stack_info_text": stack_info
    }
    self._metadata_cache_index = cache_key
    return self._metadata_cache

def sync_ui_state(self):
    """Forces the UI to update by emitting all state change signals."""
    self.ui_refresh_generation += 1
    self._metadata_cache_index = (-1, -1)  # Invalidate cache
    self.ui_state.currentIndexChanged.emit()
    # ... rest of method

2. Display Size Change Causes Complete Cache Eviction

At 02:18:30,248, the window resize from startup to 1536x863 causes:

  • Complete cache clear (~1900 MB of cached images discarded)
  • All 41 prefetched images evicted
  • Complete re-decode of all images at new size

Issue: The cache is completely cleared even though the aspect ratio logic could potentially reuse some images.

Solution: Add debouncing to prevent resize spam:

def __init__(self):
    # ... existing code ...
    self.resize_timer = QTimer()
    self.resize_timer.setSingleShot(True)
    self.resize_timer.timeout.connect(self._handle_resize)
    self.pending_width = None
    self.pending_height = None

def on_display_size_changed(self, width: int, height: int):
    if self.display_width == width and self.display_height == height:
        return
    
    # Debounce resize events
    self.pending_width = width
    self.pending_height = height
    self.resize_timer.start(150)  # 150ms debounce

def _handle_resize(self):
    """Actual resize handler, called after debounce period."""
    log.info(f"Display size changed to: {self.pending_width}x{self.pending_height}")
    self.display_width = self.pending_width
    self.display_height = self.pending_height
    self.display_generation += 1
    self.image_cache.clear()
    self.prefetcher.cancel_all()
    self.prefetcher.update_prefetch(self.current_index)
    self.sync_ui_state()

3. Rapid Navigation Causing Cache Misses

From indices 1056-1070, navigation happens every ~16-140ms, but decoding takes ~100-140ms per image:

2025-11-03 02:18:31,335 - __main__ - WARNING - Cache miss for index 1056 (gen: 1)

The prefetch can't keep up with rapid arrow key presses. The generation tracking is working correctly to skip stale tasks, but the user still experiences blocking loads.

Solution: Consider adaptive prefetch or pre-loading a larger radius when in "rapid navigation mode" is detected.

4. Startup Metadata Queries

Before images are loaded, the UI tries to query metadata 9 times:

2025-11-03 02:18:28,877 - __main__ - DEBUG - get_current_metadata: image_files is empty, returning {}.

Solution: These are benign but could be prevented by guarding the initial sync_ui_state() call or deferring it until after images are loaded.

5. Possible Prefetch Range Issue

With prefetch_radius=4, the code should prefetch ~9 images (current ± 4). However, the log shows prefetching indices 1031-1071 (41 images) when at index 1051. This could be:

  • An initialization artifact where it jumped from index 0 to 1051
  • The initial prefetch after the display size change using a larger window
  • Or a bug in the range calculation

Check if the prefetch radius is being applied correctly or if there's an initialization issue causing a wider-than-expected range.

Summary of Recommendations

High Priority:

  1. ✅ Cache get_current_metadata() results to eliminate 13x redundant calls per navigation
  2. ✅ Add debouncing (150-200ms) to display size change handler
  3. ✅ Guard metadata queries when image_files is empty during startup

Medium Priority:
4. Consider adaptive prefetch radius or different strategy for rapid navigation
5. Investigate whether the prefetch range calculation is working as intended

Low Priority:
6. Consider smarter cache eviction strategy that doesn't discard everything on resize

The metadata caching fix alone should give you a very noticeable performance improvement during navigation! 🚀

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
faststack/faststack/imaging/jpeg.py (1)

48-85: Turbo thumbnail path can exceed max_dim.

With very large images, even the smallest TurboJPEG scaling factor (e.g., 1/8) can leave the decoded array larger than max_dim. Because _get_turbojpeg_scaling_factor returns that factor and the Turbo path immediately returns the decoded array, callers receive thumbnails far bigger than requested, breaking the contract of decode_jpeg_thumb_rgb. Please clamp the Turbo result before returning—e.g., fall back to Pillow resizing when the decoded dimensions still exceed max_dim.

@@
-            return jpeg_decoder.decode(jpeg_bytes, scaling_factor=scaling_factor, pixel_format=TJPF_RGB, flags=TJFLAG_FASTDCT)
+            decoded = jpeg_decoder.decode(
+                jpeg_bytes,
+                scaling_factor=scaling_factor,
+                pixel_format=TJPF_RGB,
+                flags=TJFLAG_FASTDCT,
+            )
+            if decoded.shape[0] > max_dim or decoded.shape[1] > max_dim:
+                img = Image.fromarray(decoded)
+                img.thumbnail((max_dim, max_dim), Image.Resampling.LANCZOS)
+                return np.array(img)
+            return decoded
@@
-    return supported_factors[-1] if supported_factors else None
+    return supported_factors[-1] if supported_factors else None
🧹 Nitpick comments (1)
faststack/faststack/app.py (1)

396-407: Drop the unused callback parameter.

Ruff’s ARG001 is right here—rename the argument so we don’t carry an unused binding.

-        def _on_done(future):
+        def _on_done(_future):
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0076329 and 742a042.

📒 Files selected for processing (9)
  • faststack/ChangeLog.md (1 hunks)
  • faststack/faststack/app.py (5 hunks)
  • faststack/faststack/imaging/jpeg.py (4 hunks)
  • faststack/faststack/imaging/prefetch.py (3 hunks)
  • faststack/faststack/io/watcher.py (1 hunks)
  • faststack/faststack/qml/Components.qml (1 hunks)
  • faststack/faststack/qml/Main.qml (1 hunks)
  • faststack/faststack/ui/provider.py (1 hunks)
  • faststack/pyproject.toml (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
faststack/faststack/ui/provider.py (1)
faststack/faststack/app.py (1)
  • set_zoomed (93-103)
faststack/faststack/app.py (4)
faststack/faststack/imaging/prefetch.py (3)
  • cancel_all (115-121)
  • update_prefetch (36-56)
  • submit_task (58-69)
faststack/faststack/ui/provider.py (1)
  • clear_all_stacks (166-167)
faststack/faststack/io/helicon.py (1)
  • launch_helicon_focus (13-57)
faststack/faststack/io/sidecar.py (2)
  • get_metadata (85-87)
  • save (54-83)
🪛 LanguageTool
faststack/ChangeLog.md

[style] ~17-~17: Consider using a different verb for a more formal wording.
Context: ...he JPEG scaling factor calculation. - Fixed an issue where panning the image was no...

(FIX_RESOLVE)


[grammar] ~32-~32: Use a hyphen to join words.
Context: ...sion 0.4 ### Todo Make it use the full res image when zooming in When multiple ...

(QB_NEW_EN_HYPHEN)

🪛 Ruff (0.14.2)
faststack/faststack/imaging/jpeg.py

29-29: Redundant exception object included in logging.exception call

(TRY401)


38-38: Redundant exception object included in logging.exception call

(TRY401)


56-56: Redundant exception object included in logging.exception call

(TRY401)


65-65: Redundant exception object included in logging.exception call

(TRY401)


119-119: Redundant exception object included in logging.exception call

(TRY401)


137-137: Redundant exception object included in logging.exception call

(TRY401)

faststack/faststack/app.py

396-396: Unused function argument: future

(ARG001)

🔇 Additional comments (2)
faststack/faststack/imaging/prefetch.py (1)

20-26: Dynamic worker sizing looks good.

The capped 2×CPU heuristic avoids oversubscription while still scaling decoding throughput, and it safely falls back when os.cpu_count() is unavailable.

faststack/faststack/ui/provider.py (1)

62-77: Zoom bridge wiring looks solid.

The read-only property paired with setZoomed cleanly forwards QML requests and emits the notify signal so bindings stay in sync.

Comment thread faststack/faststack/app.py
Comment thread faststack/faststack/io/watcher.py
Comment thread faststack/faststack/qml/Components.qml
@AlanRockefeller AlanRockefeller merged commit 8984ab4 into main Nov 3, 2025
1 check passed
@coderabbitai coderabbitai Bot mentioned this pull request Nov 23, 2025
Closed
@coderabbitai coderabbitai Bot mentioned this pull request Dec 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant