Skip to main content
IINA Plugin BookmarksIINA Plugin Bookmarks
Features

Data Management

Export and import bookmarks in JSON or CSV formats

Data Management

Use data management to back up, move, and restore bookmarks with JSON or CSV files.

Current implementation scope

The plugin currently supports JSON and CSV import/export only. XML export, batch export jobs, custom schema mapping, compression, and per-item import prompts are not available in the current release.

Export

Open Export

  • Sidebar: click Export
  • Manage Bookmarks window: click Export Bookmarks

Choose Format

Select JSON or CSV.

Save File

Confirm the browser download/save prompt from the export dialog.

JSON export format (actual)

JSON export writes a versioned object with bookmarks and collection data:

{
  "version": 2,
  "bookmarks": [
    {
      "id": "m2h5-1a-9k",
      "title": "Important scene",
      "timestamp": 3420.8,
      "filepath": "/Movies/Inception.mp4",
      "description": "Multi-layer explanation",
      "createdAt": "2024-01-10T14:22:33.456Z",
      "updatedAt": "2024-01-10T14:22:33.456Z",
      "tags": ["favorite", "study"]
    }
  ],
  "collections": [],
  "smartCollections": []
}

Notes:

  • Exports the full bookmark set from storage.
  • Includes collections and smartCollections in v2 exports.
  • Does not include a separate metadata block.

CSV export format (actual)

CSV export uses a fixed schema:

id,title,timestamp,filepath,description,createdAt,updatedAt,tags
"m2h5-1a-9k","Important scene","3420.8","/Movies/Inception.mp4","Multi-layer explanation","2024-01-10T14:22:33.456Z","2024-01-10T14:22:33.456Z","favorite;study"

Notes:

  • Header row is always included.
  • Delimiter is always a comma.
  • Tags are serialized as semicolon-separated values.
  • Formula-dangerous leading characters (=, +, -, @, tab, carriage return) are prefixed with ' for CSV safety.

About export dialog options

The current backend only applies the selected format (json/csv). Options such as field selection, delimiter overrides, metadata toggle, and export filters are not currently applied to export output.

Import

Open Import

  • Sidebar: click Import
  • Manage Bookmarks window: click Import Bookmarks

Select File

Choose a .json or .csv file (10 bytes to 50 MB).

Review Options and Import

Configure duplicate handling and ID preservation, then click Import Bookmarks.

Supported JSON input

The importer accepts:

  • v1: a plain bookmark array
  • v2: an object with bookmarks (plus optional collections and smartCollections)

Imported text fields are sanitized (HTML tags stripped) before storage.

Supported CSV input

CSV import currently expects:

  • Comma-delimited rows
  • A header row with required columns: id, title, filepath
  • Optional columns: timestamp, description, createdAt, updatedAt, tags

Parsing details:

  • tags uses semicolon-separated values (tag1;tag2)
  • timestamp is parsed from numeric text (e.g. 3420.8)
  • Values like 3420.8 (00:57:00) are accepted (numeric prefix is used)

Automatic CSV field mapping, alternate delimiters, and encoding selection are not currently implemented.

Option behavior (actual)

  • Duplicate Handling is ID-based:
    • skip: keep existing bookmark, skip imported duplicate
    • replace: replace existing bookmark data at that ID
    • merge: keep existing bookmark and merge tags only
  • Preserve original bookmark IDs:
    • on: keeps imported IDs (unsafe IDs are skipped)
    • off: generates new IDs

Validation still runs in the backend even if the UI checkbox is toggled. The checkbox currently does not change backend validation behavior.

Limits and Safeguards

  • Import processing is capped at 5,000 bookmarks per operation.
  • Invalid rows are skipped during validation.
  • Timestamps must be finite and within supported range.
  • Unsafe IDs are rejected when ID preservation is enabled.

Troubleshooting

IssueWhat to check
Import file rejectedConfirm extension is .json or .csv and file size is between 10 bytes and 50 MB
CSV import failsEnsure required columns id,title,filepath exist and delimiter is comma
Duplicates not merged as expectedmerge mode only merges tag arrays; it does not merge title/description/timestamp
Export options seem ignoredCurrent backend export only uses format (json or csv)