{"id":"setup-onboarding.first-launch-welcome-flow","area":"Setup & Onboarding","name":"First-launch welcome flow","description":"On first app launch, a multi-page wizard walks the user through profile, networks, capabilities, permissions, and optionally default-player pages before opening the main screen.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"setup-onboarding.language-selection-on-welcome","area":"Setup & Onboarding","name":"Language selection on welcome","description":"The first welcome page shows a three-button strip (EN/RU/UK) that immediately switches the app locale and recreates the activity, persisting the choice.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"setup-onboarding.color-theme-selection-on-welcome","area":"Setup & Onboarding","name":"Color theme selection on welcome","description":"The first welcome page shows an Auto/Light/Dark theme picker that applies the chosen theme immediately and persists it.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"setup-onboarding.device-profile-auto-detection-and-selection","area":"Setup & Onboarding","name":"Device profile auto-detection and selection","description":"A profile page auto-detects the most suitable device profile (phone, tablet, TV, car, VR) with a confidence badge and pre-selects it; the user can override.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0399","status":"active"}
{"id":"setup-onboarding.device-profile-preset-application","area":"Setup & Onboarding","name":"Device profile preset application","description":"Advancing past the profile page applies the selected profile settings preset, configuring default content types, layouts, and behavior for the device.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0399","status":"active"}
{"id":"setup-onboarding.remote-source-group-toggles-on-welcome","area":"Setup & Onboarding","name":"Remote source group toggles on welcome","description":"A networks page offers SMB, FTP/SFTP, and Cloud toggle rows that mass-enable or disable the corresponding source flags; rows absent on unsupported flavors.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0391","status":"active"}
{"id":"setup-onboarding.capability-toggles-on-welcome","area":"Setup & Onboarding","name":"Capability toggles on welcome","description":"A functionality page shows per-capability toggle rows (File Manager, Audio, Video, Documents) persisting changes immediately; rows absent when the flavor lacks the capability.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0400","status":"active"}
{"id":"setup-onboarding.inline-ocr-engine-download-on-welcome","area":"Setup & Onboarding","name":"Inline OCR engine download on welcome","description":"Enabling the OCR toggle on the functionality page enqueues the OCR engines download with inline progress; the capability activates only after a successful install.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0400","status":"active"}
{"id":"setup-onboarding.inline-translation-engine-download-on-welcome","area":"Setup & Onboarding","name":"Inline translation engine download on welcome","description":"Enabling the translation toggle on the functionality page enqueues the translation download with inline progress; translation enables only after a successful install.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0400","status":"active"}
{"id":"setup-onboarding.open-extensions-manager-from-welcome","area":"Setup & Onboarding","name":"Open Extensions Manager from welcome","description":"A button on the functionality page opens the extensions manager overlay to browse and manage optional downloadable modules without leaving the wizard.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0400","status":"active"}
{"id":"setup-onboarding.adaptive-permission-list-and-individual-grant","area":"Setup & Onboarding","name":"Adaptive permission list and individual grant","description":"A permissions page renders every permission the build can request, grouped by category, with per-row status; tapping a row requests it or opens the relevant system screen.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0402","status":"active"}
{"id":"setup-onboarding.grant-all-permissions-at-once","area":"Setup & Onboarding","name":"Grant all permissions at once","description":"A Grant all button runs a stepwise flow: one batch dialog for regular permissions, then each special permission opened in its own system screen one at a time.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0402","status":"active"}
{"id":"setup-onboarding.open-app-system-settings-from-permissions-page","area":"Setup & Onboarding","name":"Open app system settings from permissions page","description":"An Open settings button launches the OS application details screen so users can manually adjust permissions that cannot be requested in-app.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0402","status":"active"}
{"id":"setup-onboarding.set-as-default-player-per-media-type","area":"Setup & Onboarding","name":"Set as default player per media type","description":"A default-player page presents per-type buttons (audio, video, images, documents) that trigger the system role chooser; buttons gated by flavor capabilities.","flavors":["standard","legacy","vr","noLegal","photos"],"spec":null,"status":"active"}
{"id":"setup-onboarding.one-tap-enable-all","area":"Setup & Onboarding","name":"One-tap Enable All","description":"A single Enable all button applies the universal profile and settings, enqueues optional downloads, walks permission dialogs, then opens default-player choosers in one sequence.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0409","status":"active"}
{"id":"setup-onboarding.auto-open-settings-on-first-run","area":"Setup & Onboarding","name":"Auto-open Settings on first run","description":"Immediately after completing the welcome flow the first time, the app opens Settings with the main screen as the back-stack root, once only.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"setup-onboarding.welcome-re-entry-from-settings","area":"Setup & Onboarding","name":"Welcome re-entry from Settings","description":"Users can re-open the welcome wizard from Settings to change device profile or source toggles; a confirmation warns before overwriting tuned settings.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"setup-onboarding.welcome-wizard-page-indicator-and-navigation","area":"Setup & Onboarding","name":"Welcome wizard page indicator and navigation","description":"An animated page indicator shows progress; Previous and Next buttons navigate pages and Finish appears on the last page.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"setup-onboarding.d-pad-and-keyboard-navigation-in-welcome","area":"Setup & Onboarding","name":"D-pad and keyboard navigation in welcome","description":"All welcome pages support D-pad, keyboard, and mouse-wheel navigation with arrow keys, Tab focus cycling, and Enter activation.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0289","status":"active"}
{"id":"usage-statistics.enable-usage-statistics-collection","area":"Usage Statistics","name":"Enable usage statistics collection","description":"An opt-in toggle in General Settings enables local statistics recording; turning it off wipes detailed activity while preserving baseline launch count and first-launch date.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.statistics-dashboard-window","area":"Usage Statistics","name":"Statistics dashboard window","description":"When collection is enabled, a Statistics row in General Settings opens a dashboard with summary cards, a media-type distribution bar, and collapsible sections.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.summary-cards","area":"Usage Statistics","name":"Summary cards","description":"Three summary cards display all-time totals for files sorted, bytes freed by deletions, and combined video plus audio time in the player.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.media-type-distribution-bar","area":"Usage Statistics","name":"Media-type distribution bar","description":"A proportional bar chart breaks down processed files by media type (image, video, audio, document, other), shown only when there is activity.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.collapsible-metric-sections","area":"Usage Statistics","name":"Collapsible metric sections","description":"The dashboard groups metrics into collapsible sections (Operations, Capture, Viewing, Editing, Sources, Usage); zero-value rows are hidden automatically.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.operations-metrics","area":"Usage Statistics","name":"Operations metrics","description":"Tracks files copied, moved, deleted with bytes, archived, extracted, folders created, duplicate scans run, and duplicates removed.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.capture-metrics","area":"Usage Statistics","name":"Capture metrics","description":"Shows counts of photos taken, videos recorded, voice notes captured, and edge-gesture screenshots taken.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.viewing-metrics","area":"Usage Statistics","name":"Viewing metrics","description":"Tracks images viewed, videos watched with watch time, audio played with listen time, documents opened with page count, and frames exported.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.editing-metrics","area":"Usage Statistics","name":"Editing metrics","description":"Tracks the count of drawing/annotation canvases created and text notes written in the in-app editor.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.sources-connected-metric","area":"Usage Statistics","name":"Sources connected metric","description":"Shows how many network or cloud sources the user has connected; hidden on flavors without cloud or local-network support.","flavors":["standard","legacy","vr","noLegal","photos"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.always-on-baseline-metrics","area":"Usage Statistics","name":"Always-on baseline metrics","description":"Shows launch count, first-launch date, and install version regardless of the opt-in toggle; session count and active time appear when collection is on.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.send-statistics-report-to-author","area":"Usage Statistics","name":"Send statistics report to author","description":"A Send to author button builds a text report off the UI thread and opens the email chooser pre-filled with the author address and the report attached.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"usage-statistics.export-statistics-report-as-text-file","area":"Usage Statistics","name":"Export statistics report as text file","description":"An Export button builds the same text report and opens a system share chooser so the user can save or forward the file.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0473","status":"active"}
{"id":"sources-storage.local-folder-source","area":"Sources & Storage","name":"Local folder source","description":"Adds local device folders as browsable media sources, with optional subdirectory scanning, hidden-file visibility, and media-type filter per source.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"sources-storage.smb-nas-network-source","area":"Sources & Storage","name":"SMB/NAS network source","description":"Connects to SMB shares on the local network as browsable media sources with pooled connections and background lifecycle management.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"sources-storage.ftp-network-source","area":"Sources & Storage","name":"FTP network source","description":"Connects to FTP servers as browsable and playable media sources with connection pooling and file-operation handlers.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"sources-storage.sftp-network-source","area":"Sources & Storage","name":"SFTP network source","description":"Connects to SFTP servers as browsable media sources with SSH connection pooling, passphrase support, and file-operation handlers.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"sources-storage.cloud-drive-source","area":"Sources & Storage","name":"Cloud drive source","description":"Connects Google Drive, Dropbox, and OneDrive as media sources with per-provider OAuth, folder picker UI, and remote editing support.","flavors":["standard","photos","vr","noLegal","legacy"],"spec":null,"status":"active"}
{"id":"sources-storage.virtual-predefined-resources","area":"Sources & Storage","name":"Virtual predefined resources","description":"Provisions built-in virtual sources (All Files, Camera) on first launch; idempotent provisioning repairs partial installs on subsequent starts.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"sources-storage.resource-export-to-share-file","area":"Sources & Storage","name":"Resource export to share file","description":"Exports configured resources including credentials to a portable file that can be opened, shared, or imported via Backup and Restore on another device.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0422","status":"active"}
{"id":"sources-storage.resource-import-from-share-file","area":"Sources & Storage","name":"Resource import from share file","description":"Parses a resource-share file and adds the contained sources to the local database, merging credentials and settings.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0422","status":"active"}
{"id":"sources-storage.network-file-list-index-cache","area":"Sources & Storage","name":"Network file-list index cache","description":"Persists compressed file-list snapshots for SMB/FTP/SFTP sources so subsequent directory opens bypass slow network fetches.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"sources-storage.streaming-playback-cache","area":"Sources & Storage","name":"Streaming playback cache","description":"Caches byte ranges of remote media files locally to enable smooth network/cloud playback and session resume after reconnect.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"sources-storage.thumbnail-cache-for-remote-sources","area":"Sources & Storage","name":"Thumbnail cache for remote sources","description":"Stores generated thumbnails for network and cloud files in a cache to avoid repeated remote fetches.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"sources-storage.per-resource-pin-protection","area":"Sources & Storage","name":"Per-resource PIN protection","description":"Optionally locks a source behind a numeric PIN stored in the resource record; the PIN is included when the resource is exported.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"sources-storage.toggle-remote-sources-on-off","area":"Sources & Storage","name":"Toggle remote sources on/off","description":"Per-protocol switches hide or reveal their resources and stop background activity when disabled, without deleting the source records.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0391","status":"active"}
{"id":"sources-storage.unified-settings-backup-including-sources","area":"Sources & Storage","name":"Unified settings backup including sources","description":"Serializes all resources, credentials, favorites, schedules, and web-auth sessions into a single backup restorable after reinstall to file or Google Drive.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"network-cloud.nas-host-auto-discovery","area":"Network & Cloud","name":"NAS/host auto-discovery","description":"Scans the active IPv4 subnet via concurrent TCP port probes for SMB, FTP, and SFTP and streams discovered hosts to the add-resource UI.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"network-cloud.smb-share-enumeration","area":"Network & Cloud","name":"SMB share enumeration","description":"After a host is discovered or entered, lists available SMB shares on that host so the user can pick one as the resource root.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"network-cloud.network-speed-test-with-thread-recommendation","area":"Network & Cloud","name":"Network speed test with thread recommendation","description":"Measures read and write throughput to a resource and returns recommended thread count and buffer size to optimize multi-threaded transfers.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"network-cloud.resource-connection-test","area":"Network & Cloud","name":"Resource connection test","description":"Tests reachability and authentication of a configured source and returns status, latency in milliseconds, and a diagnostic message.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"network-cloud.sftp-ssh-private-key-authentication","area":"Network & Cloud","name":"SFTP SSH private-key authentication","description":"Authenticates SFTP resources using an SSH private key file with optional passphrase instead of a password.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0046","status":"active"}
{"id":"network-cloud.sftp-host-key-fingerprint-pinning","area":"Network & Cloud","name":"SFTP host-key fingerprint pinning","description":"Stores a SHA-256 host-key fingerprint per SFTP resource and aborts connections where the server presents a non-matching key.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0046","status":"active"}
{"id":"network-cloud.google-drive-oauth-authentication","area":"Network & Cloud","name":"Google Drive OAuth authentication","description":"Authenticates Google Drive via OAuth 2.0 with token refresh and a state machine tracking signed-in, expired, and error states.","flavors":["standard","photos","vr","noLegal","legacy"],"spec":null,"status":"active"}
{"id":"network-cloud.dropbox-oauth-authentication","area":"Network & Cloud","name":"Dropbox OAuth authentication","description":"Authenticates Dropbox via the SDK OAuth flow with a folder picker and managed token lifecycle.","flavors":["standard","photos","vr","noLegal","legacy"],"spec":null,"status":"active"}
{"id":"network-cloud.onedrive-oauth-authentication","area":"Network & Cloud","name":"OneDrive OAuth authentication","description":"Authenticates Microsoft OneDrive via MSAL with a dedicated coordinator, REST client, and folder picker.","flavors":["standard","photos","vr","noLegal","legacy"],"spec":null,"status":"active"}
{"id":"network-cloud.cloud-settings-backup-to-google-drive","area":"Network & Cloud","name":"Cloud settings backup to Google Drive","description":"Uploads the full settings backup payload to the user Google Drive account, enabling restore on any device with the same account.","flavors":["standard","photos","vr","noLegal","legacy"],"spec":null,"status":"active"}
{"id":"network-cloud.scheduled-background-network-sync","area":"Network & Cloud","name":"Scheduled background network sync","description":"Runs periodic background jobs that refresh cached file lists for enabled network sources and update file counts and last-sync timestamps.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"network-cloud.sftp-key-auth-for-predefined-xml-resources","area":"Network & Cloud","name":"SFTP key auth for predefined XML resources","description":"Bundled XML config resources support SSH key authentication so pre-configured deployments can use key-based SFTP without credential entry.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0046","status":"active"}
{"id":"media-browsing.file-manager-mode","area":"Media Browsing","name":"File manager mode","description":"Toggles a resource-level flag to list every file type in the folder, overriding the media-type filter configured for the resource.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.show-hidden-files-toggle","area":"Media Browsing","name":"Show hidden files toggle","description":"When file-manager mode is enabled, a secondary toggle reveals dot-prefixed files and folders that are normally invisible.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.zip-archive-extraction-with-password","area":"Media Browsing","name":"ZIP archive extraction with password","description":"Opens a ZIP file to extract its contents in place; protected ZIPs prompt for a password and unsupported protection produces a clear error.","flavors":["standard","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.office-and-pdf-document-handoff","area":"Media Browsing","name":"Office and PDF document handoff","description":"Filters and opens DOC, DOCX, RTF, ODT, or protected PDF files by handing them to an external viewer, with a password indicator in the row.","flavors":["standard","noLegal","legacy","vr"],"spec":null,"status":"active"}
{"id":"media-browsing.binary-file-bottom-sheet-menu","area":"Media Browsing","name":"Binary file bottom-sheet menu","description":"Tapping a non-archive binary file shows a bottom-sheet with Share, Open in, Copy, Move, Rename, and Delete actions.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.subfolder-navigation-with-path-stack","area":"Media Browsing","name":"Subfolder navigation with path stack","description":"When subdirectory scanning is enabled, folders appear as tappable items and the browse screen maintains a back-navigable path stack with per-directory cache.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.sort-modes","area":"Media Browsing","name":"Sort modes","description":"The browse list supports many sort modes (name, date, size, type, artist, title, duration, date taken, random, manual) persisted per resource.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.random-shuffle-with-re-shuffle","area":"Media Browsing","name":"Random shuffle with re-shuffle","description":"Random sort shuffles the file list with a mixed seed; tapping shuffle again immediately reshuffles without re-scanning, always a different order.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.drag-to-reorder-in-manual-sort","area":"Media Browsing","name":"Drag-to-reorder in manual sort","description":"In manual sort mode, items can be long-pressed and dragged to reorder; the new order is persisted per resource and directory.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.list-grid-display-mode-toggle","area":"Media Browsing","name":"List/grid display mode toggle","description":"Switches the browse screen between a detail list and a thumbnail grid; audio-only resources are locked to list mode; persisted per resource.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.session-file-filter","area":"Media Browsing","name":"Session file filter","description":"Applies a temporary filter by filename, date range, size range, and media type, in-memory from cache when available, not persisted after the session.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.thumbnail-loading","area":"Media Browsing","name":"Thumbnail loading","description":"Loads thumbnails via source-specific loaders (local, SMB, cloud, PDF); paused during fast scroll and auto-disabled for very large folders.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.background-thumbnail-preload-worker","area":"Media Browsing","name":"Background thumbnail preload worker","description":"After a network resource sync, a background task preloads thumbnails for cached entries over Wi-Fi, skipping files already cached.","flavors":["standard","legacy","noLegal","photos"],"spec":null,"status":"active"}
{"id":"media-browsing.file-info-row","area":"Media Browsing","name":"File info row","description":"Each browse row shows a contextual detail line: resolution and date taken for images, resolution and duration for video, artist-title for audio, size and date otherwise.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":"S0210","status":"active"}
{"id":"media-browsing.multi-file-selection-with-range-select","area":"Media Browsing","name":"Multi-file selection with range select","description":"Long-press enters selection mode; long-press a checkbox extends to a contiguous range; select-all and clear-all are available in the action bar.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.favorite-toggle-per-file","area":"Media Browsing","name":"Favorite toggle per file","description":"Each browse row exposes a star button to mark or unmark the file as a favorite, reflected immediately via a partial list update.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.inline-audio-playback-in-browse-list","area":"Media Browsing","name":"Inline audio playback in browse list","description":"Tapping play on an audio row plays it directly in the list without opening the full player; SMB audio downloads to cache with next-track prefetch.","flavors":["standard","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.pagination-for-large-folders","area":"Media Browsing","name":"Pagination for large folders","description":"Folders with hundreds of files switch to a paging data source loading files in chunks to prevent memory pressure.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.live-file-system-observer-for-local-resources","area":"Media Browsing","name":"Live file-system observer for local resources","description":"An OS-level file observer watches the local directory and debounces change events to apply in-memory renames or trigger a reload.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.mediastore-change-observer","area":"Media Browsing","name":"MediaStore change observer","description":"A content observer on the MediaStore URI detects external changes such as camera saves to the current local folder and triggers a refresh.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.persisted-file-list-cache","area":"Media Browsing","name":"Persisted file list cache","description":"When enabled for a resource, the scanned file list is stored so subsequent opens restore the list instantly without re-scanning.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.read-only-resource-mode","area":"Media Browsing","name":"Read-only resource mode","description":"A resource marked read-only prevents all write operations from the browse screen; write buttons are hidden and attempts show an error.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.resource-access-pin-protection","area":"Media Browsing","name":"Resource access PIN protection","description":"A resource with an access PIN requires the user to enter it before the browse screen opens, shown as a lock indicator on the resource row.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.scroll-navigation-buttons","area":"Media Browsing","name":"Scroll navigation buttons","description":"Floating buttons appear contextually on long lists to jump to top or bottom or scroll one page at a time; hidden when all items fit.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.create-new-folder-inside-resource","area":"Media Browsing","name":"Create new folder inside resource","description":"A toolbar action creates a subdirectory inside the current path across local, SMB, SFTP, FTP, and cloud; hidden for read-only resources.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.small-controls-and-compact-elements-modes","area":"Media Browsing","name":"Small controls and compact elements modes","description":"Settings apply a reduced-size layout to browse items and toolbar, useful on low-resolution or small screens.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.cross-protocol-file-copy","area":"File Operations","name":"Cross-protocol file copy","description":"Copies files between any combination of Local, SMB, FTP, SFTP, and Cloud endpoints with byte-level progress and speed/ETA reporting.","flavors":["standard","legacy","vr","noLegal","photos"],"spec":null,"status":"active"}
{"id":"file-operations.cross-protocol-file-move","area":"File Operations","name":"Cross-protocol file move","description":"Moves files between any combination of Local, SMB, FTP, SFTP, and Cloud endpoints with byte-level progress reporting.","flavors":["standard","legacy","vr","noLegal","photos"],"spec":null,"status":"active"}
{"id":"file-operations.local-copy-and-move-photos-flavor","area":"File Operations","name":"Local copy and move (photos flavor)","description":"Copies or moves image files between Local, SMB, FTP, SFTP, and Cloud endpoints from the Photos-only flavor.","flavors":["photos"],"spec":null,"status":"active"}
{"id":"file-operations.local-only-file-copy-and-move-lite-flavor","area":"File Operations","name":"Local-only file copy and move (lite flavor)","description":"Copies or moves files between local storage paths only; network and cloud endpoints are not available in this flavor.","flavors":["lite"],"spec":null,"status":"active"}
{"id":"file-operations.file-rename","area":"File Operations","name":"File rename","description":"Renames a single file or folder on local, SMB, FTP, SFTP, or cloud, triggering a MediaStore rescan after completion.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.soft-delete-to-trash","area":"File Operations","name":"Soft delete to trash","description":"Moves deleted files to a per-directory trash snapshot folder instead of permanently removing them, enabling later restore.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.permanent-delete","area":"File Operations","name":"Permanent delete","description":"Permanently removes selected files or directories across local, SMB, FTP, SFTP, and cloud; requests MediaStore batch-delete consent on Android 11+.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.undo-last-delete","area":"File Operations","name":"Undo last delete","description":"Restores files from the nearest trash snapshot in the current directory, reversing the most recent soft-delete.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.automatic-trash-cleanup","area":"File Operations","name":"Automatic trash cleanup","description":"A background worker periodically removes expired trash snapshot directories from all local resources to reclaim storage.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.duplicate-file-finder","area":"File Operations","name":"Duplicate file finder","description":"Scans selected resources using a three-phase engine (size, quick-hash, full SHA-256) to identify identical files with auto-delete or manual review.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.delete-files-by-size-threshold","area":"File Operations","name":"Delete files by size threshold","description":"Scans a resource for files below a maximum or above a minimum size, previews the match list, then deletes confirmed files.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.photo-capture-to-any-destination","area":"File Operations","name":"Photo capture to any destination","description":"Launches the system or in-app camera to take a photo saved directly to the currently browsed local, network, or cloud folder.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.video-capture-to-any-destination","area":"File Operations","name":"Video capture to any destination","description":"Launches the system camera to record a video saved directly to the currently browsed local, network, or cloud folder.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.voice-memo-recording-to-any-destination","area":"File Operations","name":"Voice memo recording to any destination","description":"Records a microphone audio note and saves it to a local or network/cloud folder with audio-focus management.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.zip-archive-creation","area":"File Operations","name":"ZIP archive creation","description":"Compresses a selection of local files into a named ZIP archive with per-file progress; network/cloud source paths are skipped with a warning.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.scheduled-file-operations","area":"File Operations","name":"Scheduled file operations","description":"Configures recurring or one-shot copy, move, or delete tasks executed in the background on a user-defined schedule.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.background-transfer-progress-with-speed-and-eta","area":"File Operations","name":"Background transfer progress with speed and ETA","description":"Copy and move operations emit per-file byte counts, transfer speed, and cumulative progress shown in a progress dialog.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.browse-copy-move-background-mode","area":"File Operations","name":"Browse copy and move background mode","description":"Browse copy and move operations can be sent to the background, keep running with a progress notification, and reattach to the same Browse context when reopened.","flavors":["standard","legacy","vr","noLegal","photos"],"spec":"S0818","status":"active"}
{"id":"file-operations.file-name-conflict-auto-resolution","area":"File Operations","name":"File name conflict auto-resolution","description":"Automatically appends a suffix to destination file names when a collision is detected, avoiding silent overwrites without user input.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.operation-undo-in-browse-and-player","area":"File Operations","name":"Operation undo in browse and player","description":"Tracks the last copy, move, or delete batch as undoable, allowing single-tap reversal from both the browser and the player.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"file-operations.cloud-re-authentication-recovery","area":"File Operations","name":"Cloud re-authentication recovery","description":"When a cloud operation fails on an expired token, the result carries a re-authentication signal that prompts sign-in without losing the queued operation.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"destinations.quick-sort-destination-panel-in-player","area":"Destinations","name":"Quick Sort destination panel in player","description":"The player shows Copy and Move panels with color-coded shortcut buttons for every destination resource, sorting the current file in one tap.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"destinations.configurable-destination-slot-limit","area":"Destinations","name":"Configurable destination slot limit","description":"The maximum number of destination shortcut buttons shown can be set in Settings; default is 10 and options extend to 30, with adaptive layout.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"destinations.mark-resource-as-destination","area":"Destinations","name":"Mark resource as destination","description":"Any non-read-only, non-virtual resource can be flagged as a destination, assigning it the next slot order and a distinct preset color.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"destinations.auto-advance-to-next-file-after-sort","area":"Destinations","name":"Auto-advance to next file after sort","description":"An optional setting automatically advances to the next file in the player immediately after a copy or move completes.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"destinations.undo-last-sort-operation","area":"Destinations","name":"Undo last sort operation","description":"After a copy or move to a destination, an undo action reverses the operation; the undo capability can be disabled in settings.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"destinations.custom-path-picker-in-sort-panel","area":"Destinations","name":"Custom path picker in sort panel","description":"A button in each sort panel opens a folder picker so the user can copy or move to any path not pre-configured as a destination.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"destinations.downloads-provisioned-as-first-destination","area":"Destinations","name":"Downloads provisioned as first destination","description":"On a fresh install the public Downloads folder is automatically added as the first destination so the sort panels work without setup.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"destinations.collapsible-copy-and-move-panels","area":"Destinations","name":"Collapsible Copy and Move panels","description":"Each of the Copy and Move panels can be collapsed; when both are collapsed they share one horizontal row to save screen space.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"destinations.width-adaptive-destination-button-layout","area":"Destinations","name":"Width-adaptive destination button layout","description":"Destination buttons are distributed across rows and their font size scales from the button width, using one row on wide screens.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":"S0227","status":"active"}
{"id":"destinations.per-destination-color-coding","area":"Destinations","name":"Per-destination color coding","description":"Each destination button is rendered in a unique preset color assigned when marked; text color auto-switches to black or white by luminance.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"destinations.overwrite-control-for-copy-and-move","area":"Destinations","name":"Overwrite control for copy and move","description":"Independent settings control whether existing files are silently overwritten during copy and during move operations; both default to off.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.in-place-image-rotation","area":"Image & GIF Viewer","name":"In-place image rotation","description":"Destructively rotates the source image file in 90-degree steps on local or network storage, preserving and resetting EXIF orientation.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.in-place-image-flip","area":"Image & GIF Viewer","name":"In-place image flip","description":"Destructively flips the source image horizontally or vertically on local or network storage, preserving EXIF metadata.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.interactive-crop-with-region-selection","area":"Image & GIF Viewer","name":"Interactive crop with region selection","description":"Displays a draggable overlay and crops the selected region using a region decoder with EXIF-corrected coordinate mapping.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.crop-to-new-file","area":"Image & GIF Viewer","name":"Crop to new file","description":"Saves the selected crop region as a separate file with a crop suffix, without overwriting the original.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.compressed-copy","area":"Image & GIF Viewer","name":"Compressed copy","description":"Saves a JPEG-compressed copy of the current image to a user-chosen destination without touching the original.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.brightness-adjustment","area":"Image & GIF Viewer","name":"Brightness adjustment","description":"Applies a brightness offset to the image in-place using a color matrix and saves the result as JPEG.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.contrast-adjustment","area":"Image & GIF Viewer","name":"Contrast adjustment","description":"Scales pixel values to raise or lower image contrast using a color matrix transform saved to the source file.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.saturation-adjustment","area":"Image & GIF Viewer","name":"Saturation adjustment","description":"Adjusts color saturation from grayscale to vivid using a color matrix transform saved to the source file.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.grayscale-color-filter","area":"Image & GIF Viewer","name":"Grayscale color filter","description":"Applies a grayscale color matrix filter to the image and overwrites the source file with the result.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.sepia-color-filter","area":"Image & GIF Viewer","name":"Sepia color filter","description":"Applies a sepia-tone color matrix filter to the image and overwrites the source file.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.negative-color-filter","area":"Image & GIF Viewer","name":"Negative color filter","description":"Inverts all color channels via a color matrix filter and overwrites the source image file.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.network-image-editing","area":"Image & GIF Viewer","name":"Network image editing","description":"Downloads a network image to a temp file, applies rotate/flip/filter/adjustment operations, then uploads the result back to the original path.","flavors":["standard","legacy","noLegal","vr","photos"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.animated-gif-webp-apng-playback-with-pause","area":"Image & GIF Viewer","name":"Animated GIF/WEBP/APNG playback with pause","description":"Plays animated GIF, WEBP, and APNG files with a lifecycle-aware play/pause toggle and per-file state tracking.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.gif-playback-speed-control","area":"Image & GIF Viewer","name":"GIF playback speed control","description":"Adjusts GIF animation speed from 0.25x to 4.0x by rebuilding frame delays and overwriting the source file.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.gif-first-frame-export","area":"Image & GIF Viewer","name":"GIF first-frame export","description":"Extracts and saves the first frame of a GIF as a PNG to Downloads with a first-frame suffix.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"image-gif-viewer.animated-image-frame-extraction","area":"Image & GIF Viewer","name":"Animated image frame extraction","description":"Extracts all frames from GIF, WEBP, or APNG files to individual PNG files in the source or a chosen folder.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"drawing-annotations.freehand-brush-drawing-on-image","area":"Drawing & Annotations","name":"Freehand brush drawing on image","description":"Overlays a transparent canvas on an image and records freehand strokes with configurable color, size, and opacity.","flavors":["standard","lite","photos","legacy"],"spec":"S0192","status":"active"}
{"id":"drawing-annotations.rectangle-shape-tool","area":"Drawing & Annotations","name":"Rectangle shape tool","description":"Draws outlined rectangles on the canvas overlay with live drag preview using the active color and brush size.","flavors":["standard","lite","photos","legacy"],"spec":"S0192","status":"active"}
{"id":"drawing-annotations.oval-shape-tool","area":"Drawing & Annotations","name":"Oval shape tool","description":"Draws outlined ovals and circles on the canvas overlay with live drag preview using the active color and brush size.","flavors":["standard","lite","photos","legacy"],"spec":"S0192","status":"active"}
{"id":"drawing-annotations.text-annotation-layer","area":"Drawing & Annotations","name":"Text annotation layer","description":"Places a text string at a tapped position on the canvas with configurable size and color.","flavors":["standard","lite","photos","legacy"],"spec":"S0192","status":"active"}
{"id":"drawing-annotations.eraser-tool","area":"Drawing & Annotations","name":"Eraser tool","description":"Clears canvas pixels using a clear blend mode at twice the current brush size, encoded as a transparent stroke.","flavors":["standard","lite","photos","legacy"],"spec":"S0192","status":"active"}
{"id":"drawing-annotations.persistent-color-and-brush-preferences","area":"Drawing & Annotations","name":"Persistent color and brush preferences","description":"Stores last color, custom swatch, brush size, text size, and opacity in preferences that survive sessions.","flavors":["standard","lite","photos","legacy"],"spec":"S0192","status":"active"}
{"id":"drawing-annotations.in-place-save-of-annotated-image","area":"Drawing & Annotations","name":"In-place save of annotated image","description":"Merges the draw overlay onto the base image and writes the composite back to the file path, with staging for network/cloud resources.","flavors":["standard","lite","photos","legacy"],"spec":"S0191","status":"active"}
{"id":"drawing-annotations.blank-canvas-creation","area":"Drawing & Annotations","name":"Blank canvas creation","description":"Creates a new blank image file in the current folder or staging area and opens it in draw mode for a new annotation session.","flavors":["standard","lite","photos","legacy"],"spec":"S0191","status":"active"}
{"id":"drawing-annotations.send-annotated-drawing-via-send-to-menu","area":"Drawing & Annotations","name":"Send annotated drawing via Send to menu","description":"Composites the overlay with the base image into a cached file and passes it to the unified Send To menu for gated-receiver dispatch.","flavors":["standard","lite","photos","legacy"],"spec":"S0192","status":"active"}
{"id":"sharing.unified-send-to-bottom-sheet","area":"Sharing","name":"Unified Send to bottom sheet","description":"Presents all enabled, available, and type-matching receivers in a single bottom sheet in fixed order; auto-dispatches when only one qualifies.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0459","status":"active"}
{"id":"sharing.system-share-receiver","area":"Sharing","name":"System Share receiver","description":"Opens the Android system share chooser for any file type with multi-file selection; always enabled and available.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0459","status":"active"}
{"id":"sharing.email-receiver","area":"Sharing","name":"Email receiver","description":"Attaches one or more files to a new email; enabled by default when internet access is available.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0459","status":"active"}
{"id":"sharing.telegram-receiver","area":"Sharing","name":"Telegram receiver","description":"Shares files to any installed Telegram variant with multi-file batch support, resolving the app label dynamically.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0459","status":"active"}
{"id":"sharing.whatsapp-receiver","area":"Sharing","name":"WhatsApp receiver","description":"Shares files to WhatsApp or WhatsApp Business; shown only when either package is installed.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0459","status":"active"}
{"id":"sharing.instagram-receiver","area":"Sharing","name":"Instagram receiver","description":"Shares a single image, video, or GIF to Instagram; on a multi-selection it applies to the first file with a hint.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0459","status":"active"}
{"id":"sharing.google-keep-receiver","area":"Sharing","name":"Google Keep receiver","description":"Exports the current image to Google Keep as an attachment; restricted to images and requires Keep installed.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0459","status":"active"}
{"id":"sharing.google-lens-receiver","area":"Sharing","name":"Google Lens receiver","description":"Opens the current image or GIF in Google Lens for visual search; requires Google services and is off by default.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0459","status":"active"}
{"id":"sharing.print-receiver","area":"Sharing","name":"Print receiver","description":"Sends images, GIFs, PDFs, text, and office documents to the Android print subsystem; always available and enabled.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0459","status":"active"}
{"id":"sharing.open-in-another-app-receiver","area":"Sharing","name":"Open in another app receiver","description":"Opens the current file in a third-party app for any file type; always enabled and available.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0459","status":"active"}
{"id":"sharing.per-receiver-settings-toggle-with-availability-gating","area":"Sharing","name":"Per-receiver settings toggle with availability gating","description":"Each Send to receiver has a settings toggle with help tooltip; unavailable receivers are hidden from the menu at runtime.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0463","status":"active"}
{"id":"sharing.send-to-overflow-submenu-in-player-command-bar","area":"Sharing","name":"Send to overflow submenu in player command bar","description":"Builds a hierarchical submenu in the player overflow bar using the same receiver list and gating, with per-receiver app icons.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0478","status":"active"}
{"id":"video-player.session-save-and-restore","area":"Video Player","name":"Session save and restore","description":"Saves the exact playback position periodically and restores it automatically on the next open, showing a resume toast with the timestamp.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.remote-session-restore-on-cold-start","area":"Video Player","name":"Remote session restore on cold start","description":"On app cold start, restores the last active network or cloud video session including its saved playback position.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.video-frame-capture-to-destination","area":"Video Player","name":"Video frame capture to destination","description":"Captures the current video frame as PNG or JPG and saves it to a configured resource with a Downloads fallback.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.frame-filename-with-timecode","area":"Video Player","name":"Frame filename with timecode","description":"Saved frame filenames encode the source video name and the exact playback position in an HHhMMmSSs format.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.picture-in-picture-mode","area":"Video Player","name":"Picture-in-Picture mode","description":"Enters a floating video window on home-button press or a dedicated button with remote play/pause; supported on Android 12+ only.","flavors":["standard","noLegal"],"spec":null,"status":"active"}
{"id":"video-player.d-pad-and-tv-remote-focus-navigation","area":"Video Player","name":"D-pad and TV remote focus navigation","description":"Full D-pad and remote focus navigation is supported in the video player for Android TV boxes and head units.","flavors":["standard","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"video-player.blu-ray-transport-stream-m2ts-playback","area":"Video Player","name":"Blu-ray Transport Stream (.m2ts) playback","description":"Auto-detects 192-byte BD packets and strips the header; plain 188-byte MPEG-TS files with a .m2ts extension play without unnecessary stripping.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.unsupported-audio-track-notice","area":"Video Player","name":"Unsupported audio track notice","description":"When all audio tracks in a file are unsupported by the device, a one-time toast lists the detected codecs instead of failing silently.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.playback-speed-control","area":"Video Player","name":"Playback speed control","description":"Adjusts playback speed in preset steps; the last-used speed is persisted and restored on the next video.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.subtitle-track-selection-and-styling","area":"Video Player","name":"Subtitle track selection and styling","description":"Enables or disables subtitles, selects subtitle language preference, and applies custom font size and family to the subtitle view.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.audio-track-selection","area":"Video Player","name":"Audio track selection","description":"Lists available audio tracks with language, codec, and channels; marks unsupported tracks and allows manual selection.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.preferred-audio-language-auto-selection","area":"Video Player","name":"Preferred audio language auto-selection","description":"Automatically selects the audio track matching the user-configured preferred language via track selection parameters.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.loop-single-video","area":"Video Player","name":"Loop single video","description":"Toggles repeat-one mode to loop the current video file indefinitely from the player settings dialog.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.swipe-gesture-navigation","area":"Video Player","name":"Swipe gesture navigation","description":"In fullscreen a multi-zone touch grid handles next/previous/back/sort; in command-panel mode a three-zone layout handles next and previous.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.pinch-to-zoom-on-video","area":"Video Player","name":"Pinch-to-zoom on video","description":"A scale gesture detector feeds scale factor into the player to allow pinch-zoom on the video surface.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.screen-rotation-lock-and-follow-os-mode","area":"Video Player","name":"Screen rotation lock and follow-OS mode","description":"A two-level rotation hierarchy: a program-wide follow-OS toggle and, when off, a player-only sensor or locked toggle; hidden without an accelerometer.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":"S0162","status":"active"}
{"id":"video-player.keep-screen-on-during-playback","area":"Video Player","name":"Keep screen on during playback","description":"A dependent setting keeps the screen awake only while the player or standalone players are active; shown only when the global option is off.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.3d-stereo-mode-selection","area":"Video Player","name":"3D stereo mode selection","description":"Lets the user set the stereoscopic display mode (Auto, SBS, OU, Mono) in the player settings dialog.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.auto-stereo-detection","area":"Video Player","name":"Auto stereo detection","description":"Analyses video track metadata and spatial tags off the main thread to identify SBS, OU, and 360 content automatically.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0326","status":"active"}
{"id":"video-player.hue-and-brightness-color-adjustment","area":"Video Player","name":"Hue and brightness color adjustment","description":"Real-time hue rotation and brightness offset via a debounced video-effects pipeline, persisted and restored on the next session.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.network-video-buffering-with-adaptive-load-control","area":"Video Player","name":"Network video buffering with adaptive load control","description":"Per-protocol buffer windows tuned to balance startup latency and memory for SMB, SFTP, FTP, and cloud playback.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.playback-health-check-and-stuck-recovery","area":"Video Player","name":"Playback health check and stuck recovery","description":"A delayed check compares player position after buffering; if unchanged across checks the player is treated as stuck and recovery is triggered.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.mediaplayer-fallback-for-unsupported-formats","area":"Video Player","name":"MediaPlayer fallback for unsupported formats","description":"When the primary engine cannot handle a file, playback retries with the platform MediaPlayer, routing pause/play/seek to the active engine.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"video-player.remote-source-availability-gate","area":"Video Player","name":"Remote source availability gate","description":"Before playback the player checks whether the target protocol source is enabled and returns a localized error instead of attempting a connection when disabled.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0391","status":"active"}
{"id":"vr-openxr.openxr-immersive-session-engine","area":"VR & OpenXR","name":"OpenXR immersive session engine","description":"A dedicated activity hosts a native OpenXR session with a render thread driving the frame loop on arm64 headsets including Quest 3 and Android XR.","flavors":["vr","noLegal"],"spec":"S0249","status":"active"}
{"id":"vr-openxr.360-degree-equirectangular-image-viewer","area":"VR & OpenXR","name":"360-degree equirectangular image viewer","description":"Renders full-sphere equirectangular images as an OpenXR composition layer; monoscopic and stereoscopic variants auto-detected from filename markers.","flavors":["vr","noLegal"],"spec":"S0249","status":"active"}
{"id":"vr-openxr.180-degree-hemisphere-image-viewer","area":"VR & OpenXR","name":"180-degree hemisphere image viewer","description":"Renders front-hemisphere and VR180 fisheye images in immersive mode with per-eye UV crop for stereoscopic layouts.","flavors":["vr","noLegal"],"spec":"S0249","status":"active"}
{"id":"vr-openxr.virtual-cinema-screen-for-flat-files","area":"VR & OpenXR","name":"Virtual cinema screen for flat files","description":"Flat images and videos are rendered on a virtual flat screen inside the immersive environment, configurable as Cinema, Full SBS, or Full OU.","flavors":["vr","noLegal"],"spec":"S0326","status":"active"}
{"id":"vr-openxr.stereoscopic-sbs-ou-rendering","area":"VR & OpenXR","name":"Stereoscopic SBS/OU rendering","description":"Side-by-Side and Over-Under stereoscopic formats are decoded and presented per-eye, resolved from filename markers, metadata, or aspect-ratio heuristics.","flavors":["vr","noLegal"],"spec":"S0326","status":"active"}
{"id":"vr-openxr.cylinder-projected-panorama-viewer","area":"VR & OpenXR","name":"Cylinder-projected panorama viewer","description":"180-degree cylinder-projected panoramic content is rendered via an OpenXR cylinder composition layer without spherical pole distortion.","flavors":["vr","noLegal"],"spec":"S0249","status":"active"}
{"id":"vr-openxr.immersive-video-playback","area":"VR & OpenXR","name":"Immersive video playback","description":"Local videos including stereo 3D and 360 play inside the OpenXR session via a native GL external texture surface with seek-restore from a state snapshot.","flavors":["vr","noLegal"],"spec":"S0296","status":"active"}
{"id":"vr-openxr.dynamic-media-playlist-in-immersive-mode","area":"VR & OpenXR","name":"Dynamic media playlist in immersive mode","description":"The immersive session hosts an ordered playlist of images and videos navigable forward and backward without leaving the OpenXR session.","flavors":["vr","noLegal"],"spec":"S0290","status":"active"}
{"id":"vr-openxr.head-locked-hud-overlay","area":"VR & OpenXR","name":"Head-locked HUD overlay","description":"A head-locked banner displays the current filename, detected projection type, and stereo layout; error states show a red variant.","flavors":["vr","noLegal"],"spec":"S0290","status":"active"}
{"id":"vr-openxr.interactive-hud-control-panel","area":"VR & OpenXR","name":"Interactive HUD control panel","description":"A world-locked panel with Play/Pause, Prev, Next and Volume and Depth sliders responds to controller ray-cast hover and click.","flavors":["vr","noLegal"],"spec":"S0283","status":"active"}
{"id":"vr-openxr.adjustable-stereo-parallax-depth","area":"VR & OpenXR","name":"Adjustable stereo parallax depth","description":"A real-time HUD slider controls a parallax-shift uniform passed to the shader, tuning perceived stereo depth without leaving the session.","flavors":["vr","noLegal"],"spec":"S0283","status":"active"}
{"id":"vr-openxr.controller-haptic-feedback","area":"VR & OpenXR","name":"Controller haptic feedback","description":"Controller vibrations are triggered via OpenXR haptic actions: a short pulse on button click and a lighter pulse on ray-hover.","flavors":["vr","noLegal"],"spec":"S0283","status":"active"}
{"id":"vr-openxr.hand-tracking-input-support","area":"VR & OpenXR","name":"Hand tracking input support","description":"The VR manifest requests hand-tracking and the native action set processes hand-tracking input for session exit.","flavors":["vr","noLegal"],"spec":"S0249","status":"active"}
{"id":"vr-openxr.multi-source-input-exit-handler","area":"VR & OpenXR","name":"Multi-source input exit handler","description":"Unifies controller button events, Android key events, and motion events into a single exit-request flow with a grace period after the first frame.","flavors":["vr","noLegal"],"spec":"S0249","status":"active"}
{"id":"vr-openxr.automatic-stereo-format-detection","area":"VR & OpenXR","name":"Automatic stereo format detection","description":"Auto-detects stereo and panoramic formats from filename markers, embedded spatial metadata, and optional aspect-ratio heuristics with configurable confidence.","flavors":["vr","noLegal"],"spec":"S0326","status":"active"}
{"id":"vr-openxr.per-file-stereo-format-override","area":"VR & OpenXR","name":"Per-file stereo format override","description":"The user can manually override the detected stereo mode per file; the override persists and takes priority over auto-detection on next playback.","flavors":["vr","noLegal"],"spec":"S0326","status":"active"}
{"id":"vr-openxr.auto-immersive-entry-for-stereo-content","area":"VR & OpenXR","name":"Auto-immersive entry for stereo content","description":"When enabled, opening a stereo or panoramic file from the player automatically launches the immersive session without an extra tap.","flavors":["vr","noLegal"],"spec":"S0326","status":"active"}
{"id":"vr-openxr.player-vr-launch-badge-and-overflow-entry","area":"VR & OpenXR","name":"Player VR launch badge and overflow entry","description":"Surfaces a badge overlay and overflow entry in the flat player for stereo-capable files when the XR runtime is available, capturing player state before handoff.","flavors":["vr","noLegal"],"spec":"S0292","status":"active"}
{"id":"vr-openxr.flat-player-state-snapshot-and-restore","area":"VR & OpenXR","name":"Flat-player state snapshot and restore","description":"On launching immersion from the player, full player state is serialized and passed to the XR activity, then restored exactly on exit.","flavors":["vr","noLegal"],"spec":"S0292","status":"active"}
{"id":"vr-openxr.xr-runtime-detection","area":"VR & OpenXR","name":"XR runtime detection","description":"Probes system features to distinguish Meta Quest from Android XR from non-XR devices, driving feature visibility without a build flag.","flavors":["vr","noLegal"],"spec":"S0249","status":"active"}
{"id":"vr-openxr.3d-vr-master-toggle-with-profile-sync","area":"VR & OpenXR","name":"3D/VR master toggle with profile sync","description":"A master toggle controls VR feature visibility globally; selecting the VR Headset device profile enables it automatically.","flavors":["vr","noLegal"],"spec":"S0249","status":"active"}
{"id":"vr-openxr.vr-settings-block-in-media-settings","area":"VR & OpenXR","name":"VR settings block in media settings","description":"A settings block exposes the master toggle, test immersive button, detection switches, default layout and projection, render mode, auto-immersive, and FPS overlay.","flavors":["vr","noLegal"],"spec":"S0249","status":"active"}
{"id":"vr-openxr.fps-overlay-in-immersive-hud","area":"VR & OpenXR","name":"FPS overlay in immersive HUD","description":"When enabled, the immersive HUD shows a live smoothed frame-rate counter sampled from the native frame loop.","flavors":["vr","noLegal"],"spec":"S0290","status":"active"}
{"id":"audio-player.background-audio-service","area":"Audio Player","name":"Background audio service","description":"Runs audio-only playback on a persistent media session service that survives activity destruction, with notification drawer controls.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"audio-player.notification-playback-controls","area":"Audio Player","name":"Notification playback controls","description":"The system notification drawer shows play/pause, seek, and track info backed by the media session while audio plays in the background.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"audio-player.configurable-back-exit-behavior","area":"Audio Player","name":"Configurable back-exit behavior","description":"When background audio is active, Back can ask each time, always stop the service, or always leave it running, per a setting.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"audio-player.chromecast-casting","area":"Audio Player","name":"Chromecast casting","description":"Casts the open audio, image, GIF, or video file to a Chromecast device via a local HTTP proxy; network/cloud files download to cache first.","flavors":["standard","legacy","noLegal","lite"],"spec":null,"status":"active"}
{"id":"audio-player.online-lyrics-search-and-display","area":"Audio Player","name":"Online lyrics search and display","description":"Searches for song lyrics using tags and filename, then shows them in a fullscreen overlay with configurable font size.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"audio-player.midi-file-playback","area":"Audio Player","name":"MIDI file playback","description":"Plays MID and MIDI files from local, network, and cloud sources with an explicit MIME hint across all resource types.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"audio-player.youtube-music-search-handoff","area":"Audio Player","name":"YouTube Music search handoff","description":"Opens a YouTube Music search for the current track in one tap, with an audio-only contract preventing video artifacts as results.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0260","status":"active"}
{"id":"audio-player.online-cover-art-search","area":"Audio Player","name":"Online cover art search","description":"When no embedded cover is found, searches iTunes, Deezer, and the Cover Art Archive in priority order to fetch high-resolution art.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"audio-player.animated-equalizer-bars-backdrop","area":"Audio Player","name":"Animated equalizer bars backdrop","description":"Displays sine-wave-animated pastel equalizer bars as a full-screen background when no cover art is available.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"audio-player.wave-and-particle-backdrop","area":"Audio Player","name":"Wave and particle backdrop","description":"Renders procedural sine-wave paths and drifting particles with a motion-blur trail as an alternative no-cover-art backdrop.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"audio-player.pulsing-rings-backdrop","area":"Audio Player","name":"Pulsing rings backdrop","description":"Shows concentric pulsing rings with a static music-note icon as a minimal animated backdrop when cover art is absent.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"audio-player.downloadable-looping-video-backdrops","area":"Audio Player","name":"Downloadable looping video backdrops","description":"Plays one of several looping clips installed on demand as a full-screen animated background when no cover art is available.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0386","status":"active"}
{"id":"audio-player.background-photos-during-audio-playback","area":"Audio Player","name":"Background photos during audio playback","description":"Loads random static images from a selected resource and cycles through them as a full-screen backdrop while audio plays.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"audio-player.playback-order-modes","area":"Audio Player","name":"Playback order modes","description":"Cycles through loop-list, play-once, shuffle, and repeat-one modes via a single command-panel button.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"audio-player.sleep-timer","area":"Audio Player","name":"Sleep timer","description":"Counts down a configurable duration then pauses playback with an optional volume fade-out; remaining time shown as a badge.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"audio-player.vinyl-record-playback-indicator","area":"Audio Player","name":"Vinyl record playback indicator","description":"Displays a small rotating vinyl-record animation in the player corner while audio is playing; stops on pause.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"audio-player.audio-focus-management","area":"Audio Player","name":"Audio focus management","description":"Requests and releases audio focus on start/stop and pauses on transient or permanent focus loss with an API-level fork.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"audio-player.quick-settings-tile-play-pause","area":"Audio Player","name":"Quick Settings tile play/pause","description":"A system Quick Settings tile toggles audio play/pause or launches music playback when nothing is playing.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"slideshow.image-and-gif-rotation-with-custom-interval","area":"Slideshow","name":"Image and GIF rotation with custom interval","description":"Auto-advances through images and GIFs at a per-resource interval (default 10 s, range 1 s to 1 h).","flavors":["standard","legacy","vr","noLegal","photos"],"spec":null,"status":"active"}
{"id":"slideshow.countdown-display-before-slide-advance","area":"Slideshow","name":"Countdown display before slide advance","description":"Shows a 3-2-1 countdown overlay before each slide transition so the user can anticipate the advance.","flavors":["standard","legacy","vr","noLegal","photos"],"spec":null,"status":"active"}
{"id":"slideshow.background-music-from-resource","area":"Slideshow","name":"Background music from resource","description":"Plays audio files from a separately selected resource as background music during an image/GIF slideshow, with track display and shuffle.","flavors":["standard","legacy","vr","noLegal","photos"],"spec":null,"status":"active"}
{"id":"slideshow.play-to-end-mode-for-audio-and-video","area":"Slideshow","name":"Play-to-end mode for audio and video","description":"When enabled, audio and video files in a mixed slideshow play to completion before the timer advances, suppressing the countdown.","flavors":["standard","legacy","vr","noLegal","photos"],"spec":null,"status":"active"}
{"id":"slideshow.keep-screen-awake-during-slideshow","area":"Slideshow","name":"Keep screen awake during slideshow","description":"Forces the screen on for the duration of an active slideshow and restores the global keep-screen-on policy when stopped.","flavors":["standard","legacy","vr","noLegal","photos"],"spec":null,"status":"active"}
{"id":"slideshow.network-loss-auto-stop","area":"Slideshow","name":"Network-loss auto-stop","description":"Monitors connectivity and stops the slideshow with a descriptive message when the connection to a remote resource is lost.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"slideshow.repeated-failure-auto-stop","area":"Slideshow","name":"Repeated-failure auto-stop","description":"Counts consecutive load or playback failures and stops the slideshow after a threshold streak, distinguishing unavailable-resource errors.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"slideshow.audio-slideshow-photo-mode","area":"Slideshow","name":"Audio slideshow photo mode","description":"During audio-only playback with slideshow active, hides the audio UI and shows a full-screen photo that advances each tick.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.epub-drm-free-viewing","area":"Documents","name":"EPUB DRM-free viewing","description":"Renders DRM-free EPUB files in a WebView, serving embedded images and fonts from the archive.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.epub-font-size-adjustment","area":"Documents","name":"EPUB font size adjustment","description":"Adjusts EPUB body font size via swipe gestures or settings presets.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.epub-font-family-selection","area":"Documents","name":"EPUB font family selection","description":"Chooses between sans-serif, serif, or monospace font families for EPUB body text via settings.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.epub-reader-themes","area":"Documents","name":"EPUB reader themes","description":"Switches the EPUB reading theme among Light, Dark, Sepia, and OLED Black via dynamic CSS injected into the WebView.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.epub-line-spacing-control","area":"Documents","name":"EPUB line spacing control","description":"Configures the EPUB line-height multiplier to improve reading comfort.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.epub-horizontal-margin-control","area":"Documents","name":"EPUB horizontal margin control","description":"Adjusts EPUB horizontal padding to set how much whitespace appears on each side of the text.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.epub-chapter-navigation-and-map","area":"Documents","name":"EPUB chapter navigation and map","description":"Navigates chapters with prev/next or a table-of-contents sheet, restoring the last chapter position on reopen.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.epub-in-chapter-and-cross-chapter-search","area":"Documents","name":"EPUB in-chapter and cross-chapter search","description":"Searches within the current chapter or runs a full cross-chapter text search with a capped result list.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.epub-read-aloud","area":"Documents","name":"EPUB Read Aloud","description":"Synthesizes EPUB page text via the system text-to-speech engine with play, pause, and stop controls.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.epub-text-selection","area":"Documents","name":"EPUB text selection","description":"Selects text in the EPUB WebView via a JavaScript bridge that captures selection events and exposes the string to native code.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.epub-offline-translation-overlay","area":"Documents","name":"EPUB offline translation overlay","description":"Translates selected EPUB chapter text offline and displays the result in a collapsible overlay panel.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-viewing-with-page-navigation","area":"Documents","name":"PDF viewing with page navigation","description":"Renders PDF pages at high resolution in a zoomable, pannable view with prev/next buttons and a go-to-page dialog.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-continuous-scroll-mode","area":"Documents","name":"PDF continuous scroll mode","description":"Toggles between single-page mode and a vertical scroll mode with a persisted preference.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-color-modes","area":"Documents","name":"PDF color modes","description":"Cycles the displayed PDF page through Normal, Night, and Sepia color filters in both page and scroll modes.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-last-page-position-restore","area":"Documents","name":"PDF last-page position restore","description":"Saves the last viewed PDF page index and restores it automatically when the same file is reopened.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-thumbnail-navigation-sheet","area":"Documents","name":"PDF thumbnail navigation sheet","description":"Opens a bottom-sheet grid of page thumbnails to jump directly to any page in a large document.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-text-selection-and-copy","area":"Documents","name":"PDF text selection and copy","description":"Activates a text-selection overlay to highlight and copy page text, using native extraction on newer APIs and OCR fallback otherwise.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-read-aloud","area":"Documents","name":"PDF Read Aloud","description":"Reads the current PDF page text aloud via the system text-to-speech engine coordinated with the selection manager.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-hyperlink-tap-to-open","area":"Documents","name":"PDF hyperlink tap-to-open","description":"Detects and opens URL hyperlink annotations on PDF pages using native link APIs on newer versions and a regex fallback otherwise.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-in-page-text-search","area":"Documents","name":"PDF in-page text search","description":"Searches for text across the current PDF page, highlighting matches and navigating between them.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-offline-translation-overlay","area":"Documents","name":"PDF offline translation overlay","description":"Translates the current PDF page offline and shows the result in a resizable overlay card.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-export-pages-as-jpg","area":"Documents","name":"PDF export pages as JPG","description":"Exports all PDF pages as JPG images to a Downloads exports folder using MediaStore on newer versions.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.txt-and-md-file-viewer","area":"Text Editor","name":"TXT and MD file viewer","description":"Opens and displays text and markdown files from local, SMB, SFTP, FTP, or cloud storage with paged loading.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.markdown-live-rendering","area":"Text Editor","name":"Markdown live rendering","description":"Toggles markdown rendering for MD files in the viewer, with syntax highlighting applied to plain-text mode.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.line-numbers-display","area":"Text Editor","name":"Line numbers display","description":"Optionally prepends line numbers to each displayed line, with offsets tracked correctly across pages.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.encoding-detection-and-picker","area":"Text Editor","name":"Encoding detection and picker","description":"Auto-detects file encoding on load and lets the user reopen the file with a different charset via the encoding indicator.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.font-size-adjustment-via-swipe","area":"Text Editor","name":"Font size adjustment via swipe","description":"Adjusts viewer and translation-overlay font sizes by horizontal swipe gestures on the text area.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.in-place-text-editing-with-save","area":"Text Editor","name":"In-place text editing with save","description":"Switches a loaded text file into edit mode and saves changes back to local, SMB, SFTP, FTP, or cloud storage, with a save-with-rename dialog.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.auto-save-drafts","area":"Text Editor","name":"Auto-save drafts","description":"While editing, a draft is written periodically when content changes and restored if the editor reopens before an explicit save.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.undo-redo-history","area":"Text Editor","name":"Undo/redo history","description":"Tracks a bounded stack of edit actions and supports multi-step undo and redo during an editing session.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.find-and-replace","area":"Text Editor","name":"Find and replace","description":"Provides a panel for case-insensitive search with match navigation, single-match replace, and replace-all within the editor.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.text-viewer-read-aloud","area":"Text Editor","name":"Text viewer Read Aloud","description":"Reads the currently displayed text page aloud using the system text-to-speech engine with play, pause, and stop controls.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.send-text-to-google-keep","area":"Text Editor","name":"Send text to Google Keep","description":"Sends the current text content to Google Keep as a note from the viewer or editor; shown only when Keep is installed.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.embedded-calculator-on-selected-text","area":"Text Editor","name":"Embedded calculator on selected text","description":"Launches a calculator in result-return mode from selected text; the computed result is inserted back at the cursor.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.offline-translation-overlay","area":"Text Editor","name":"Offline translation overlay","description":"Translates the displayed text content offline and shows the result in a collapsible side panel.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.text-file-standalone-viewer","area":"Text Editor","name":"Text file standalone viewer","description":"Opens text and markdown files directly from external intents in a standalone activity reusing the same read/edit/save feature set.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"text-editor.new-text-note-creation","area":"Text Editor","name":"New text note creation","description":"Creates a blank text or markdown note destined for a local or remote resource from the browse screen and opens it in edit mode.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"ocr-translation.offline-ocr-engine-ml-kit","area":"OCR & Translation","name":"Offline OCR engine (ML Kit)","description":"Extracts text from images using on-device ML Kit text recognition without a network connection.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"ocr-translation.offline-ocr-engine-tesseract","area":"OCR & Translation","name":"Offline OCR engine (Tesseract)","description":"Recognizes text from images using Tesseract with on-demand fast and high-quality language models, with strong Cyrillic support.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"ocr-translation.offline-ocr-engine-paddleocr","area":"OCR & Translation","name":"Offline OCR engine (PaddleOCR)","description":"Provides an additional OCR engine based on PaddleOCR native libraries for arm64, available in sideload and VR flavors.","flavors":["noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"ocr-translation.multi-engine-ocr-fallback-routing","area":"OCR & Translation","name":"Multi-engine OCR fallback routing","description":"Automatically selects the best available OCR engine for the chosen language and falls back to the default engine if none returns a result.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"ocr-translation.image-ocr-text-extraction-in-player","area":"OCR & Translation","name":"Image OCR text extraction in player","description":"Extracts text from the displayed image or first GIF frame using the available offline OCR engine, shown in an editable viewer.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"ocr-translation.pdf-page-ocr-and-translation","area":"OCR & Translation","name":"PDF page OCR and translation","description":"Recognizes and translates the rendered PDF page bitmap with a choice of simple overlay or spatially-aligned block overlay, cached per page.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"ocr-translation.epub-chapter-translation-overlay","area":"OCR & Translation","name":"EPUB chapter translation overlay","description":"Translates the visible EPUB chapter text in a resizable overlay with adjustable font size, toggled by a player button.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0002","status":"active"}
{"id":"ocr-translation.lens-style-image-translation-overlay","area":"OCR & Translation","name":"Lens-style image translation overlay","description":"Overlays translated text blocks at their original positions on images and PDFs, mirroring a visual translation experience with zoom tracking.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"ocr-translation.photo-ocr-capture-flow","area":"OCR & Translation","name":"Photo OCR capture flow","description":"Launches an in-app camera, presents a crop frame, lets the user pick languages on the crop screen, runs OCR plus offline translation, and shows the result.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0354","status":"active"}
{"id":"ocr-translation.camera-ocr-result-save-as-text","area":"OCR & Translation","name":"Camera OCR result save as text","description":"Saves the recognized or translated text from the camera OCR flow as a timestamped text file to the configured destination.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"ocr-translation.ocr-source-and-target-language-picker","area":"OCR & Translation","name":"OCR source and target language picker","description":"A searchable language picker lists supported source languages with auto-detect and target languages, ordered by interface language.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"ocr-translation.translation-session-settings-dialog","area":"OCR & Translation","name":"Translation session settings dialog","description":"An in-player dialog configures OCR source language, target language, overlay style, font size, and font family, applied immediately.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0410","status":"active"}
{"id":"ocr-translation.offline-ml-kit-translation","area":"OCR & Translation","name":"Offline ML Kit translation","description":"Translates recognized text fully offline using on-device translation supporting more than two dozen languages.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"ocr-translation.translation-model-pre-warming","area":"OCR & Translation","name":"Translation model pre-warming","description":"Background downloads the translation model for the selected target language before the OCR hot path to avoid an inline prompt during capture.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0334","status":"active"}
{"id":"ocr-translation.homoglyph-latin-to-cyrillic-ocr-correction","area":"OCR & Translation","name":"Homoglyph Latin-to-Cyrillic OCR correction","description":"Post-processes OCR output to replace visually similar Latin characters with Cyrillic equivalents, reducing misrecognition on Cyrillic text.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"ocr-translation.translation-result-caching","area":"OCR & Translation","name":"Translation result caching","description":"Caches translated text and block results per file path and page index in memory, avoiding redundant OCR and translation within a session.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"extensions-on-demand.downloadable-extensions-manager-screen","area":"Extensions & On-demand","name":"Downloadable Extensions manager screen","description":"A settings screen lists every optional module and OCR language pack grouped by section with per-item status, size, and download/remove actions.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"extensions-on-demand.bulk-install-all-uninstall-all","area":"Extensions & On-demand","name":"Bulk Install All / Uninstall All","description":"Single-tap buttons concurrently download all not-yet-installed extensions or sequentially uninstall all installed ones.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"extensions-on-demand.on-demand-ocr-engines-download","area":"Extensions & On-demand","name":"On-demand OCR engines download","description":"Downloads the Tesseract native library stack for the device ABI from a pinned mirror with SHA-256 verification, surviving updates and cache clears.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"extensions-on-demand.on-demand-paddleocr-engine-download","area":"Extensions & On-demand","name":"On-demand PaddleOCR engine download","description":"Downloads PaddleOCR native libraries for arm64 from a pinned mirror, adding an OCR engine for sideload and VR flavors.","flavors":["noLegal"],"spec":"S0386","status":"active"}
{"id":"extensions-on-demand.on-demand-ocr-language-pack-russian","area":"Extensions & On-demand","name":"On-demand OCR language pack (Russian)","description":"Downloads the high-quality Russian Tesseract model with SHA-256 validation, enabling superior Cyrillic OCR quality.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"extensions-on-demand.on-demand-ocr-language-pack-ukrainian","area":"Extensions & On-demand","name":"On-demand OCR language pack (Ukrainian)","description":"Downloads the high-quality Ukrainian Tesseract model with SHA-256 validation, enabling accurate Ukrainian-script OCR.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"extensions-on-demand.on-demand-ffmpeg-dts-decoder-download","area":"Extensions & On-demand","name":"On-demand FFmpeg DTS decoder download","description":"Downloads the FFmpeg native library for the device ABI with SHA-256 verification, enabling DTS and DTS-HD audio decoding in the video player.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"extensions-on-demand.on-demand-audio-background-videos-download","area":"Extensions & On-demand","name":"On-demand audio background videos download","description":"Downloads looping background video clips from a pinned mirror with integrity checks, used as audio-player backdrops when no cover art is present.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"extensions-on-demand.download-decline-handling","area":"Extensions & On-demand","name":"Download decline handling","description":"When the user declines an on-demand download, the feature stays unavailable without affecting other functionality and prompts again next time.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"extensions-on-demand.downloaded-extension-persistence","area":"Extensions & On-demand","name":"Downloaded extension persistence","description":"Deliverable payloads are stored outside the system cache and tracked via a persistent marker so they survive app updates and cache clears.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"extensions-on-demand.extension-download-progress-tracking","area":"Extensions & On-demand","name":"Extension download progress tracking","description":"Each download emits reactive progress states (queued, running, verifying, installed, failed) shown as a live indicator in the manager row.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0386","status":"active"}
{"id":"extensions-on-demand.flavor-scoped-extension-visibility","area":"Extensions & On-demand","name":"Flavor-scoped extension visibility","description":"The manager displays only rows actionable in the running flavor; flavors without OCR or translation never show those rows.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0401","status":"active"}
{"id":"settings-navigation.email-crash-report-from-error-dialog","area":"Settings & Navigation","name":"Email crash report from error dialog","description":"A button in the error detail dialog emails crash details with the app log to the author when a real exception-backed error is shown.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0483","status":"active"}
{"id":"settings-navigation.crash-report-prompt-after-restart","area":"Settings & Navigation","name":"Crash report prompt after restart","description":"On the next launch after an unexpected crash, the app offers to email the crash report with the app log to the author.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"settings-navigation.settings-full-text-search-with-spotlight","area":"Settings & Navigation","name":"Settings full-text search with spotlight","description":"A search overlay matches any toggle or option by keyword and scrolls to and highlights the result in the relevant settings tab.","flavors":["standard","lite","photos","legacy"],"spec":"S0284","status":"active"}
{"id":"settings-navigation.color-theme-selection","area":"Settings & Navigation","name":"Color theme selection","description":"A spinner in General settings selects Auto, Light, or Dark theme; a restart is required to apply the change.","flavors":["standard","lite","photos","legacy"],"spec":"S0328","status":"active"}
{"id":"settings-navigation.system-diagnostic-info","area":"Settings & Navigation","name":"System diagnostic info","description":"A button gathers a masked system report viewable in a dialog, with a secondary action to reveal the unmasked report after confirmation.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"settings-navigation.tv-remote-and-keyboard-key-remapping","area":"Settings & Navigation","name":"TV remote and keyboard key remapping","description":"A dedicated screen reassigns any player command to D-pad, gamepad, keyboard, or mouse buttons, with per-group and global reset.","flavors":["standard","lite","photos","legacy"],"spec":"S0289","status":"active"}
{"id":"settings-navigation.d-pad-acceleration-for-grid-navigation","area":"Settings & Navigation","name":"D-pad acceleration for grid navigation","description":"Holding a D-pad direction past a repeat threshold triggers a page-jump, accelerating navigation in large grids.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"settings-navigation.wear-os-companion-settings-sync","area":"Settings & Navigation","name":"Wear OS companion settings sync","description":"A bottom sheet pushes selected settings to the paired Wear OS companion app with an animation; hidden when the build lacks Wear support.","flavors":["standard","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"settings-navigation.unified-settings-backup-and-restore-to-local-file","area":"Settings & Navigation","name":"Unified settings backup and restore to local file","description":"Exports sources, favorites, schedules, network passwords, and saved web sign-ins to a local file and restores them after reinstall.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"settings-navigation.settings-backup-and-restore-via-google-drive","area":"Settings & Navigation","name":"Settings backup and restore via Google Drive","description":"Signs in with a Google account to back up or restore the unified payload to Drive; restore shows backup date, device, and item counts.","flavors":["standard","legacy","noLegal","vr","photos"],"spec":"S0200","status":"active"}
{"id":"settings-navigation.set-as-default-media-app-from-settings","area":"Settings & Navigation","name":"Set as default media app from settings","description":"Buttons register the app as the OS default handler for images, audio, video, and documents; only buttons for present capabilities are shown.","flavors":["standard","lite","photos","legacy"],"spec":"S0442","status":"active"}
{"id":"settings-navigation.player-only-keep-screen-on","area":"Settings & Navigation","name":"Player-only keep screen on","description":"A dependent toggle keeps the display awake only while the player or standalone players are open; visible only when the global option is off.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"settings-navigation.program-wide-follow-os-auto-rotate","area":"Settings & Navigation","name":"Program-wide follow OS auto-rotate","description":"A toggle makes every app screen follow the system auto-rotate setting; hidden on devices without an accelerometer.","flavors":["standard","lite","photos","legacy"],"spec":"S0439","status":"active"}
{"id":"settings-navigation.player-only-follow-os-auto-rotate","area":"Settings & Navigation","name":"Player-only follow OS auto-rotate","description":"A secondary toggle lets only the player follow system auto-rotate when the program-wide toggle is off; hidden without an accelerometer.","flavors":["standard","lite","photos","legacy"],"spec":"S0439","status":"active"}
{"id":"settings-navigation.big-buttons-mode","area":"Settings & Navigation","name":"Big Buttons Mode","description":"Enlarges player buttons and stretches controls to full width with an adaptive toolbar count; ideal for car head units.","flavors":["standard","lite","photos","legacy"],"spec":"S0158","status":"active"}
{"id":"settings-navigation.app-language-selection","area":"Settings & Navigation","name":"App language selection","description":"A spinner selects the app language (system default, English, Russian, Ukrainian) with a restart dialog on change.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"settings-navigation.compact-ui-elements-mode","area":"Settings & Navigation","name":"Compact UI elements mode","description":"A toggle switches the app to a compact layout with smaller player controls; requires a restart to take effect.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"settings-navigation.toggle-remote-source-groups","area":"Settings & Navigation","name":"Toggle remote source groups","description":"Three toggles enable or disable the SMB, FTP/SFTP, and Cloud source groups; disabling a group with saved resources requires confirmation.","flavors":["standard","lite","photos","legacy"],"spec":"S0391","status":"active"}
{"id":"settings-navigation.show-detailed-errors-toggle","area":"Settings & Navigation","name":"Show detailed errors toggle","description":"A toggle switches from simplified error messages to full error detail dialogs with stack context.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"settings-navigation.saved-authorizations-manager","area":"Settings & Navigation","name":"Saved authorizations manager","description":"A navigation row opens a list of saved web sign-in sessions with options to review or clear them.","flavors":["standard","lite","photos","legacy"],"spec":"S0255","status":"active"}
{"id":"settings-navigation.send-file-to-target-toggles","area":"Settings & Navigation","name":"Send file to target toggles","description":"Dynamically built per-target toggles enable or disable each Send-to destination; unavailable targets show a not-installed label.","flavors":["standard","lite","photos","legacy"],"spec":"S0452","status":"active"}
{"id":"settings-navigation.add-widget-to-home-screen-picker","area":"Settings & Navigation","name":"Add widget to home screen picker","description":"A button opens a flavor- and setting-filtered picker of pinnable home screen widgets and initiates the OS pin request.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"widgets.calculator-widget","area":"Widgets","name":"Calculator widget","description":"A non-resizable 1x1 home screen icon that opens the embedded in-app calculator.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"widgets.camera-ocr-translate-widget","area":"Widgets","name":"Camera OCR Translate widget","description":"A non-resizable 1x1 icon that launches the camera OCR capture and translation flow from the home screen.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"widgets.camera-photos-widget","area":"Widgets","name":"Camera Photos widget","description":"A non-resizable 1x1 icon that opens the camera photos resource in the app.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"widgets.quick-capture-widget","area":"Widgets","name":"Quick Capture widget","description":"A 1x1 icon configured with a target folder that takes a photo or records video saved directly to that folder; hidden when capture is disabled.","flavors":["standard","lite","photos","legacy"],"spec":"S0369","status":"active"}
{"id":"widgets.quick-audio-recorder-widget","area":"Widgets","name":"Quick Audio Recorder widget","description":"A 1x1 icon that starts a voice recording on tap and stops and saves it on a second tap.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"widgets.capture-and-ocr-panel-widget","area":"Widgets","name":"Capture and OCR panel widget","description":"A horizontally resizable panel widget providing quick access to both the Camera Photos and Camera OCR flows.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"widgets.continue-reading-widget","area":"Widgets","name":"Continue Reading widget","description":"A resizable widget that resumes the slideshow from the last saved position.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"widgets.audio-now-playing-widget","area":"Widgets","name":"Audio Now Playing widget","description":"A horizontally resizable widget showing the current background audio track with play/pause, previous, next, and favorite controls.","flavors":["standard","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"widgets.random-music-widget","area":"Widgets","name":"Random Music widget","description":"A 1x1 icon that starts playback of a random music track from the configured resource.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":null,"status":"active"}
{"id":"widgets.random-photo-frame-widget","area":"Widgets","name":"Random Photo Frame widget","description":"A fully resizable widget that displays a random photo from a configured resource, refreshing periodically from a local cache.","flavors":["standard","lite","photos","legacy"],"spec":"S0352","status":"active"}
{"id":"widgets.favorites-widget","area":"Widgets","name":"Favorites widget","description":"A resizable scrollable list widget showing favorite folder shortcuts; visible only when the Favorites feature is enabled.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"widgets.scheduled-tasks-widget","area":"Widgets","name":"Scheduled Tasks widget","description":"A resizable widget displaying scheduled file operation status with Run All, Pause All, and Resume All controls; visible only when scheduling is enabled.","flavors":["standard","lite","photos","legacy"],"spec":"S0353","status":"active"}
{"id":"widgets.resource-launch-widget","area":"Widgets","name":"Resource Launch widget","description":"A non-resizable 1x1 icon configured per-instance to open a specific resource folder from the home screen; it can be added from the resource editor or directly from a resource row's overflow menu.","flavors":["standard","lite","photos","legacy"],"spec":"S0661","status":"active"}
{"id":"widgets.voice-recorder-widget","area":"Widgets","name":"Voice recorder widget","description":"A home-screen widget and foreground service that records voice notes directly to a configured destination without opening the app.","flavors":["standard","legacy","noLegal"],"spec":null,"status":"removed"}
{"id":"resource-list.all-files-pinned-first","area":"Resource List","name":"All Files resource pinned first","description":"The predefined All Files resource stays first in the main window resource list and grid under any sort order; hidden only when a header tab or filter excludes it.","flavors":["standard","lite","photos","legacy"],"spec":"S0488","status":"active"}
{"id":"file-operations.captured-photo-to-clipboard","area":"File Operations","name":"Captured photo to clipboard","description":"Optional setting that also places each photo taken with the in-app camera on the system clipboard as an image, ready to paste into another app, alongside the normal save and any assigned operation.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0469","status":"active"}
{"id":"video-player.video-frame-to-clipboard","area":"Video Player","name":"Video frame to clipboard","description":"Optional setting that also places each frame extracted in the video player on the system clipboard as an image, ready to paste into another app, alongside the normal save to the configured destination.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0470","status":"active"}
{"id":"settings-navigation.favorites-export-import-to-file","area":"Settings & Navigation","name":"Favorites export and import to file","description":"Exports favorites to a JSON file for sharing and imports them back from a file with a skip-or-overwrite conflict choice, from the General Settings backup card.","flavors":["standard","lite","photos","legacy"],"spec":"S0491","status":"active"}
{"id":"player.send_to_remote_sources","area":"Media Player","name":"Send-to for remote and cloud files","description":"The player Send-to menu works for files on network (SMB/SFTP/FTP) and cloud sources, downloading a temporary local copy on demand so any receiver can act on them like a local file","flavors":["standard","photos","legacy","vr"],"spec":"S0493","status":"active"}
{"id":"general.settings-search-backup-restore-routing-fix","area":"General","name":"Settings search routes backup and restore to the correct destination","description":"Settings search no longer routes backup/restore to the wrong Operations/destinations tab; phantom export/import results removed","flavors":["standard"],"spec":"S0475","status":"active"}
{"id":"s0490.after-an-app-crash-the-next-launch-offers","area":"General","name":"After an app crash, the next launch offers a one-time prompt to email the crash","description":"After an app crash, the next launch offers a one-time prompt to email the crash report (with log zip) to the author","flavors":["standard"],"spec":"S0490","status":"removed"}
{"id":"general.favorites-share-export-import-routing","area":"General","name":"Favorites and resource-share export and import reachable from settings","description":"Favorites and resource-share export/import are reachable again from the General settings backup card","flavors":["standard"],"spec":"S0491","status":"active"}
{"id":"general.dpad-initial-focus-redirect-off-scrollable","area":"General","name":"D-pad and keyboard initial focus redirected off scrollable containers","description":"On TV / D-pad / keyboard devices, initial focus no longer parks on a scrollable container - it lands on the first real control so on-screen controls are reachable app-wide","flavors":["standard","lite","photos","legacy"],"spec":"S0504","status":"active"}
{"id":"settings-navigation.app-wide-dpad-focus-container-guard","area":"Settings & Navigation","name":"App-wide D-pad focus container guard","description":"On non-touch input, a directional key that lands while focus is parked on a scrollable or paged container (or nowhere) redirects focus to the first real control inside it, so D-pad/keyboard navigation never gets stuck on a bare container after late data loads.","flavors":["standard","lite","photos","legacy"],"spec":"S0506","status":"active"}
{"id":"settings-navigation.gamepad-joystick-navigation-all-screens","area":"Settings & Navigation","name":"Gamepad/joystick navigation on all screens","description":"On non-touch input, the left stick moves focus (D-pad equivalent with dead-zone and hold acceleration), the right stick scrolls the active container, and the shoulder buttons page-jump - on every in-house screen. The player family keeps its own transport mapping.","flavors":["standard","lite","photos","legacy"],"spec":"S0508","status":"active"}
{"id":"general.dialog-keyboard-consistency","area":"General","name":"Keyboard and D-pad consistency in dialogs","description":"In-house dialogs and bottom sheets respond consistently to keyboard and D-pad input: Escape dismisses, Enter confirms the positive action, arrows and Tab move focus, and a meaningful control receives initial focus on open.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0511","status":"active"}
{"id":"file-saving.unavailable-destination-fallback","area":"File Saving","name":"Fallback save when destination is unavailable","description":"When the selected save destination (network/cloud resource) is unavailable, screenshots, internet downloads, video frames, photos, video recordings and voice recordings are saved to the local default folder for their media type and the user is notified.","flavors":["standard","lite","photos","legacy"],"spec":"S0522","status":"active"}
{"id":"general.mouse-band-select-and-drag-select","area":"General","name":"Mouse band-select and touch drag-select for multi-select in Browse and Duplicates","description":"Mouse band-select and touch drag-select for multi-select on Browse and Duplicates lists, plus hover highlight on list items under a mouse pointer","flavors":["standard","lite","photos","legacy","noLegal","vr"],"spec":"S0512","status":"active"}
{"id":"quick-capture.capture-from-main-overflow-menu","area":"Quick Capture","name":"Quick capture from the main overflow menu: record a voice note, video, or photo","description":"Quick capture from the main overflow menu: record a voice note, video, or photo straight into the phone standard Recordings, Movies and Pictures folders; each is a separate settings toggle, gated by flavor media capability. Voice capture supports pause/resume and discard via a compact in-app indicator.","flavors":["standard","lite","photos","legacy","noLegal","vr"],"spec":"S0523","status":"active"}
{"id":"file-saving.dictaphone-widget-selected-destination","area":"File Saving","name":"Quick Audio Recorder widget saves to the selected destination","description":"Recordings made with the home-screen Quick Audio Recorder widget are saved to the user-selected microphone destination (the same as in-app mic recording), or to the public default audio folder when none is set, with a local fallback and notification when a network/cloud destination is unavailable - instead of a hidden private app folder.","flavors":["standard","legacy"],"spec":"S0526","status":"active"}
{"id":"settings-navigation.remappable-browser-gamepad-actions","area":"Settings & Navigation","name":"Remappable browser gamepad actions","description":"Browser and list gamepad buttons are now user-remappable via a new Browser actions group in the keybinding screen; the resolver is surface-aware, so one physical button can mean different things in the player and the browser.","flavors":["standard","lite","photos","legacy"],"spec":"S0519","status":"active"}
{"id":"destinations.keyboard-number-shortcuts-for-operations","area":"Destinations","name":"Number-key shortcuts for operation buttons (keyboard and TV remote)","description":"Number keys 1-9 and 0, from a hardware keyboard or TV remote, launch destination buttons of the expanded Copy and Move groups in the player, numbered continuously across both groups (Copy first, then Move); on non-touch input the buttons show the bound key as a number badge.","flavors":["standard","lite","photos","legacy"],"spec":"S0531","status":"active"}
{"id":"sharing.download-by-link-from-clipboard","area":"Sharing","name":"Download by link from clipboard","description":"A main-menu Download by link entry, shown when link auto-download is enabled, opens a clipboard-prefilled single-line dialog and routes the link through the existing external-link download path.","flavors":["standard","lite","photos","legacy"],"spec":"S0542","status":"active"}
{"id":"game.kryvavitsa-mini-game","area":"Game","name":"Kryvavitsa and the Monster mini-game","description":"An opt-in turn-based grid puzzle where the player moves a monster to the exit while evading enemies, with levels, score and a turn counter; supports touch, keyboard, D-pad and swipe; enabled via a Settings toggle, off by default.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"game.kryvavitsa-launcher-widget","area":"Game","name":"Mini-game launcher widget","description":"Home-screen widget that launches the mini-game directly; hidden from the widget picker when the embedded-game setting is disabled.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"vr-openxr.loading-overlay-before-first-immersive-frame","area":"VR & OpenXR","name":"Loading overlay before first immersive frame","description":"A 2D loading overlay covers the immersive surface while the first frame decodes off-thread, then is dismissed when the OpenXR session is ready.","flavors":["vr","noLegal"],"spec":null,"status":"active"}
{"id":"vr-openxr.bundled-360-fallback-asset","area":"VR & OpenXR","name":"Bundled 360 fallback image","description":"Ships a CC0 equirectangular 360 image used as the immersive diagnostic fallback when no test media is present on the device.","flavors":["vr","noLegal"],"spec":null,"status":"active"}
{"id":"video-player.configurable-touch-zones","area":"Video Player","name":"Configurable 3x3 touch zones","description":"A 3x3 touch-zone grid on the player maps taps and swipes to navigation, playback, brightness or volume actions.","flavors":["standard","lite","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"video-player.vertical-seekbar-brightness-volume-control","area":"Video Player","name":"Vertical brightness and volume seekbars","description":"Vertical seekbars on the left and right edges of the player adjust screen brightness and volume by finger drag.","flavors":["standard","lite","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"video-player.chromecast-video-casting","area":"Video Player","name":"Chromecast video casting","description":"Casts the current video to a Chromecast device through a local proxy server from the player overflow menu.","flavors":["standard","lite","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"drawing-annotations.custom-color-picker","area":"Drawing & Annotations","name":"Custom color picker","description":"A grid color picker with a custom swatch selects an arbitrary color for brush, shapes and text in the drawing editor.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"drawing-annotations.brush-size-control","area":"Drawing & Annotations","name":"Brush size control","description":"Adjustable brush width for freehand drawing; the eraser scales with the chosen brush width.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"text-editor.reader-themes","area":"Text Editor","name":"Text viewer reader themes","description":"Selects the background and text color scheme for plain-text and Markdown files among Light, Dark, Sepia and System.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"documents.pdf-page-share-to-google-lens","area":"Documents","name":"PDF page share to Google Lens","description":"Saves the current PDF page as an image and opens it in Google Lens for visual search or text recognition.","flavors":["standard","legacy","vr","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.file-metadata-bottom-sheet","area":"Media Browsing","name":"File metadata bottom sheet","description":"Opens a bottom sheet with extended file metadata such as size, path and media or EXIF properties for the selected file.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"media-browsing.new-drawing-canvas-in-browse","area":"Media Browsing","name":"Create new drawing canvas from Browse","description":"Creates a blank drawing canvas in the current folder from the Browse overflow menu.","flavors":["standard","lite","photos","legacy"],"spec":null,"status":"active"}
{"id":"resource-list.drag-to-reorder-resources","area":"Resource List","name":"Drag to reorder resources","description":"Reorders resources in the main resource list by drag and persists the new order.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":null,"status":"active"}
{"id":"settings-navigation.settings-reference-page","area":"Settings & Navigation","name":"Settings reference page","description":"A complete reference of every setting and what it does, generated from the app and available in English, Russian and Ukrainian, linked from the website.","flavors":["standard","lite","photos","legacy"],"spec":"S0440","status":"active"}
{"id":"settings.collapsible_groups","area":"Settings & Navigation","name":"Unified collapsible section groups","description":"Consistent collapsible section groups across settings, source editors, player panels, dialogs and lists: one animated chevron header with an optional collapsed-state summary, unified expand state persistence with seamless migration, and TalkBack expanded/collapsed announcement.","flavors":["standard","lite","photos","legacy","vr"],"spec":"S0535","status":"active"}
{"id":"quick-capture.in-app-camera-controls-and-video","area":"Quick Capture","name":"In-app camera controls and video","description":"Unified in-app camera: capability-driven photo controls (flash, zoom presets plus slider, front/back lens switch, tap-to-focus) and in-app video recording with an explicit microphone toggle, replacing external system video capture.","flavors":["standard"],"spec":"S0545","status":"active"}
{"id":"quick-capture.unified-camera-entry-mode-switch","area":"Quick Capture","name":"Unified Camera entry with in-screen photo/video switch","description":"The main-screen overflow menu merges the separate Photo and Video actions into one Camera action; when both photo and video are available it offers an in-screen photo/video switch, and the captured media is saved by its actual kind (photo to DCIM/Camera, video to Movies).","flavors":["standard"],"spec":"S0563","status":"active"}
{"id":"general.receiving-a-shared-link-with-auto-download-no","area":"General","name":"Receiving a shared link with auto-download no longer crashes the share screen; t","description":"Receiving a shared link with auto-download no longer crashes the share screen; the download progress dialog now displays correctly","flavors":["standard"],"spec":"S0562","status":"active"}
{"id":"streaming.internet_streams","area":"Streaming","name":"Internet Streams","description":"Dedicated Streams screen for internet audio, video and RTSP sources: add a stream URL manually or import a remote .m3u playlist, pin sources to the top locally, play radio inline with ICY now-playing metadata via a sticky mini-control while the list stays visible, and open video/RTSP in the fullscreen player. RTSP (RTP-over-RTSP/TCP) and HLS/DASH VOD play on streaming flavors; lite is progressive-audio only; absent on photos.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":"S0565","status":"active"}
{"id":"settings-navigation.custom-color-themes","area":"Settings & Navigation","name":"Custom color themes","description":"Six custom accent color themes (dark/light green, blue, red) selectable in Settings > General > Color theme, applied app-wide and persisted across restart.","flavors":["standard","lite","photos","legacy"],"spec":"S0569","status":"active"}
{"id":"streams.streams-feature-master-toggle-with-per-device-profile","area":"Streams","name":"Streams feature master toggle with per-device-profile default, a Welcome onboard","description":"Streams feature master toggle with per-device-profile default, a Welcome onboarding entry, a downloadable source-catalog in the Extensions screen, and main-menu gating","flavors":["standard","legacy","noLegal","vr"],"spec":"S0575","status":"active"}
{"id":"screen-capture.take-a-screenshot-from-the-app-operations-settings","area":"Screen Capture","name":"Take a screenshot from the app Operations settings with a system capture-consent","description":"Take a screenshot from the app Operations settings with a system capture-consent prompt; saved to the configured destination (standard + noLegal).","flavors":["standard","noLegal"],"spec":"S0559","status":"active"}
{"id":"streams.background-playback-and-exit","area":"Streams","name":"Background playback and exit choice for audio streams","description":"Background audio playback now also governs audio streams - with background playback off a stream stops when you leave or minimize the screen, and leaving the streams list offers the same stop or keep-playing choice as the player. Background-audio settings are grouped under Background audio playback on the Player tab.","flavors":["standard","vr","legacy","noLegal"],"spec":"S0577","status":"active"}
{"id":"streams.category-language-filter","area":"Streams","name":"Filter streams by category, language and type","description":"Filters the Streams list by category, language and media type (All/Audio/Video, with RTSP grouped under video). Type-to-filter searchable pickers back the category and language facets; the language picker shows flags for recognized languages and pins English, Russian and Ukrainian to the top. Facets are ANDed - selecting All on a facet disables it, so no separate match-mode toggle is needed; language-less rows stay visible under a language filter, and an active filter is marked on the filter button. The dialog follows the app color theme.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0580","status":"active"}
{"id":"streams.stream-catalog-import-timeout","area":"Streams","name":"Stream catalog import timeout","description":"Stream catalog import now fails fast on a dead or slow-trickle host instead of hanging the import spinner","flavors":["standard"],"spec":"S0583","status":"active"}
{"id":"streaming.player-channel-name-title","area":"Streaming","name":"Channel name in stream player title","description":"When a video/RTSP stream is opened in the fullscreen player, the title bar and filename overlay show the human-readable channel name from the stream list instead of the raw stream URL segment; non-stream files are unaffected and unknown channels fall back to the URL-derived name.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0590","status":"active"}
{"id":"streams.row-play-status","area":"Streams","name":"Per-row play-status bullet in the streams list","description":"Each stream row shows a small status bullet reflecting the last local playback attempt on this device: a green check once it has actually played here, a red exclamation if the last attempt failed (bad certificate, auth, DNS or 404), and a hollow amber circle if it has never been tried. The outcome is recorded from the real player success and error hooks for both inline audio and the fullscreen video/RTSP player, persists across restarts, and is conveyed by icon shape plus a spoken description, not colour alone.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0593","status":"active"}
{"id":"quick-capture.samsung-style-camera-experience","area":"Quick Capture","name":"Samsung-style in-app camera experience","description":"One UI-aligned in-app camera: text photo/video mode selector, always-visible zoom presets, a shutter that changes shape per mode and recording state, viewfinder gestures (pinch zoom, double-tap zoom toggle, vertical swipe lens switch, horizontal swipe mode switch), a recording timer with pause/resume, a gallery thumbnail of the last capture that opens it in the in-app player, and a stay-open multi-capture session for the general Camera entry that saves each shot without closing.","flavors":["standard"],"spec":"S0566","status":"active"}
{"id":"general.settings-search-dropdown-selection-rows","area":"General","name":"Dropdown and selection settings are findable in settings search","description":"Settings search now indexes dropdown and selection setting rows (Language, Color theme, Video pre-cache size, Default sort mode, Device profile, Saved authorizations, Statistics), so these settings can be found by typing in the settings search field.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0598","status":"active"}
{"id":"general.settings-search-hides-unavailable-feature-rows","area":"General","name":"Settings search hides rows for features your edition lacks","description":"Settings search no longer returns rows for features the current edition does not include: microphone recording, background audio playback, cloud sources, OCR and on-screen translation, and the downloadable extensions screen are hidden from search results on editions that lack them, so a search match always leads to a visible setting.","flavors":["lite","photos"],"spec":"S0600","status":"active"}
{"id":"player.standalone-image-print-copy-move","area":"Media Player","name":"Standalone image viewer: print, copy and move","description":"The standalone image viewer (images opened from another app) can print the picture through the unified Send-to menu and copy or move the current file into configured destination folders from Copy to / Move to button groups at the bottom.","flavors":["standard","lite","photos","legacy"],"spec":"S0610","status":"active"}
{"id":"player.copy-or-move-an-externally-opened-file-to","area":"Player","name":"Copy or move an externally-opened file to a configured destination folder direct","description":"Copy or move an externally-opened file to a configured destination folder directly from the standalone audio, document and text viewers - copying keeps the viewer open, moving relocates the file and closes the viewer.","flavors":["standard"],"spec":"S0612","status":"active"}
{"id":"documents.standalone_print_send_to","area":"Documents","name":"Print documents and text from the standalone viewer","description":"Print a PDF, Office document, or text file opened from another app, directly from the standalone viewer via the unified Send-to menu.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0613","status":"active"}
{"id":"screen-capture.edge-gesture-screenshot-standard","area":"Screen Capture","name":"Edge-gesture screenshot (Play consent)","description":"On standard, enabling the left-edge gesture strip lets a diagonal swipe capture the current screen through a per-shot MediaProjection consent dialog and save it to a chosen resource or the device screenshots folder. No accessibility service is used.","flavors":["standard"],"spec":"S0621","status":"active"}
{"id":"network-cloud.sftp-scan-bounded-termination","area":"Network & Cloud","name":"Bounded SFTP folder scan with timeout error","description":"SFTP folder scans end in bounded time with a clear, retryable error instead of an endless loading spinner when the network changes or a connection goes half-open.","flavors":["standard","photos","legacy","vr"],"spec":"S0624","status":"active"}
{"id":"streaming.player-stream-control-profile","area":"Streaming","name":"Stream-tailored control set in the player","description":"When a live video stream opens in the fullscreen player it shows only the controls that apply to a live feed - fullscreen, frame snapshot, rotation, file info, picture-in-picture, the video control dialog, Chrome Cast and Send to - and hides file-only actions such as delete, rename, edit, copy, move, slideshow, favorite and sleep timer. Send to shares the stream link as text (any messenger, clipboard, SMS or email receives the URL) instead of trying to download the live stream as a file. Ordinary video, audio, image and document files keep their full control set unchanged.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0631","status":"active"}
{"id":"streaming.live-stream-chromecast-cast","area":"Streaming","name":"Live video stream casting to Chromecast","description":"Casts a live video stream (HLS, DASH or progressive HTTP) directly to a Chromecast device by handing the stream URL to the receiver as a live stream, without downloading it first; RTSP streams report that the protocol can't be cast.","flavors":["standard","legacy","noLegal"],"spec":"S0632","status":"active"}
{"id":"streaming.live-stream-auto-recovery","area":"Streaming","name":"Live stream auto-recovery instead of channel-removal dialog","description":"A live video stream (HLS/DASH) that falls behind its sliding live window is silently re-anchored to the live edge and resumed, instead of being reported as a dead channel with a retry/remove dialog and a red status. Transient network drops and retryable server responses (HTTP 429 and 5xx) are retried with bounded backoff; permanent failures (HTTP 4xx, malformed manifest, unsupported container) still surface the dialog at once. The player tracks the live edge via a live-target offset and a modest live buffer so it stops sticking to the expiring segment.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0634","status":"active"}
{"id":"screen-capture.edge-gesture-open-app","area":"Screen Capture","name":"Edge-gesture action: open the app","description":"An additional left-edge gesture action that brings the app to the foreground (restoring its previous state if already running, otherwise launching it) without taking a screenshot or showing a capture-consent prompt.","flavors":["standard","noLegal"],"spec":"S0622","status":"active"}
{"id":"internet-streams.home-screen-shortcut","area":"Internet Streams","name":"Stream home-screen shortcut","description":"Pin a specific internet stream to the home screen: pick a channel in the Streams list and place a one-tap launch shortcut that plays that channel directly.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0637","status":"active"}
{"id":"internet-streams.player-channel-navigation","area":"Internet Streams","name":"Stream player channel navigation","description":"In the fullscreen player for a video stream, the top previous/next buttons move to the previous/next video channel in the Streams list (catalog order) and re-source the player, instead of acting as in-collection file navigation.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0640","status":"active"}
{"id":"internet-streams.player-trimmed-controls","area":"Internet Streams","name":"Stream player trimmed on-screen controls","description":"The on-player overlay for a video stream shows only play/pause, the video-control dialog button, and Picture-in-Picture; the seek bar, timings, playback-order toggle, file previous/next, and rewind/forward are hidden as inapplicable to a live stream.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0641","status":"active"}
{"id":"internet-streams.player-hide-copy-move","area":"Internet Streams","name":"Stream player hides copy and move panels","description":"The Copy-to and Move-to destination button panels are hidden in the fullscreen player for a video stream, since copying or moving a file does not apply to a live stream.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0642","status":"active"}
{"id":"video-player.playback-control-dialog-section-navigation-adapts-to-orientation","area":"Video Player","name":"Playback control dialog section navigation adapts to orientation (vertical rail","description":"Playback control dialog section navigation adapts to orientation (vertical rail in portrait, horizontal strip in landscape) and stays fully reachable; dialog height bounded to screen","flavors":["standard","lite","legacy","vr","noLegal"],"spec":"S0638","status":"active"}
{"id":"player.optional_nine_zone_grid","area":"Player","name":"Optional 9-zone touch grid","description":"Turn off the 9-zone touch grid for a simpler previous / zoom / next fullscreen player layout, with a left-edge command-panel area for file actions.","flavors":["standard","lite","photos","legacy"],"spec":"S0620","status":"active"}
{"id":"screen-capture.edge-gesture-open-app-panel","area":"Screen Capture","name":"Edge-gesture action: open app panel","description":"A left-edge gesture action that opens a quick-launch panel of large app tiles in a fixed grid (3x5 portrait, 5x3 landscape) for one-tap launching of FastMediaSorter and pinned external apps, with a separate Edit screen to add, move, replace or remove tiles. Opens without taking a screenshot or showing a capture-consent prompt; unavailable apps are hidden.","flavors":["standard","noLegal"],"spec":"S0623","status":"active"}
{"id":"settings.navigation-rows-unified-to-a-single-real-arrow-etalon","area":"Settings","name":"Settings navigation rows unified to a single real-arrow etalon: arrow sits right","description":"Settings navigation rows unified to a single real-arrow etalon: arrow sits right after the text (no full-width stretch), leading icon and hint preserved, portrait and landscape.","flavors":["standard","lite","photos","legacy"],"spec":"S0645","status":"active"}
{"id":"general.compact-elements-toggle-and-background-sync-interval-in-both-orientations","area":"General","name":"General settings: the compact-elements toggle and background-sync interval are n","description":"General settings: the compact-elements toggle and background-sync interval are now both available in portrait and landscape (previously each was missing in one orientation)","flavors":["standard"],"spec":"S0616","status":"active"}
{"id":"usage-statistics.sorted-headline-clarified-and-flushed-on-open","area":"Usage Statistics","name":"Sorted headline clarified and flushed on open","description":"The Statistics dashboard and text report now label the Sorted headline as copied plus moved files, and opening Statistics immediately after a completed copy or move flushes pending local counters so the card does not briefly show 0 inside the debounce window.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0652","status":"active"}
{"id":"usage-statistics.expanded-metric-coverage","area":"Usage Statistics","name":"Expanded metric coverage","description":"The statistics dashboard and exported report now also cover file renames, favorites added and removed, slideshow sessions and slides shown, scheduled-operation runs and files processed, stream plays, stream sources added, playlist imports, GIF frame saves, undone operations, and text recognitions. New rows reuse the existing category layout and zero-row hiding.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0654","status":"active"}
{"id":"settings.simple-value-selection-across-settings-unified-to-one","area":"Settings","name":"Simple value-selection across settings unified to one minimalistic tap-row + lis","description":"Simple value-selection across settings unified to one minimalistic tap-row + list-dialog pattern","flavors":["standard","lite","photos","legacy"],"spec":"S0646","status":"active"}
{"id":"onboarding.welcome-onboarding-now-surfaces-a-statistics-collection-toggle","area":"Onboarding","name":"Welcome onboarding now surfaces a Statistics collection toggle (on by default);","description":"Welcome onboarding now surfaces a Statistics collection toggle (on by default); local anonymous operation statistics","flavors":["standard","lite","photos","legacy"],"spec":"S0656","status":"active"}
{"id":"settings.settings-list-value-trigger-rows-now-show-the","area":"Settings","name":"Settings list-value trigger rows now show the selector chevron right after the t","description":"Settings list-value trigger rows now show the selector chevron right after the text (unified row etalon, portrait + landscape)","flavors":["standard","lite","photos","legacy"],"spec":"S0644","status":"active"}
{"id":"settings.download-resource-and-screenshot-destination-settings-rows-now","area":"Settings","name":"Download-resource and screenshot-destination settings rows now use the same labe","description":"Download-resource and screenshot-destination settings rows now use the same label + value + Select button pattern as the camera/video folder selectors","flavors":["standard","lite","photos","legacy"],"spec":"S0648","status":"active"}
{"id":"onboarding.welcome-gesture-enablement","area":"Onboarding","name":"Welcome gesture enablement","description":"Onboarding toggle to enable left-edge gestures, preconfigured on install: swipe up opens the launch menu, swipe right captures and opens the editor, swipe down captures silently with a toast.","flavors":["standard","noLegal"],"spec":"S0662","status":"active"}
{"id":"streams.tv-remote-mouse-input","area":"Streams","name":"TV-remote and mouse input parity on the Streams screen","description":"The Streams list and its dialogs are fully operable by TV remote, keyboard and mouse: right-clicking a stream row opens its action menu, every streams dialog closes on Escape and confirms its primary action on Enter, and D-pad focus moves cleanly between the search field, the filter and sort buttons, the list and the mini-player stop button.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0664","status":"active"}
{"id":"screen-capture.panel-internal-routes","area":"Screen Capture","name":"App panel: OS shortcuts and the app's own features/resources","description":"The quick-launch app panel can hold not only external apps but also parts of the operating system (Settings, Wi-Fi, Bluetooth, Display, Sound, Battery, Storage, App info, Date/time - only those that resolve on the device) and the app's own features and resources (calculator, mini-game, photo-OCR-translate, streams, a specific resource), chosen via a three-path add flow; the panel also ships pre-populated by default with our features first then Settings, leaving empty slots for the user's apps.","flavors":["standard","noLegal"],"spec":"S0663","status":"active"}
{"id":"streams.card-overflow-actions-menu","area":"Streams","name":"Stream card actions menu","description":"Each stream card's overflow (three-dot) menu groups channel commands - add to home screen, edit (manual channels), send link, remove - so secondary actions are no longer hidden behind gestures.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0660","status":"active"}
{"id":"video-player.player-auto-switches-to-fullscreen-on-rotate-to","area":"Video Player","name":"Player auto-switches to fullscreen on rotate to landscape and shows the command","description":"Player auto-switches to fullscreen on rotate to landscape and shows the command panel on rotate to portrait, without interrupting playback, in both the standalone and stream players","flavors":["standard","lite","photos","legacy"],"spec":"S0667","status":"active"}
{"id":"streams.streams-settings-now-offer-a-default-sort-order","area":"Streams","name":"Streams settings now offer a default sort order, a default media-type filter, a","description":"Streams settings now offer a default sort order, a default media-type filter, a channel-list refresh policy, and a clear-play-marks action; the Streams screen remembers the last search and filter on reopen.","flavors":["standard","legacy"],"spec":"S0659","status":"active"}
{"id":"video-player.compact-context-aware-playback-control-dialog","area":"Video Player","name":"Compact context-aware playback control dialog","description":"Playback control dialog: context-aware tabs (3D only on VR builds; audio/subtitle tabs hidden when not selectable), distinct Volume vs Audio track tabs, quick speed presets 0.5x/1.5x/2x, compact height","flavors":["standard","lite","legacy","vr","noLegal"],"spec":"S0670","status":"active"}
{"id":"screen-capture.play-mediaprojection-capture-suite","area":"Screen Capture","name":"Play MediaProjection capture suite","description":"Ships the Play-safe screenshot suite on standard: take a screenshot through per-session system consent, then copy it to the clipboard, open it in the drawing editor, run on-device OCR-translate, send it via Send To, and save it to a configured or fallback folder.","flavors":["standard"],"spec":"S0671","status":"active"}
{"id":"streams.channel-favicon-thumbnails","area":"Streams","name":"Channel favicon thumbnails in the stream catalog","description":"Each stream-catalog row shows a recognizable per-channel favicon thumbnail sliced from a single sprite-atlas PNG bundled inside the downloadable catalog archive (offline-built from each channel homepage); channels without a favicon show an empty slot. The atlas and its coordinate column are backward-compatible - older app versions ignore them without crashing.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0668","status":"active"}
{"id":"streams.streams-catalog-actionable-empty-state","area":"Streams","name":"Actionable streams-catalog empty state","description":"When the streams catalog has no sources, the empty state shows an icon plus inline Add-stream and Import-list buttons that open the same dialogs as the toolbar actions, so recovery is one tap instead of finding the toolbar glyphs.","flavors":["standard","lite","legacy","noLegal","vr"],"spec":"S0673","status":"active"}
{"id":"streams.stream-browser-grid-mode-live-channels-shown-as","area":"Streams","name":"Stream browser grid mode: live channels shown as tiles with a captured current f","description":"Stream browser grid mode: live channels shown as tiles with a captured current frame, list/grid toggle persisted across sessions, snapshot-and-release capture with concurrency limit and TTL cache","flavors":["standard","legacy","noLegal"],"spec":"S0675","status":"active"}
{"id":"screen-capture.edge-gesture-crop-and-share","area":"Screen Capture","name":"Edge-gesture action: crop screenshot and share","description":"A left-edge gesture action that captures the screen, immediately reopens the screenshot with a draggable crop frame, overwrites it with the cropped result, then opens the app Send to menu (print, social, email) targeting the cropped image.","flavors":["standard","noLegal"],"spec":"S0680","status":"active"}
{"id":"send-to-menu.select-resource","area":"Send-to menu","name":"Select resource entry","description":"Send-to menu ends with a permanent 'Select resource..' entry that copies the current file to a destination resource (or a custom folder via '..') from the player and all standalone players, mirroring the file browser Copy-to dialog.","flavors":["standard","lite","photos","legacy","noLegal","vr"],"spec":"S0681","status":"active"}
{"id":"drawing-annotations.crop-tool-in-editor","area":"Drawing & Annotations","name":"Crop tool in the draw editor","description":"Crop the working image to a draggable rectangle inside the draw editor - full resolution for local files - then keep annotating before saving or sharing.","flavors":["standard","lite","photos","legacy"],"spec":"S0679","status":"active"}
{"id":"streaming.wait-phase-label","area":"Streaming","name":"Stream wait-phase label: buffering vs reconnecting","description":"While a network stream is loading, the player shows a caption under the spinner that tells the user which wait is happening: buffering (filling the memory buffer) or reconnecting (re-establishing a dropped connection). Localized in English, Russian and Ukrainian. The stream buffer is also tuned for steadier playback on an unstable connection without regressing live-edge tracking.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0685","status":"active"}
{"id":"streaming.bandwidth-adaptive-stream-buffer","area":"Streaming","name":"Bandwidth-adaptive stream buffer","description":"The internet-stream player sizes its playback buffer to the measured connection speed at runtime: on a weak or unstable link it builds a deeper cushion so a stream rides out throughput dips instead of stalling into the loading spinner, and on a healthy link it stays modest. Live HLS/DASH streams keep their live-safe buffer depth so they still track the live edge without falling behind.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0688","status":"active"}
{"id":"streams.retap-to-stop","area":"Streams","name":"Re-tap to stop an inline stream","description":"Tapping a stream that is already playing inline stops it, so one gesture both starts and stops playback.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0690","status":"active"}
{"id":"streams.duplicate-title-suppression","area":"Streams","name":"Duplicate parenthetical title suppression","description":"Stream titles of the form Name (Name) render as Name; a differing parenthetical (region/quality) is kept.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0691","status":"active"}
{"id":"streams.landscape-multi-column-list","area":"Streams","name":"Multi-column stream list in landscape","description":"The stream list shows two or more columns in landscape and recomputes the column count on rotation.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0692","status":"active"}
{"id":"streams.fullscreen-video-player","area":"Streams","name":"Fullscreen stream video player","description":"Opening a video stream goes straight to immersive fullscreen; a surface tap reveals the top command bar and bottom controls without the media players touch zones.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0694","status":"active"}
{"id":"streams.long-press-pin","area":"Streams","name":"Long-press to pin a stream","description":"Long-pressing a stream row or tile pins or unpins it to the top of the list.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0695","status":"active"}
{"id":"streams.pinned-only-filter","area":"Streams","name":"Pinned-only stream filter","description":"The stream filter can limit the list to streams the user pinned.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0696","status":"active"}
{"id":"streams.persist-filter-sort","area":"Streams","name":"Remembered stream filter and sort","description":"The chosen stream filter, media kind, sort, and search query are restored on the next launch.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0697","status":"active"}
{"id":"streams.persist-scroll-position","area":"Streams","name":"Remembered stream list position","description":"The stream list returns to the same item the user last viewed after a restart.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0699","status":"active"}
{"id":"streams.refresh-health-probe","area":"Streams","name":"Stream health probe on refresh","description":"The refresh action checks each visible stream for reachability and marks it green or red, refreshing grid thumbnails, and stops on any user interaction.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0700","status":"active"}
{"id":"streams.grid-tile-status-and-menu","area":"Streams","name":"Grid tile status dot and overflow menu","description":"Grid tiles show a play-status dot in the lower-left corner and a three-dot command menu in the upper-right corner.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0701","status":"active"}
{"id":"user-interface.landscape-style-layout-now-triggers-by-minimum-available","area":"User Interface","name":"Landscape-style layout now triggers by minimum available width (>=600dp) in addi","description":"Landscape-style layout now triggers by minimum available width (>=600dp) in addition to landscape orientation, so wide high-resolution devices held in portrait get the wide layout instead of collapsing content to the top-left.","flavors":["standard","lite","photos","legacy"],"spec":"S0693","status":"active"}
{"id":"streams.offline-stream-play-soft-fail","area":"Streams","name":"Offline stream play soft-fail","description":"Streams refuse to play with a quick no-network message instead of spinning when the device has no Wi-Fi or mobile data.","flavors":["standard","noLegal","legacy"],"spec":"S0711","status":"active"}
{"id":"screen-capture.standard-edge-gesture-triggers","area":"Screen Capture","name":"Standard edge-gesture and tile capture triggers","description":"On the standard Play flavor, screen capture can be triggered from the edge-gesture family - an opt-in edge strip (specialUse FGS) with configurable directional capture/share actions and an app-launch panel, plus a Quick Settings tile fallback that captures via MediaProjection consent without a persistent overlay. Both triggers ship gated off by default, enabled per build pending Play review of the specialUse declaration.","flavors":["standard"],"spec":"S0672","status":"active"}
{"id":"screen-capture.edge-gesture-visible-strip","area":"Screen Capture","name":"Per-zone gesture strip visibility","description":"Each of the four edge-gesture zone blocks (upper/lower left, upper/lower right) has its own toggle that shows a semi-transparent grey guide on the first 4 px of that band's screen edge - left bands on the left edge, right bands on the right - leaving the rest of the band transparent. Each toggle is independent, defaults off, applies to the live strip immediately while the gesture overlay is enabled; the pre-existing single left-strip setting migrates into the upper-left zone.","flavors":["standard","noLegal"],"spec":"S1008","status":"active"}
{"id":"database.reset_recovery","area":"Sources & Storage","name":"Database reset recovery notice","description":"When the local database cannot be opened or migrated, the app backs up the existing database files and shows a dialog explaining the reset and where the backup was saved, instead of silently wiping data.","flavors":["standard","lite","photos","legacy"],"spec":"S0731","status":"active"}
{"id":"tooling.static_analysis_detekt","area":"General","name":"Static analysis gate (detekt + ktlint)","description":"Developer-facing detekt plus ktlint formatting gate over app_v2 and wear Kotlin sources with frozen ratchet baselines; runs locally and via post-change.ps1, failing only on new findings. Separate from the runtime build (not wired into assemble).","flavors":["standard","lite","photos","legacy","vr"],"spec":"S0720","status":"active"}
{"id":"tooling.listener_symmetry_gate","area":"General","name":"Listener symmetry ratchet gate","description":"Developer-facing lexical gate over app_v2 and wear Kotlin sources that freezes the current register/unregister and add/remove Listener/Callback/Observer imbalance, then fails only on new drift. Runs directly via script and from post-change.ps1 on Kotlin or Mixed changes.","flavors":["standard","lite","photos","legacy","vr"],"spec":"S0721","status":"active"}
{"id":"camera.camera-zoom-presets-zoom-slider-night-mode","area":"Camera","name":"Camera zoom presets, zoom slider & night mode","description":"In-app camera: zoom presets 0.5-30x with a draggable zoom slider, overlay controls legible on any background, and a device-gated photo night mode.","flavors":["standard","lite","photos","legacy"],"spec":"S0753","status":"active"}
{"id":"tooling.listener_symmetry_ratchet","area":"General","name":"Listener symmetry ratchet gate","description":"Developer-facing cheap lexical check verifying matching register/unregister and add/remove listener calls, integrated into post-change.ps1 with a ratchet baseline.","flavors":["standard","lite","photos","legacy","vr"],"spec":"S0721","status":"active"}
{"id":"tooling.custom_lint_rules","area":"General","name":"Architectural custom Lint rules module","description":"Custom Android Lint rules module (:lint-rules) with AST detectors validating Activity logic delegation, UI context leak prevention, repeatOnLifecycle Flow usage, player resource release, and main-thread I/O checks.","flavors":["standard","lite","photos","legacy","vr"],"spec":"S0721","status":"active"}
{"id":"tooling.leakcanary_instrumentation_testing","area":"General","name":"Instrumented memory leak detection","description":"On-demand instrumented leak detection runner using LeakCanary inside instrumented tests to verify UI flow lifecycle and fail on leak detection.","flavors":["standard","lite","photos","legacy","vr"],"spec":"S0721","status":"active"}
{"id":"settings-navigation.quick-launch-panel-in-programs-menu","area":"Settings & Navigation","name":"Quick Launch Panel in programs menu","description":"The Quick Launch Panel can now be opened from the main window programs (three-dots) menu, in addition to the edge gesture, Quick Settings tile, and widget.","flavors":["standard","lite","photos","legacy"],"spec":"S0757","status":"active"}
{"id":"mainwindow.exit_button_minimize_when_background_active","area":"Settings & Navigation","name":"Exit button minimizes when background functions are active","description":"The top-left exit button minimizes the app (keeping background music, recording, scheduled file operations and the edge-gesture overlay alive) instead of closing it whenever any such function is active; it fully closes only when nothing runs in the background, and a long-press always force-closes after a brief 'background stopped' toast.","flavors":["standard","lite","photos","legacy"],"spec":"S0759","status":"active"}
{"id":"streams.stream-country-metadata-filter-sort","area":"Streams","name":"Stream country metadata with filter and sort","description":"Shows each catalog channel's country as a flag+code chip before the language chip in the stream list, and lets you filter and sort the stream list by country. The country comes from the curated catalog (ISO 3166-1 alpha-2 code); channels without a known country stay visible and sort last.","flavors":["standard","legacy","vr","noLegal"],"spec":"S0761","status":"active"}
{"id":"camera.photo-gps-geotag","area":"Camera","name":"Photo GPS geotagging (opt-in)","description":"Optionally embeds the device GPS location in the EXIF of photos taken with the in-app camera. Opt-in via Operations > Camera (off by default), requests location permission on enable, and never blocks the shutter when no fix or permission is available. Works for full-frame and digital-zoom shots and for camera launches from widgets.","flavors":["standard","lite","photos","legacy"],"spec":"S0766","status":"active"}
{"id":"ui.main_programs_panel","area":"User Interface","name":"Programs panel on the main window","description":"Optional horizontal panel mirroring the programs three-dots menu above the resource list; icons in portrait, icons plus labels in landscape, overflow for items that do not fit; hides the three-dots button while shown. Default off.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0755","status":"active"}
{"id":"streams.main_window_panel","area":"Internet Streams","name":"Streams panel on the main window","description":"Optional horizontal panel above the resource list with a Streams entry button followed by pinned channels in pin order; channel chips show a favicon thumbnail and/or a short name chosen by window width; tapping a channel plays it. Default off, requires Streams enabled.","flavors":["standard","legacy","noLegal"],"spec":"S0756","status":"active"}
{"id":"ui.panel_item_menu","area":"User Interface","name":"Context menu on main-window panel items","description":"Each item on the main-window programs and streams panels has a three-dots button (when labels show) or long-press menu to open it, open it in a separate window when multi-window is available, or remove it from the panel - disabling the program in settings, or unpinning the channel. Body tap still opens or plays the item directly.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0770","status":"active"}
{"id":"camera.fixed-controls-send-to-and-settings-dialog","area":"Camera","name":"Fixed camera controls, Send To and settings dialog","description":"In-app camera keeps controls physically fixed while icons rotate, shows the active save destination, adds a Send To action for the latest capture, and exposes capability-driven settings such as timer, grid, aspect ratio, resolution, exposure, white balance, manual ISO/shutter and HDR when supported.","flavors":["standard","lite","photos","legacy"],"spec":"S0754","status":"active"}
{"id":"capture.screen-video-recording-from-the-programs-block-whole","area":"Capture","name":"Screen video recording from the programs block: whole-screen MediaProjection cap","description":"Screen video recording from the programs block: whole-screen MediaProjection capture with microphone audio via a foreground service, pause/resume and stop from a compact in-app indicator (shared with quick voice capture) or the notification, saved to the chosen resource or Downloads.","flavors":["standard","noLegal"],"spec":"S0774","status":"active"}
{"id":"streams.persist-last-frame-thumbnail","area":"Streams","name":"Persistent last-frame stream thumbnails","description":"Grid mode saves each captured live video-stream frame to app-private storage and re-shows it as the channel thumbnail on next launch, so a known http(s) video channel appears with its last frame immediately instead of a blank/favicon tile, then refreshes to a live frame.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0712","status":"active"}
{"id":"user-interface.context-icons-on-settings-and-welcome","area":"User Interface","name":"Context icons on Settings and Welcome","description":"Settings collapsible group headers and feature toggle rows, plus the Welcome functionality and network pages, show a monochrome icon of the matching feature (images, video, audio, documents, streams, network sources, file browser, calculator, capture, mic and screen recording, OCR, translation, gestures, scheduled operations) to the left of the label, so features stay recognisable when labels are small.","flavors":["standard","lite","photos","legacy"],"spec":"S0776","status":"active"}
{"id":"streams.panel_inline_audio","area":"Internet Streams","name":"Inline audio playback from the main-window streams panel","description":"Tapping an audio (radio) channel on the main-window streams panel plays it inline in the home window with a bottom now-playing bar (channel name, ICY track, stop button), without opening the streams list screen; re-tapping the same channel stops it. Video channels still open the streams screen.","flavors":["standard","legacy","noLegal"],"spec":"S0777","status":"active"}
{"id":"main.panel_menu_configure_shortcut","area":"User Interface","name":"Configure shortcut in main-window panel menus","description":"Long-press menus of the main-window programs panel and the streams entry button include a Configure item that opens Settings directly on the relevant group with that section expanded and scrolled into view.","flavors":["standard","lite","photos","legacy","vr"],"spec":"S0780","status":"active"}
{"id":"main_window.resource_type_filter_collapse","area":"Media Browsing","name":"Collapse resource-type filter strip","description":"Long-press the main-window resource-type tabs to collapse them into a colored label strip; tap the strip to expand. The collapsed state persists across app restarts.","flavors":["standard","lite","photos","legacy"],"spec":"S0781","status":"active"}
{"id":"streams.panel-hide-from-entry-menu","area":"Streams","name":"Hide the main-window streams panel from its entry menu","description":"Long-pressing the main-window Streams panel entry button now offers a 'Hide panel' action that hides only the panel while keeping Streams enabled, so the Streams button returns to the programs panel/menu. It is distinct from 'Disable', which turns the whole Streams feature off; re-enable the panel via Settings -> Streams.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0782","status":"active"}
{"id":"streams.favorite-channel-entry","area":"Streams","name":"Add live channels to Favorites","description":"Add a live channel to the shared Favorites list (when Favorites is enabled); it shows by channel name and opens in the stream player, independent of pinning.","flavors":["standard","legacy","noLegal","vr"],"spec":"S0783","status":"active"}
{"id":"streams.country_flag_fallback","area":"Streams","name":"Country flag fallback in streams list","description":"Shows the channel country flag in the streams-list leading icon slot when the channel has no favicon atlas tile, keeping row alignment","flavors":["standard"],"spec":"S0785","status":"active"}
{"id":"screen-capture.edge-gesture-take-photo","area":"Screen Capture","name":"Take a photo (edge gesture)","description":"A left-edge gesture action that captures a photo headlessly - no camera screen opens - and saves it to the device camera folder with a confirming toast. Only the system camera-in-use indicator appears briefly; a fully silent capture is not possible on Android.","flavors":["standard"],"spec":"S0790","status":"active"}
{"id":"screen-capture.edge-gesture-take-photo-send-to","area":"Screen Capture","name":"Take a photo and send to.. (edge gesture)","description":"A left-edge gesture action that auto-captures a photo and then opens it in the standalone viewer with the send-to menu.","flavors":["standard"],"spec":"S0791","status":"active"}
{"id":"screen-capture.edge-gesture-take-photo-edit","area":"Screen Capture","name":"Take a photo and edit (edge gesture)","description":"A left-edge gesture action that auto-captures a photo and then opens it directly in the draw/edit tools.","flavors":["standard"],"spec":"S0792","status":"active"}
{"id":"screen-capture.edge-gesture-take-photo-ocr-translate","area":"Screen Capture","name":"Take a photo and OCR-translate (edge gesture)","description":"A left-edge gesture action that auto-captures a photo and then runs OCR-translate on it. Hidden when the translation capability is not available.","flavors":["standard"],"spec":"S0794","status":"active"}
{"id":"screen-capture.edge-gesture-start-video-recording","area":"Screen Capture","name":"Start video recording (edge gesture)","description":"A left-edge gesture action that opens the camera fixed in video mode, ready to record; the clip saves to the public Movies folder.","flavors":["standard"],"spec":"S0795","status":"active"}
{"id":"screen-capture.edge-gesture-start-audio-recording","area":"Screen Capture","name":"Start audio recording (edge gesture)","description":"A left-edge gesture action that starts the quick voice recorder; repeating the gesture stops and saves the recording.","flavors":["standard"],"spec":"S0796","status":"active"}
{"id":"screen-capture.edge-gesture-start-screen-recording","area":"Screen Capture","name":"Start screen recording (edge gesture)","description":"A left-edge gesture action that starts screen video recording via the app disclosure plus the system MediaProjection consent; repeating the gesture stops and saves. Hidden on flavors without the capture engine.","flavors":["standard"],"spec":"S0797","status":"active"}
{"id":"media-browsing.open-app-settings-from-overflow","area":"Media Browsing","name":"Open app settings from the browse menu","description":"The file browser overflow menu has a bottom-pinned 'App settings' entry that opens the main Settings window directly, without returning to the home screen.","flavors":["standard","lite","photos","legacy"],"spec":"S0806","status":"active"}
{"id":"game.visual-modes","area":"Game","name":"Mini-game visual modes","description":"Switchable visual skins for the mini-game: Classic (abstract shapes) and Kryvavitsa (light-gray field, black walls, human silhouettes, a door exit and stomping movement). The chosen mode persists across launches and the help legend follows the active mode.","flavors":["standard","lite","photos","legacy"],"spec":"S0804","status":"active"}
{"id":"main-window.programs-panel-header-menu","area":"Media Browsing","name":"Programs panel header menu","description":"The main-window programs panel starts with a three-dots header button opening a panel menu: Configure panel (jumps to the Additional programs and scenarios settings), Collapse panel (folds the row into a labelled strip that a tap re-expands; the collapsed state persists across restarts), and Hide panel (removes the panel and restores the three-dots button in the top command bar).","flavors":["standard","lite","photos","legacy"],"spec":"S0807","status":"active"}
{"id":"main-window.streams-panel-collapse","area":"Media Browsing","name":"Streams panel collapse","description":"The main-window streams panel entry button long-press menu gains a Collapse panel item that folds the panel into a labelled Streams.. strip; a tap on the strip re-expands it, and the collapsed state persists across restarts.","flavors":["standard","legacy","vr"],"spec":"S0808","status":"active"}
{"id":"quick-capture.camera-scenario-context-label","area":"Quick Capture","name":"Camera scenario context label","description":"The in-app camera shows a context label naming the current scenario (text recognition) above the zoom presets so the user remembers why the camera was opened; hidden for generic capture.","flavors":["standard","lite","photos","legacy"],"spec":"S0812","status":"active"}
{"id":"main-window.collapsed-panels-single-row","area":"Media Browsing","name":"Collapsed panels grouped in one row","description":"Collapsed main-window panels (programs / streams / resource-type filter) group their labels as compact chips in one shared row above the resource list instead of separate full-width strips; tapping a chip expands that panel back to its place, and an empty row takes no vertical space.","flavors":["standard","lite","photos","legacy"],"spec":"S0809","status":"active"}
{"id":"main-window.long-press-name-labels","area":"Media Browsing","name":"Long-press name labels","description":"Long-pressing a main-window element reveals its name: the programs-item / streams-entry / channel context menus gain a greyed non-clickable name header at the top, and the icon-only top command-bar buttons show their name via a tooltip - making icon-only controls understandable.","flavors":["standard","lite","photos","legacy"],"spec":"S0810","status":"active"}
{"id":"user-interface.dpad-focus-frame","area":"User Interface","name":"Travelling D-pad / TV focus frame","description":"A single highlighted frame follows keyboard, D-pad and gamepad focus across every screen, form and dialog so the focused item is always visible; it shows only under remote/gamepad control, not touch. In the player, arrows move focus between the on-screen transport controls.","flavors":["standard","lite","photos","legacy"],"spec":"S0819","status":"active"}
{"id":"tooling.macrobenchmark_baseline_profile_perf_harness","area":"General","name":"Macrobenchmark, Baseline Profile and Perfetto perf harness","description":"Developer-facing macrobenchmark, baseline profile and Perfetto workflow for the standard flavor: stable local commands measure cold start, browse/player readiness and back-navigation, and the same journeys generate a baseline profile for release builds.","flavors":["standard"],"spec":"S0722","status":"active"}
{"id":"networking.network-video-playback-keeps-thumbnail-suspension-until-playback","area":"Networking","name":"Network video playback keeps thumbnail suspension until playback truly ends - a","description":"Network video playback keeps thumbnail suspension until playback truly ends - a stale 300ms resume job no longer clears the active flag mid-stream, so previews are not wrongly marked as permanently failed","flavors":["standard"],"spec":"S0868","status":"active"}
{"id":"streams.double-tapping-the-same-inline-audio-stream-during","area":"Streams","name":"Double-tapping the same inline audio stream during the service connect no longer","description":"Double-tapping the same inline audio stream during the service connect no longer leaves an orphaned background player - a stale play callback now stops the just-started player instead of resurrecting it","flavors":["standard"],"spec":"S0874","status":"active"}
{"id":"documents.standalone-document-viewer-no-longer-leaks-a-pdfrenderer","area":"Documents","name":"Standalone document viewer no longer leaks a PdfRenderer, file descriptor or Web","description":"Standalone document viewer no longer leaks a PdfRenderer, file descriptor or WebView when paging between mixed-type documents (PDF/EPUB/Office) - teardown now releases every initialized viewer, not just the active type","flavors":["standard"],"spec":"S0873","status":"active"}
{"id":"player.read-aloud-tts-no-longer-keeps-playing-or","area":"Player","name":"Read Aloud (TTS) no longer keeps playing or leaks its engine when the player scr","description":"Read Aloud (TTS) no longer keeps playing or leaks its engine when the player screen is recreated (theme/font change or 'Don't keep activities'); TTS state updates are now confined to the main thread","flavors":["standard"],"spec":"S0871","status":"active"}
{"id":"player.the-deprecated-standalone-player-no-longer-crashes-on","area":"Player","name":"The deprecated standalone player no longer crashes on teardown when launched wit","description":"The deprecated standalone player no longer crashes on teardown when launched with a default-player probe URI or destroyed on the first frame - the view-manager release is now guarded against an uninitialized state","flavors":["standard"],"spec":"S0860","status":"active"}
{"id":"video-player.open-in-fullscreen-from-browse","area":"Video Player","name":"Open video files in fullscreen mode","description":"Video files opened from Browse can launch straight into fullscreen playback, controlled by a new Video Settings toggle - on by default for every device profile except Audio Player and E-book Reader.","flavors":["standard","lite","photos","legacy"],"spec":"S0820","status":"active"}
{"id":"general.player-settings-dialog-redesigned-to-canonical-header-actions","area":"General","name":"Player settings dialog redesigned to canonical header/actions layout - title no","description":"Player settings dialog redesigned to canonical header/actions layout - title no longer wraps in portrait","flavors":["standard"],"spec":"S0827","status":"active"}
{"id":"general.enable-all-onboarding-ocr-translation-toggles-no-longer","area":"General","name":"Enable-all onboarding: OCR/translation toggles no longer silently revert when bo","description":"Enable-all onboarding: OCR/translation toggles no longer silently revert when both engine installs complete near-simultaneously (serialized settings writers)","flavors":["standard"],"spec":"S0876","status":"active"}
{"id":"general.browser-sign-in-saving-an-account-no-longer","area":"General","name":"Browser sign-in: saving an account no longer risks a crash when the screen rotat","description":"Browser sign-in: saving an account no longer risks a crash when the screen rotates while the session is being stored","flavors":["standard"],"spec":"S0877","status":"active"}
{"id":"general.network-folders-smb-connection-degradation-recovery-reacts-on","area":"General","name":"Network folders (SMB): connection-degradation recovery reacts on time under para","description":"Network folders (SMB): connection-degradation recovery reacts on time under parallel load (timeout strike counting no longer loses events)","flavors":["standard"],"spec":"S0867","status":"active"}
{"id":"standalone-player.standalone-player-manual-pause-survives-background-resume-saf","area":"Standalone Player","name":"Standalone player: manual pause survives background/resume, SAF rename no longer","description":"Standalone player: manual pause survives background/resume, SAF rename no longer restarts playback from 0","flavors":["standard","lite","photos","legacy"],"spec":"S0894","status":"active"}
{"id":"player.background-inline-audio-slideshow-music-browse-mic-inline","area":"Player","name":"Background/inline audio (slideshow music, Browse mic/inline audio, Streams OFF-m","description":"Background/inline audio (slideshow music, Browse mic/inline audio, Streams OFF-mode, wear) now correctly requests and abandons audio focus - ducks/pauses for other apps, survives split-screen multi-window instead of stopping when one window closes","flavors":["standard"],"spec":"S0896","status":"active"}
{"id":"player.player-subsystem-correctness-fixes-bd-ts-local-video","area":"Player","name":"Player subsystem correctness fixes: BD-TS local video now uses the tuned playbac","description":"Player subsystem correctness fixes: BD-TS local video now uses the tuned playback pipeline, Now Playing sheet stops polling when backgrounded, VR launch no longer crashes on a settings-write hiccup, stream error-recovery no longer disturbs the next file's position","flavors":["standard"],"spec":"S0895","status":"active"}
{"id":"ui.main_panel_accents","area":"User Interface","name":"Colour-coded main-window panels","description":"Each collapsible main-window panel (programs, streams, resource-type filter) has its own accent background shown in both expanded and collapsed state, with a recognisable icon on the collapsed chip.","flavors":["standard","lite","photos","legacy"],"spec":"S0914","status":"active"}
{"id":"screen-capture.panel-programs-scenarios","area":"Screen Capture","name":"App panel: quick camera, voice, screen recording, and link download","description":"The quick-launch app panel can now also hold quick camera capture, quick voice recording, screen recording, and download-by-link - the same functions already available from the main window's Programs and Scenarios menu - each gated by the same build/runtime rules as its main-window counterpart.","flavors":["standard","lite","photos","legacy","noLegal"],"spec":"S0912","status":"active"}
{"id":"screen-capture.quick-recorder-floating-stop-indicator","area":"Screen Capture","name":"Floating stop indicator for quick audio recording","description":"Quick audio recording started from the home widget or an edge gesture shows a small floating indicator with a Stop control on top of whatever app is open, in addition to the existing notification and repeat-gesture ways to stop it.","flavors":["standard","noLegal"],"spec":"S0930","status":"active"}
{"id":"general.settings-management-destinations-confirm-delete-and-confirm-move","area":"General","name":"Settings - Management - Destinations: confirm-delete and confirm-move toggles no","description":"Settings - Management - Destinations: confirm-delete and confirm-move toggles now render as two full-width rows in portrait instead of squeezed side-by-side columns","flavors":["standard"],"spec":"S0884","status":"active"}
{"id":"general.settings-management-os-interaction-system-media-handler-and","area":"General","name":"Settings > Management > OS Interaction: system-media-handler and accept-shared-f","description":"Settings > Management > OS Interaction: system-media-handler and accept-shared-files toggles stack in two full-width rows in portrait; unchanged in landscape","flavors":["standard"],"spec":"S0881","status":"active"}
{"id":"streams.reorder-pinned-streams","area":"Streams","name":"Reorder pinned streams","description":"Reorder pinned streams (move up / down / to top) from the streams list and grid three-dot menu; order honoured by the main-window panel and channel selection.","flavors":["standard","legacy","noLegal"],"spec":"S0938","status":"active"}
{"id":"input.tv_focus_indicator","area":"TV & Input","name":"App-wide focus indicator for remote/D-pad","description":"On devices without touch, the currently focused control is highlighted with an accent outline drawn in place on the control itself, shown app-wide only in non-touch (remote/keyboard/gamepad) mode; the player video/artwork surface itself is excluded so playback screens never draw the outline around the video.","flavors":["standard","lite","photos","legacy"],"spec":"S1007","status":"active"}
{"id":"input.tv_initial_focus","area":"TV & Input","name":"Automatic initial focus on every screen","description":"On devices without touch, opening any screen places focus on a real control automatically, so the first remote/D-pad key acts immediately instead of being spent waking focus.","flavors":["standard","lite","photos","legacy"],"spec":"S0944","status":"active"}
{"id":"general.standalone-document-viewer-tap-a-pdf-hyperlink-to","area":"General","name":"Standalone document viewer: tap a PDF hyperlink to open it, long-press to select","description":"Standalone document viewer: tap a PDF hyperlink to open it, long-press to select page text; legacy player pages PDFs with a vertical swipe.","flavors":["standard"],"spec":"S0953","status":"active"}
{"id":"settings-navigation.quick-launch-panel-os-settings-tiles","area":"Settings & Navigation","name":"More OS settings tiles in the quick-launch panel","description":"The quick-launch panel Android settings catalog adds Developer options, Battery saver, Auto-rotate, Accessibility, Wireless networks, Data usage, NFC and VPN tiles; each appears only when its settings screen resolves on the device.","flavors":["standard","lite","photos","legacy"],"spec":"S0946","status":"active"}
{"id":"general.quick-launch-panel-pickers-app-feature-os-shortcut","area":"General","name":"Quick-launch panel pickers (app / feature / OS shortcut / resource) now show a s","description":"Quick-launch panel pickers (app / feature / OS shortcut / resource) now show a search-filter for long lists and a consistent single-choice UI with leading icons.","flavors":["standard"],"spec":"S0947","status":"active"}
{"id":"general.vr-install-cta-no-longer-appears-on-the","area":"General","name":"VR install CTA no longer appears on the vr flavor when opening 3D content (it wr","description":"VR install CTA no longer appears on the vr flavor when opening 3D content (it wrongly prompted to install the VR edition while already running it).","flavors":["standard"],"spec":"S0969","status":"active"}
{"id":"general.ocr-and-dts-native-modules-are-now-bundled","area":"General","name":"OCR and DTS native modules are now bundled in the APK, so they work on Google Pl","description":"OCR and DTS native modules are now bundled in the APK, so they work on Google Play standard installs instead of showing a misleading 'delivered via Google Play' unavailable message.","flavors":["standard"],"spec":"S0971","status":"active"}
{"id":"general.audio-related-permissions-are-no-longer-silently-disabled","area":"General","name":"Audio-related permissions are no longer silently disabled on minified release bu","description":"Audio-related permissions are no longer silently disabled on minified release builds (the flavor gate used reflection that R8 broke); the gate now resolves BuildConfig flags directly.","flavors":["standard"],"spec":"S0970","status":"active"}
{"id":"panel.gesture-camera-actions","area":"App-launch panel","name":"Camera/video gesture actions as panel functions","description":"The quick-access (app-launch) panel function picker now offers the camera/video actions from the left-edge gestures: take a photo and send-to, take a photo and edit, take a photo and OCR-translate, and start a video recording.","flavors":["standard","noLegal"],"spec":"S0978","status":"active"}
{"id":"app-launch-panel.close-button","area":"App Launch Panel","name":"Quick-launch panel close button","description":"The quick-launch panel dialog shows an explicit close (X) button before the title, so it can be dismissed with a tap in addition to Back or tapping outside.","flavors":["standard","lite","photos","legacy"],"spec":"S0979","status":"active"}
{"id":"network-cloud.companion-sftp-import","area":"Network & Cloud","name":"Windows companion one-action SFTP import","description":"Imports a .fmscfg config exported by the FastMediaSorter Windows companion (folder-share helper): one file pick creates ready-to-use read-only SFTP resources per shared folder with the embedded credential and TOFU-pinned host key - no manual host/port/key entry.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0421","status":"active"}
{"id":"sharing.viber-receiver","area":"Sharing","name":"Viber receiver","description":"Shares one file to the installed Viber app and falls back to the system chooser if direct dispatch is unavailable.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0985","status":"active"}
{"id":"sharing.messenger-receiver","area":"Sharing","name":"Messenger receiver","description":"Shares one file to the installed Messenger app and falls back to the system chooser if direct dispatch is unavailable.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0985","status":"active"}
{"id":"sharing.tiktok-receiver","area":"Sharing","name":"Short-video social receiver","description":"Shares one image, GIF, or video to an installed compatible short-video social app and uses the first file from a multi-selection.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0985","status":"active"}
{"id":"network-cloud.sftp-access-share-file","area":"Network & Cloud","name":"Share SFTP resource access as a file","description":"Exports a chosen SFTP resource to a .fmscfg config file (optional password omission, private-network reachability warning) and hands it to the system share sheet for Telegram or email.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0984","status":"active"}
{"id":"network-cloud.sftp-access-import-attachment","area":"Network & Cloud","name":"One-tap import of a shared SFTP access file","description":"Tapping a received .fmscfg attachment from Telegram or email opens a confirm dialog (with a password field when the file carries none) and creates the ready-to-use SFTP resource.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0984","status":"active"}
{"id":"network-cloud.companion-qr-scan-import","area":"Network & Cloud","name":"Companion QR scan import","description":"Scans a companion QR code with the camera to add the shared PC folders as read-only SFTP resources in one step with no file; decodes both plain and compressed payloads through the shared parser and TOFU host-key pin; scan entry point hidden on camera-less and VR devices.","flavors":["standard","photos","legacy","noLegal"],"spec":"S0988","status":"active"}
{"id":"screen-capture.edge-band-gestures","area":"Screen Capture","name":"Configurable edge-swipe gestures across four screen-edge bands","description":"Up to twelve screenshot and quick-action gestures: four independently toggleable screen-edge bands (two left, two right) each with upward, inward and downward swipes.","flavors":["standard"],"spec":"S0847","status":"active"}
{"id":"game.contrast-mode-and-guide-arrow","area":"Game","name":"Contrast mini-game mode and start-of-level exit arrow","description":"Adds a third high-contrast mini-game mode that draws floor, walls, exit and all actors as solid full-colour tiles for small-screen readability, with a stepped move animation plus a fading source ghost so an identical cube's direction stays clear; and, in every mode, a ~1s arrow from the player to the nearest exit at level start to speed up orientation on large maps.","flavors":["standard","lite","photos","legacy"],"spec":"S0993","status":"active"}
{"id":"network-cloud.resource-import-entry-points","area":"Network & Cloud","name":"Resource config import entry points","description":"Import a ready resource configuration from the Add-resource screen: Import-from-file and Import-by-barcode entries sit next to the four resource-type cards and in the SFTP form header, reusing the companion .fmscfg file and QR import; the barcode entry is hidden on camera-less devices.","flavors":["standard","photos","legacy","vr","noLegal"],"spec":"S0991","status":"active"}
{"id":"network.companion_publish_guide","area":"Network & Cloud","name":"Companion publish-folders guide link","description":"In-app help links on the Add Resource screen and in Settings open the PC-side guide for publishing folders to Android over SFTP; hidden where companion import is unavailable.","flavors":["standard","photos","legacy","noLegal"],"spec":"S0994","status":"active"}
{"id":"general.sftp-resource-with-a-missing-host-path-now","area":"General","name":"SFTP resource with a missing host path now shows a friendly 'not found' message","description":"SFTP resource with a missing host path now shows a friendly 'not found' message instead of a generic error","flavors":["standard"],"spec":"S1000","status":"active"}
{"id":"import.companion-config-import-export-upgraded-to-schema-v2","area":"Import","name":"Companion config import/export upgraded to schema v2: an imported companion reso","description":"Companion config import/export upgraded to schema v2: an imported companion resource now arrives fully configured (type/profile such as audio library, media types, scan conditions, destination, comment, PIN, slideshow interval) over both the .fmscfg file and the QR/barcode; older v1 files still import unchanged.","flavors":["standard"],"spec":"S1002","status":"active"}
{"id":"media-browsing.resource-statistics-persist","area":"Media Browsing","name":"Resource statistics persist after browsing","description":"Resource statistics (file count, subfolder count, last opened, last sync) are written when a resource is browsed and are no longer reset to zero or never by leaving the screen or opening a file; cloud resources record last sync time on browse.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S1001","status":"active"}
{"id":"general.live-streams-that-silently-freeze-stuck-buffering-with","area":"General","name":"Live streams that silently freeze (stuck buffering with no error) now auto-recov","description":"Live streams that silently freeze (stuck buffering with no error) now auto-recover: a watchdog re-anchors and re-prepares the stream up to 3 times showing Reconnecting, and falls back to the channel-unavailable dialog when the network stays dead","flavors":["standard"],"spec":"S0936","status":"active"}
{"id":"general.resource-profile-is-now-one-unified-dialog-titled","area":"General","name":"Resource profile is now one unified dialog titled Resource Profile in both the a","description":"Resource profile is now one unified dialog titled Resource Profile in both the add-resource forms and the resource editor; choosing File Manager profile no longer hides the media-types togglers in the editor, and profile presets set the same media types everywhere","flavors":["standard"],"spec":"S1003","status":"active"}
{"id":"general.splash-product-branding","area":"General","name":"Product-branded splash screen","description":"The cold-start splash shows the app logo and Fast Media Sorter wordmark fading in at center, with the author logo moved to the small bottom-center branding slot.","flavors":["standard","lite","photos","legacy","vr","noLegal"],"spec":"S0997","status":"active"}
{"id":"general.filter-dialog-settings-search-and-other-single-line","area":"General","name":"Filter dialog, Settings search, and other single-line text fields stay reachable","description":"Filter dialog, Settings search, and other single-line text fields stay reachable above the keyboard on wide/landscape screens instead of disappearing behind Android's fullscreen keyboard mode","flavors":["standard"],"spec":"S1004","status":"active"}
{"id":"network-cloud.companion-auto-reachable-endpoint","area":"Network & Cloud","name":"Auto-reachable companion SFTP endpoint","description":"A companion SFTP resource imported from one QR or config connects over whichever address is reachable now - the home LAN when nearby, the internet port-forward address when away - and follows the phone between Wi-Fi and mobile networks without re-importing.","flavors":["standard"],"spec":"S1006","status":"active"}
{"id":"network-cloud.companion-lan-auto-discovery","area":"Network & Cloud","name":"Auto-discover companion server on the local network","description":"On the same Wi-Fi, the app finds the companion SFTP server by its advertised host key and connects over its live local address - so a shared folder opens even if the scanned QR carried no or an outdated LAN address, or the PC changed address on the network.","flavors":["standard"],"spec":"S1013","status":"active"}
{"id":"network-cloud.connection-failure-guidance","area":"Network & Cloud","name":"Guidance when a shared folder cannot be reached","description":"When a companion or network SFTP resource fails to connect, the app shows actionable guidance instead of a bare timeout - the sharing app's own access note when the config carried one, otherwise how to enable access (same Wi-Fi, port forwarding, or the companion setup).","flavors":["standard"],"spec":"S1014","status":"active"}
{"id":"network-cloud.companion-writable-shared-folder","area":"Network & Cloud","name":"Import a companion-shared folder as writable","description":"A folder shared from the Windows companion imports as writable (upload, rename, delete, move-into) when the sharer marks it writable, instead of always view-only; folders without the flag and shares from older companion versions stay read-only.","flavors":["standard"],"spec":"S1016","status":"active"}
{"id":"general.manually-added-http-stream-urls-with-embedded-basic","area":"General","name":"Manually-added HTTP stream URLs with embedded Basic-Auth credentials (http://use","description":"Manually-added HTTP stream URLs with embedded Basic-Auth credentials (http://user:pass@host/...) now authenticate correctly instead of failing as unreachable","flavors":["standard"],"spec":"S1015","status":"active"}
{"id":"ocr-translation.screenshot-into-crop-ocr-flow","area":"OCR & Translation","name":"Screenshot into OCR crop flow","description":"Screenshot OCR/translate (and the take-photo, app-launch panel, and OCR widget entry points) open the same crop + language-selection + OCR/translate screen as photos, with the screenshot as source; only the cropped frame is saved to the gallery.","flavors":["standard"],"spec":"S1042","status":"active"}
