retold-remote 0.0.11 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/css/retold-remote.css +46 -2
  2. package/docs/README.md +7 -2
  3. package/docs/_sidebar.md +11 -2
  4. package/docs/audio-explorer.md +120 -0
  5. package/docs/audio-viewer.md +1 -96
  6. package/docs/collections.md +162 -0
  7. package/docs/image-explorer.md +71 -0
  8. package/docs/image-viewer.md +1 -17
  9. package/docs/metadata.md +211 -0
  10. package/docs/video-explorer.md +117 -0
  11. package/docs/video-viewer.md +1 -68
  12. package/html/index.html +2 -0
  13. package/package.json +8 -1
  14. package/source/Pict-Application-RetoldRemote.js +19 -2
  15. package/source/RetoldRemote-ExtensionMaps.js +47 -0
  16. package/source/cli/RetoldRemote-Server-Setup.js +15 -1
  17. package/source/providers/Pict-Provider-RetoldRemote.js +2 -2
  18. package/source/providers/Pict-Provider-RetoldRemoteIcons.js +11 -1
  19. package/source/providers/keyboard-handlers/KeyHandler-Viewer.js +1 -1
  20. package/source/server/RetoldRemote-ArchiveService.js +156 -7
  21. package/source/server/RetoldRemote-ImageService.js +846 -36
  22. package/source/server/RetoldRemote-MediaService.js +325 -3
  23. package/source/server/RetoldRemote-MetadataCache.js +22 -5
  24. package/source/server/RetoldRemote-ToolDetector.js +106 -8
  25. package/source/views/MediaViewer-EbookViewer.js +10 -4
  26. package/source/views/PictView-Remote-AudioExplorer.js +12 -2
  27. package/source/views/PictView-Remote-FileInfoPanel.js +97 -0
  28. package/source/views/PictView-Remote-ImageExplorer.js +174 -17
  29. package/source/views/PictView-Remote-ImageViewer.js +1 -1
  30. package/source/views/PictView-Remote-MediaViewer.js +4 -27
  31. package/source/views/PictView-Remote-SettingsPanel.js +7 -1
  32. package/source/views/PictView-Remote-VideoExplorer.js +12 -2
  33. package/web-application/css/retold-remote.css +46 -2
  34. package/web-application/docs/README.md +7 -2
  35. package/web-application/docs/_sidebar.md +11 -2
  36. package/web-application/docs/audio-explorer.md +120 -0
  37. package/web-application/docs/audio-viewer.md +1 -96
  38. package/web-application/docs/collections.md +162 -0
  39. package/web-application/docs/image-explorer.md +71 -0
  40. package/web-application/docs/image-viewer.md +1 -17
  41. package/web-application/docs/metadata.md +211 -0
  42. package/web-application/docs/video-explorer.md +117 -0
  43. package/web-application/docs/video-viewer.md +1 -68
  44. package/web-application/index.html +2 -0
  45. package/web-application/js/jszip.min.js +13 -0
  46. package/web-application/retold-remote.js +124 -47
  47. package/web-application/retold-remote.js.map +1 -1
  48. package/web-application/retold-remote.min.js +8 -8
  49. package/web-application/retold-remote.min.js.map +1 -1
@@ -2026,14 +2026,48 @@ html, body
2026
2026
  flex-shrink: 0;
2027
2027
  background: var(--retold-bg-secondary);
2028
2028
  border-right: 1px solid var(--retold-border);
2029
- overflow-y: auto;
2029
+ display: flex;
2030
+ flex-direction: column;
2030
2031
  font-size: 0.78rem;
2031
- padding: 8px 0;
2032
2032
  }
2033
2033
  .retold-remote-ebook-toc.collapsed
2034
2034
  {
2035
2035
  display: none;
2036
2036
  }
2037
+ .retold-remote-ebook-toc-header
2038
+ {
2039
+ display: flex;
2040
+ align-items: center;
2041
+ justify-content: space-between;
2042
+ padding: 8px 12px;
2043
+ border-bottom: 1px solid var(--retold-border);
2044
+ color: var(--retold-text-secondary);
2045
+ font-size: 0.72rem;
2046
+ font-weight: 600;
2047
+ text-transform: uppercase;
2048
+ letter-spacing: 0.04em;
2049
+ flex-shrink: 0;
2050
+ }
2051
+ .retold-remote-ebook-toc-close
2052
+ {
2053
+ border: none;
2054
+ background: none;
2055
+ color: var(--retold-text-muted);
2056
+ font-size: 1.1rem;
2057
+ cursor: pointer;
2058
+ padding: 0 4px;
2059
+ line-height: 1;
2060
+ }
2061
+ .retold-remote-ebook-toc-close:hover
2062
+ {
2063
+ color: var(--retold-text-primary);
2064
+ }
2065
+ .retold-remote-ebook-toc-items
2066
+ {
2067
+ overflow-y: auto;
2068
+ flex: 1;
2069
+ padding: 4px 0;
2070
+ }
2037
2071
  .retold-remote-ebook-toc-item
2038
2072
  {
2039
2073
  display: block;
@@ -2337,6 +2371,16 @@ html, body
2337
2371
  {
2338
2372
  color: var(--retold-text-secondary);
2339
2373
  }
2374
+ .retold-remote-iex-tiling-status
2375
+ {
2376
+ color: var(--retold-accent);
2377
+ animation: retold-pulse 1.5s ease-in-out infinite;
2378
+ }
2379
+ @keyframes retold-pulse
2380
+ {
2381
+ 0%, 100% { opacity: 1; }
2382
+ 50% { opacity: 0.5; }
2383
+ }
2340
2384
  .retold-remote-iex-body
2341
2385
  {
2342
2386
  flex: 1;
package/docs/README.md CHANGED
@@ -41,9 +41,14 @@ Then open `http://localhost:8086` in a browser.
41
41
  |----------|----------|
42
42
  | [Server Setup and Docker](server-setup.md) | Installation, CLI options, environment variables, configuration, Docker |
43
43
  | [Image Viewer](image-viewer.md) | Fit modes, zoom, keyboard shortcuts, mouse interactions |
44
- | [Video Viewer](video-viewer.md) | Action menu, playback, frame explorer, timeline, VLC streaming |
45
- | [Audio Viewer](audio-viewer.md) | Waveform visualization, selection, zoom, segment playback |
44
+ | [Video Viewer](video-viewer.md) | Action menu, in-browser playback, VLC streaming |
45
+ | [Audio Viewer](audio-viewer.md) | HTML5 playback, autoplay, VLC streaming |
46
46
  | [eBook Reader](ebook-reader.md) | EPUB/MOBI support, table of contents, page navigation |
47
+ | [Image Explorer](image-explorer.md) | Deep-zoom with OpenSeadragon, DZI tiling, coordinate display |
48
+ | [Video Explorer](video-explorer.md) | Frame grid, timeline, range selection, clip extraction |
49
+ | [Audio Explorer](audio-explorer.md) | Waveform visualization, selection, zoom, segment playback |
50
+ | [Collections](collections.md) | Bookmarks, favorites, quick-add, item types, operation plans |
51
+ | [File Metadata](metadata.md) | Info overlay, sidebar metadata, EXIF/GPS, ffprobe, explorer info bars |
47
52
 
48
53
  ## Keyboard Shortcuts (All Modes)
49
54
 
package/docs/_sidebar.md CHANGED
@@ -5,6 +5,15 @@
5
5
 
6
6
  - Media Viewers
7
7
  - [Image Viewer](image-viewer.md)
8
- - [Video Viewer & Explorer](video-viewer.md)
9
- - [Audio Viewer & Explorer](audio-viewer.md)
8
+ - [Video Viewer](video-viewer.md)
9
+ - [Audio Viewer](audio-viewer.md)
10
10
  - [eBook Reader](ebook-reader.md)
11
+
12
+ - Explorers
13
+ - [Image Explorer](image-explorer.md)
14
+ - [Video Explorer](video-explorer.md)
15
+ - [Audio Explorer](audio-explorer.md)
16
+
17
+ - Features
18
+ - [Collections](collections.md)
19
+ - [File Metadata](metadata.md)
@@ -0,0 +1,120 @@
1
+ # Audio Explorer
2
+
3
+ The audio explorer displays a canvas-based waveform visualization of an audio file with zoom, selection, and segment extraction. Select a region of the waveform, play it back instantly, or save it to a collection as an audio clip. Requires ffmpeg on the server for waveform analysis and segment extraction.
4
+
5
+ ## Opening the Explorer
6
+
7
+ - From the audio player, click "Explore Audio"
8
+ - From the gallery (with an audio file selected), press `e`
9
+ - From the media viewer, press `e` while viewing audio
10
+ - URL updates to `#/explore-audio/{id}`
11
+
12
+ Opening with a pre-existing selection (from a collection item, for example) highlights that range automatically.
13
+
14
+ ## Waveform Display
15
+
16
+ ### Main Canvas
17
+
18
+ The main canvas shows a zoomed and pannable portion of the waveform. Peaks are drawn as vertical bars above and below a dashed center line, representing the amplitude at each point.
19
+
20
+ - **Unselected regions** are drawn in the secondary text color
21
+ - **Selected regions** are drawn in the accent color with a semi-transparent highlight
22
+ - A **cursor line** follows the mouse position
23
+
24
+ ### Overview Bar
25
+
26
+ Below the main canvas, a smaller overview canvas shows the entire audio file at a glance. A highlighted viewport indicator rectangle shows which portion is currently visible in the main canvas.
27
+
28
+ Click anywhere on the overview bar to pan the main view to that position. The viewport indicator can also be dragged.
29
+
30
+ ## Time Display Bar
31
+
32
+ A bar above the waveform shows three live-updating fields:
33
+
34
+ | Field | Content | Example |
35
+ |-------|---------|---------|
36
+ | **View** | Time range currently visible | 0:12.3 - 0:45.7 |
37
+ | **Selection** | Selected range and duration | 0:20.0 - 0:30.5 (10.5s) |
38
+ | **Cursor** | Time position under the mouse | 0:25.8 |
39
+
40
+ Timestamps are formatted as M:SS.D (minutes, seconds, tenths) or H:MM:SS.D for long files. When no selection exists, "None" is shown. When the cursor is outside the canvas, "--" is shown.
41
+
42
+ ## Info Bar
43
+
44
+ | Field | Example |
45
+ |-------|---------|
46
+ | Duration | 3:42 |
47
+ | Sample Rate | 44.1 kHz |
48
+ | Channels | 2 (stereo) |
49
+ | Codec | mp3 |
50
+ | Bitrate | 320 kbps |
51
+ | Size | 8.7 MB |
52
+ | Peaks | 2000 (ffmpeg) |
53
+
54
+ ## Selection
55
+
56
+ Click and drag on the main waveform to select a time range. The selection is highlighted in the accent color with vertical edge markers in both the main canvas and the overview bar.
57
+
58
+ Selections smaller than approximately 1 millisecond are automatically cleared.
59
+
60
+ ### Controls
61
+
62
+ | Button | Action |
63
+ |--------|--------|
64
+ | Play Selection | Extract and play the selected segment |
65
+ | Clear | Remove the selection |
66
+ | Save Segment | Add the selection as an audio clip to a collection |
67
+
68
+ ## Zoom
69
+
70
+ | Key / Action | Effect |
71
+ |--------------|--------|
72
+ | `+` or `=` | Zoom in (halves visible range, centered) |
73
+ | `-` | Zoom out (doubles visible range, centered) |
74
+ | `0` | Zoom to fit (show entire file) |
75
+ | `z` | Zoom to selection (with 5% margin) |
76
+ | Scroll wheel | Zoom at cursor position |
77
+
78
+ The minimum zoom level is 0.5% of the total duration. Zooming preserves the center point -- the portion of the waveform under the cursor (scroll wheel) or the center of the view (keyboard) stays in place while the view range changes.
79
+
80
+ ## Playing a Selection
81
+
82
+ With a selection active, press `Space` or click "Play Selection" to hear that segment. The server extracts the audio via ffmpeg and returns an MP3 file. A playback bar appears with an HTML5 audio player for the extracted segment.
83
+
84
+ The extraction endpoint is `/api/media/audio-segment` with `start` and `end` parameters in seconds.
85
+
86
+ ## Mouse Interactions
87
+
88
+ | Action | Effect |
89
+ |--------|--------|
90
+ | Click and drag on main waveform | Create or adjust a selection |
91
+ | Mouse move on main waveform | Update cursor position in time bar |
92
+ | Scroll wheel on main waveform | Zoom in or out at cursor position |
93
+ | Click on overview bar | Pan main view to that position |
94
+ | Drag viewport indicator | Pan main view by dragging |
95
+
96
+ ### Touch
97
+
98
+ Selection drag is supported on touch devices.
99
+
100
+ ## Keyboard Shortcuts
101
+
102
+ | Key | Action |
103
+ |-----|--------|
104
+ | `Space` | Play selection |
105
+ | `+` / `=` | Zoom in |
106
+ | `-` | Zoom out |
107
+ | `0` | Zoom to fit |
108
+ | `z` | Zoom to selection |
109
+ | `a` / `s` | Save audio snippet to collection |
110
+ | `b` | Toggle collection panel |
111
+ | `h` | Toggle favorite |
112
+ | `Esc` | Clear selection (if any), or go back to audio player |
113
+
114
+ ## State Persistence
115
+
116
+ Zoom level and selection state are saved to the server and restored when you return to the same audio file.
117
+
118
+ ## Waveform Analysis
119
+
120
+ The server analyzes the audio file into 2000 peak sample points by default. Each peak contains min and max amplitude values normalized to the -1.0 to 1.0 range. The analysis method is shown in the info bar (typically "ffmpeg").
@@ -24,102 +24,7 @@ Autoplay is off by default. Enable it in Settings > Gallery > Autoplay audio. Wh
24
24
 
25
25
  ## Audio Explorer
26
26
 
27
- The audio explorer displays a canvas-based waveform visualization with selection, zoom, and segment extraction.
28
-
29
- ### Opening the Explorer
30
-
31
- - From the audio player, click "Explore Audio"
32
- - The explorer fetches 2000 peak samples from the server via ffmpeg
33
-
34
- ### Waveform Display
35
-
36
- The main canvas shows the audio waveform as vertical bars. The height of each bar represents the amplitude at that point. A dashed center line marks the zero crossing.
37
-
38
- - **Unselected regions** are drawn in the secondary text color
39
- - **Selected regions** are drawn in the accent color with a semi-transparent highlight behind them
40
- - A **cursor line** follows the mouse position, displayed in white
41
-
42
- ### Overview Bar
43
-
44
- Below the main waveform, a smaller overview canvas shows the entire audio file. A highlighted viewport indicator box shows which portion of the waveform is currently visible in the main canvas.
45
-
46
- Click anywhere on the overview to pan the main view to that position.
47
-
48
- ### Selection
49
-
50
- **Click and drag** on the main waveform to select a time range. The selection is highlighted in the accent color with edge markers.
51
-
52
- - If the selection is too small (less than 0.1% of the total duration), it is automatically cleared
53
- - The selection is shown in both the main canvas and the overview
54
-
55
- ### Time Display Bar
56
-
57
- A bar above the waveform shows three pieces of information:
58
-
59
- - **View**: the time range currently visible (e.g., "0:12.3 - 0:45.7")
60
- - **Selection**: the selected time range and its duration (e.g., "0:20.0 - 0:30.5 (10.5s)"), or "None"
61
- - **Cursor**: the time position under the mouse, or "--"
62
-
63
- Timestamps are formatted as `M:SS.D` (minutes, seconds, tenths of a second) or `H:MM:SS.D` for long files.
64
-
65
- ### Zoom Controls
66
-
67
- | Key / Button | Action |
68
- |--------------|--------|
69
- | `+` or `=` | Zoom in (centered) |
70
- | `-` | Zoom out (centered) |
71
- | `0` | Zoom to fit (show entire file) |
72
- | `z` | Zoom to selection (with 5% margin) |
73
- | Mouse wheel | Zoom at cursor position |
74
-
75
- Minimum zoom level is 0.5% of the total duration.
76
-
77
- Zooming preserves the center point -- the portion of the waveform under the mouse (for wheel zoom) or the center (for keyboard zoom) stays in place while the view range narrows or widens.
78
-
79
- ### Playing a Selection
80
-
81
- With a selection active, press `Space` or click the Play Selection button to extract and play that audio segment.
82
-
83
- The server extracts the segment via ffmpeg and returns it as an MP3 file. A playback bar appears with an HTML5 audio player for the extracted segment.
84
-
85
- The extraction endpoint is `/api/media/audio-segment` with `start` and `end` parameters in seconds.
86
-
87
- ### Info Bar
88
-
89
- The explorer shows an info bar with metadata from ffprobe:
90
-
91
- | Field | Example |
92
- |-------|---------|
93
- | Duration | 3:42 |
94
- | Sample Rate | 44.1 kHz |
95
- | Channels | 2 (stereo) |
96
- | Codec | mp3 |
97
- | Bitrate | 320 kbps |
98
- | File Size | 8.7 MB |
99
- | Peaks | 2000 (ffmpeg) |
100
-
101
- ### Keyboard Shortcuts
102
-
103
- | Key | Action |
104
- |-----|--------|
105
- | `Space` | Play selection |
106
- | `+` / `=` | Zoom in |
107
- | `-` | Zoom out |
108
- | `0` | Zoom to fit |
109
- | `z` | Zoom to selection |
110
- | `a` / `s` | Save audio snippet to collection |
111
- | `b` | Toggle collection panel |
112
- | `h` | Toggle favorite |
113
- | `Esc` | Clear selection (if any), or go back to audio player |
114
-
115
- ### Mouse Interactions
116
-
117
- | Action | Effect |
118
- |--------|--------|
119
- | Click and drag on main waveform | Create/adjust selection |
120
- | Mouse move on main waveform | Show cursor position in time bar |
121
- | Mouse wheel on main waveform | Zoom in/out at cursor position |
122
- | Click on overview bar | Pan main view to that position |
27
+ Click "Explore Audio" from the player to open the waveform explorer. It provides a canvas-based waveform visualization with zoom, selection, segment playback, and collection integration. See the full [Audio Explorer](audio-explorer.md) documentation for details.
123
28
 
124
29
  ## File Info Overlay
125
30
 
@@ -0,0 +1,162 @@
1
+ # Collections
2
+
3
+ Collections let you bookmark files, video frames, audio clips, and video clips into named groups. The collections panel provides a sidebar for managing collections, and keyboard shortcuts let you quick-add items without leaving the current view.
4
+
5
+ ## Quick-Add
6
+
7
+ Press `a` in any mode to add the current item to a collection. If a collection is already active (open in the panel) or was recently used, the item is added to it immediately with a toast notification. If no collection is active, a dropdown picker appears in the top bar so you can choose one.
8
+
9
+ ### What Gets Added
10
+
11
+ | Context | Item Type | Data Captured |
12
+ |---------|-----------|---------------|
13
+ | Gallery or viewer (file) | File | File path |
14
+ | Gallery or viewer (folder) | Folder or folder contents | Folder path (prompts for choice) |
15
+ | Gallery or viewer (archive subfile) | Subfile | File path + archive path |
16
+ | Video explorer | Video frame | Path, timestamp, cached frame image |
17
+ | Video explorer (with selection) | Video clip | Path, start time, end time |
18
+ | Audio explorer (with selection) | Audio clip | Path, start time, end time |
19
+
20
+ ### Folder Choice
21
+
22
+ When quick-adding a folder or archive, a prompt asks whether to add the folder itself or its contents. "Add Folder" creates a single reference. "Add Folder Contents" creates a wildcard reference to everything inside.
23
+
24
+ ### Quick-Add Target
25
+
26
+ The quick-add target is resolved in this priority order:
27
+
28
+ 1. The collection currently open in detail mode in the panel
29
+ 2. The last collection an item was added to
30
+ 3. If neither is available, the dropdown picker opens
31
+
32
+ ## Favorites
33
+
34
+ Favorites is a special system collection with a dedicated heart icon in the top bar.
35
+
36
+ ### Toggle
37
+
38
+ Press `h` in any mode to toggle the current file as a favorite. The heart icon in the top bar fills when the current file is favorited and empties when it is not.
39
+
40
+ Favorites work for files, folders (with the same folder choice prompt), and archive subfiles. The favorites collection is created automatically on first use.
41
+
42
+ ### Favorites Pane
43
+
44
+ Favorited items appear in the sidebar favorites pane, accessible via the sidebar tabs.
45
+
46
+ ## Collections Panel
47
+
48
+ Press `b` in any mode to toggle the collections panel on the right side of the screen. The panel has three modes.
49
+
50
+ ### List Mode
51
+
52
+ Shows all collections as cards. Each card displays the collection icon, name, and item count. Click a card to open it in detail mode.
53
+
54
+ - **New (+)** button creates a new collection (prompts for a name)
55
+ - **Search bar** filters collections by name, description, or tags
56
+
57
+ ### Detail Mode
58
+
59
+ Shows the items in a single collection. Each item row displays an icon or thumbnail, the item name, a type badge, and a remove button.
60
+
61
+ #### Sorting
62
+
63
+ | Sort Mode | Description |
64
+ |-----------|-------------|
65
+ | Manual | Drag-to-reorder using the handle (default) |
66
+ | Name | Alphabetical by label |
67
+ | Date Added | Chronological by when the item was added |
68
+ | Type | Grouped by item type |
69
+
70
+ A direction toggle switches between ascending and descending order.
71
+
72
+ #### Item Thumbnails
73
+
74
+ - **Images and image crops**: Thumbnail from the server
75
+ - **Video frames**: The actual extracted frame image
76
+ - **Other types**: A type icon (folder, audio clip, video clip, subfile, etc.)
77
+
78
+ #### Clicking Items
79
+
80
+ Click an item to navigate to it. Files open in the viewer, folders navigate the file browser, video frames open the video explorer at the frame timestamp, and audio clips open the audio explorer with the selection pre-loaded.
81
+
82
+ ### Edit Mode
83
+
84
+ Click the edit button (pencil icon) in the detail header to open the edit form.
85
+
86
+ | Field | Description |
87
+ |-------|-------------|
88
+ | Name | Collection display name |
89
+ | Description | Markdown description |
90
+ | Cover Image | File path for a cover image ("Use current file" button fills this with the currently viewed file) |
91
+ | Tags | Comma-separated tags for searching |
92
+
93
+ The danger zone at the bottom has a "Delete Collection" button with a confirmation step.
94
+
95
+ ## Item Types
96
+
97
+ | Type | Created By | Special Fields |
98
+ |------|-----------|----------------|
99
+ | `file` | Quick-add on a file | Path |
100
+ | `folder` | Quick-add on a folder (single reference) | Path |
101
+ | `folder-contents` | Quick-add on a folder (contents wildcard) | Path |
102
+ | `subfile` | Quick-add on a file inside an archive | Path, ArchivePath |
103
+ | `video-frame` | `a` key in video explorer | Path, FrameTimestamp, FrameCacheKey, FrameFilename |
104
+ | `video-clip` | `s` key in video explorer | Path, VideoStart, VideoEnd |
105
+ | `audio-clip` | `a`/`s` key in audio explorer | Path, AudioStart, AudioEnd |
106
+
107
+ Each item also stores an auto-generated label, the date it was added, and an optional sort order for manual sorting.
108
+
109
+ ## Operation Plans
110
+
111
+ Operation plan collections are a special collection type used for batch file operations (move, copy, rename). They are created programmatically rather than through the standard UI.
112
+
113
+ ### Display
114
+
115
+ Operation plan collections show a summary bar with counts of pending, completed, failed, and skipped items. Each item row shows:
116
+
117
+ - Status indicator (pending, completed, failed, skipped)
118
+ - Source path and destination path with an arrow between them
119
+ - Operation badge (MOVE, COPY, or RENAME)
120
+ - Skip button (for pending items)
121
+ - Error message (for failed items)
122
+
123
+ ### Controls
124
+
125
+ | Button | Action |
126
+ |--------|--------|
127
+ | Execute | Run all pending operations |
128
+ | Undo | Reverse completed operations |
129
+
130
+ Pending item destinations can be edited inline by clicking the destination path.
131
+
132
+ ## Keyboard Shortcuts
133
+
134
+ | Key | Mode | Action |
135
+ |-----|------|--------|
136
+ | `a` | Gallery, viewer, all explorers | Quick-add current item to collection |
137
+ | `s` | Video explorer | Add selected range as video clip |
138
+ | `s` | Audio explorer | Save audio snippet to collection |
139
+ | `[` | Video explorer | Set selection start at current frame |
140
+ | `]` | Video explorer | Set selection end at current frame |
141
+ | `b` | All modes | Toggle collection panel |
142
+ | `h` | All modes | Toggle favorite |
143
+
144
+ ## Data Storage
145
+
146
+ Collections are stored server-side as Bibliograph records. Each collection is a JSON document containing the collection metadata and its items array. The favorites collection uses a well-known GUID and is created automatically.
147
+
148
+ Client-side state (which collection is open, panel width, last-used collection) persists in the browser via localStorage.
149
+
150
+ ## API Endpoints
151
+
152
+ | Method | Endpoint | Description |
153
+ |--------|----------|-------------|
154
+ | GET | `/api/collections` | List all collections (summaries) |
155
+ | GET | `/api/collections/:guid` | Get full collection with items |
156
+ | PUT | `/api/collections/:guid` | Create or update a collection |
157
+ | DELETE | `/api/collections/:guid` | Delete a collection |
158
+ | POST | `/api/collections/:guid/items` | Add items to a collection |
159
+ | DELETE | `/api/collections/:guid/items/:itemId` | Remove an item |
160
+ | PUT | `/api/collections/:guid/reorder` | Reorder items (manual sort) |
161
+ | POST | `/api/collections/copy-items` | Copy items between collections |
162
+ | POST | `/api/collections/:guid/execute` | Execute pending operations (operation plans) |
@@ -0,0 +1,71 @@
1
+ # Image Explorer
2
+
3
+ The image explorer provides deep-zoom inspection of images using OpenSeadragon. Small images load directly; images larger than 4096 pixels are automatically tiled into a DZI pyramid for smooth pan and zoom at any resolution.
4
+
5
+ ## Opening the Explorer
6
+
7
+ - From the image viewer, press `e`
8
+ - URL updates to `#/explore-image/{id}`
9
+
10
+ ## Display Modes
11
+
12
+ ### Direct Mode
13
+
14
+ Images with a longest side of 4096 pixels or less load as a single image. The info bar shows dimensions, megapixels, and "Direct" as the mode.
15
+
16
+ ### DZI Tile Mode
17
+
18
+ Images exceeding 4096 pixels trigger server-side tile generation using Sharp. The image is sliced into 256-pixel tiles at multiple zoom levels, served from `/api/media/dzi-tile/{cacheKey}/{level}/{col}_{row}.{format}`. The info bar shows tile size, format, and live coordinate and zoom readouts.
19
+
20
+ If Sharp is not available on the server, the image loads directly regardless of size.
21
+
22
+ ## UI Elements
23
+
24
+ - **Header**: Back button and filename
25
+ - **Info bar**: Image dimensions, megapixels, mode, and (in DZI mode) coordinates and zoom percentage
26
+ - **Viewer canvas**: Main pan-and-zoom area powered by OpenSeadragon
27
+ - **Navigator**: A minimap in the bottom-right corner showing the full image with a viewport indicator rectangle
28
+
29
+ ## Mouse Interactions
30
+
31
+ | Action | Effect |
32
+ |--------|--------|
33
+ | Click | Zoom in at click position |
34
+ | Double-click | Toggle zoom level |
35
+ | Click and drag | Pan the image |
36
+ | Scroll wheel | Zoom in or out at cursor position |
37
+ | Mouse move | Updates coordinate display (DZI mode) |
38
+
39
+ ### Touch
40
+
41
+ | Action | Effect |
42
+ |--------|--------|
43
+ | Pinch | Zoom in or out |
44
+ | Drag | Pan the image |
45
+ | Flick | Momentum-based pan (0.25x velocity) |
46
+
47
+ ## Keyboard Shortcuts
48
+
49
+ | Key | Action |
50
+ |-----|--------|
51
+ | `+` / `=` | Zoom in (1.5x) |
52
+ | `-` | Zoom out (1.5x) |
53
+ | `0` | Reset to home zoom (fit to view) |
54
+ | `a` | Quick-add to active collection |
55
+ | `b` | Toggle collection panel |
56
+ | `h` | Toggle favorite |
57
+ | `Esc` | Back to image viewer |
58
+
59
+ ## Coordinate Display
60
+
61
+ In DZI tile mode, the info bar shows the pixel coordinates of the point under the cursor in real time (e.g., "(4096, 3072)"). This updates as the mouse moves across the canvas and reflects the actual pixel position in the original full-resolution image.
62
+
63
+ ## Zoom Levels
64
+
65
+ Each keyboard zoom step multiplies or divides by 1.5. The navigator minimap updates to show the current viewport position. The zoom percentage is displayed in the info bar in DZI mode.
66
+
67
+ ## Supported Formats
68
+
69
+ All image formats supported by the viewer work in the explorer: png, jpg, jpeg, gif, webp, svg, bmp, ico, avif, tiff, tif, heic, heif.
70
+
71
+ Animated formats (GIF, WebP) display their first frame in the explorer.
@@ -67,23 +67,7 @@ These work while viewing any image:
67
67
 
68
68
  ## Image Explorer
69
69
 
70
- The image explorer provides a dedicated zoom and pan interface for detailed image inspection.
71
-
72
- ### Opening the Explorer
73
-
74
- - From the image viewer, press `e`
75
-
76
- ### Keyboard Shortcuts
77
-
78
- | Key | Action |
79
- |-----|--------|
80
- | `+` / `=` | Zoom in |
81
- | `-` | Zoom out |
82
- | `0` | Reset zoom to home |
83
- | `a` | Quick-add to collection |
84
- | `b` | Toggle collection panel |
85
- | `h` | Toggle favorite |
86
- | `Esc` | Back to image viewer |
70
+ Press `e` to open the image explorer for deep-zoom inspection with OpenSeadragon. Images larger than 4096 pixels are automatically tiled for smooth pan and zoom at any resolution. See the full [Image Explorer](image-explorer.md) documentation for details.
87
71
 
88
72
  ## File Info Overlay
89
73