Skip to main content
MasterSelects stores projects as ordinary folders on your local disk. There are no cloud accounts, no proprietary databases, and no storage limits beyond your available disk space.

Browser support

The storage backend is selected automatically based on what your browser supports:
BrowserBackendNotes
Chrome / Edge / ChromiumFile System Access APINative folder picker, handles stored in IndexedDB
FirefoxNative HelperRequires the Native Helper app to be running
Safari / othersNot supportedShows an unsupported browser warning
Firefox does not implement the File System Access API. Project saving on Firefox requires the Native Helper backend to be running before you open or create a project. If the Native Helper is not connected, the welcome screen displays an install prompt instead of the project picker.

Chrome: File System Access API

Chrome uses the browser’s built-in File System Access API. When you create or open a project, the browser shows a native folder picker. The resulting FileSystemDirectoryHandle is stored in IndexedDB so the project reopens automatically on the next visit without requiring you to pick the folder again. If the browser loses permission to the folder (for example after a restart), MasterSelects shows a Grant Access prompt before loading the project.

Firefox: Native Helper backend

The Native Helper provides an equivalent file system layer over WebSocket and HTTP. Folder selection uses the OS native picker via the helper. The last opened project path is stored in localStorage under the key ms-native-last-project-path and restored automatically on next launch.

Project folder structure

When you create a project, MasterSelects creates a folder with this layout:
MyProject/
├── project.json           # Main project file
├── .keys.enc              # Encrypted API keys
├── Raw/                   # Auto-copied media files
│   ├── Interview_01.mp4
│   └── Music.wav
├── Downloads/             # Videos downloaded via Native Helper
│   └── YT/
├── Backups/               # Timestamped auto-backups
│   └── project_2026-01-11_14-00-00.json
├── Proxy/                 # Generated proxy files
├── Cache/
│   ├── thumbnails/        # Media thumbnails (WebP)
│   └── waveforms/         # Waveform data
├── Analysis/              # Per-clip analysis cache
├── Transcripts/           # Transcript data
└── Renders/               # Exported renders

Raw media auto-copy

When the Copy media to project setting is enabled (the default), imported files are copied to Raw/ automatically. The original files are not modified. If a file with the same name and size already exists in Raw/, the copy is reused instead of duplicating it. Because raw media lives inside the project folder, the entire project — timeline, media, proxies, and cache — can be moved to another machine by copying the folder.

Autosave

Autosave is enabled by default with a 5-minute interval. You can adjust the interval or disable it under File → Autosave in the menu bar. The setting is stored per-browser in localStorage.
There are two layers of automatic saving:
  1. Configurable autosave — runs at your chosen interval (1, 2, 5, or 10 minutes). Before saving, it creates a backup of the current project.json. Managed from File → Autosave.
  2. Internal dirty-check — a 30-second interval that saves if the project has unsaved changes. Runs silently in the background whenever a project is open.
The project is marked dirty automatically when media files, compositions, clips, tracks, or the panel layout change. Manual save: press Ctrl+S or use File → Save. A yellow “Saved” toast appears in the center of the screen.

Backups

Before each configurable autosave, the current project.json is copied to Backups/ with a timestamp:
Backups/
├── project_2026-01-11_14-00-00.json
├── project_2026-01-11_14-05-00.json
└── project_2026-01-11_14-10-00.json
The last 20 backups are kept. Older backups are deleted automatically, sorted by file modification time. Restoring from a backup:
  1. Navigate to ProjectFolder/Backups/.
  2. Find the backup by timestamp.
  3. Rename or move the current project.json aside.
  4. Copy the backup file to project.json.
  5. Reopen the project.

Smart relinking

If media files are missing when a project is opened, MasterSelects attempts to relink them automatically:
  1. Checks the in-memory handle cache.
  2. Falls back to stored handles in IndexedDB.
  3. Checks read permission on restored handles.
  4. Scans the Raw/ folder for an exact filename match (case-insensitive).
  5. Checks remaining IndexedDB handles for any files not found in Raw/.
If a file is found through any of these steps, it is restored without user input. Visual indicators in the Media panel:
IndicatorMeaning
Yellow badgeFile needs a permission refresh (click Reload All)
Red badgeFile is missing and could not be relinked
NormalFile is accessible
Click Reload All in the Media panel toolbar after a browser restart to re-request access to stored file handles.

What gets saved

project.json stores the complete project state:
  • All compositions: tracks, clips, trim points, transforms, keyframes, effects, masks, audio settings
  • Media metadata: file paths, duration, dimensions, codec, proxy status
  • Panel layout and view toggles (waveforms, thumbnails, proxy, transcript markers)
  • Playhead position, zoom, and in/out points per composition
  • Slot assignments and folder organization
API keys are saved separately in .keys.enc as an AES-256-GCM encrypted blob. See Security for details.

Build docs developers (and LLMs) love