Skip to content

Save and open projects as a single portable .hyperaudio file #403

Description

@scarsellifi

Summary

Add Save project / Open project as a portable .hyperaudio file.

A .hyperaudio file is a renamed ZIP containing:

  • hyperaudio.json
  • transcript.html
  • optional transcript.original.json
  • captions.vtt
  • media/<original-file>

Principles

  • Save, not export: original media is preserved byte-for-byte.
  • Non-destructive editing: redactions and gap removal travel as data.
  • Captions may intentionally diverge from transcript.
  • One open project at a time in OPFS; filesystem is the project library.
  • No API keys, credentials, or app preferences in the file.

Implementation

Add js/hyperaudio-save.js:
format → container → OPFS → editor bridge → UI.

Use JSZip for v1, whitelist-read on import, and OPFS for autosave.

Acceptance criteria

  • Save downloads a .hyperaudio file.
  • Open restores media, transcript, captions, options.
  • Manual captions are not regenerated.
  • Redacted words round-trip.
  • Local autosave resumes the current project.
  • Import treats the file as untrusted input.
  • Remote (URL) media is embedded in the save whenever the server allows the
    download (CORS — Enable CORS on lab.hyperaud.io so the default media supports export and URL transcription #370); otherwise the project is saved as a declared
    media.kind: "link", and stays fully editable.
  • When a project's media is unavailable on open (unreachable link URL, or a
    missing media entry), the editor offers to re-attach a local copy — the
    next save is self-contained again.

The full v1.1 format specification and a worked example are in the first
comment below.

Related

Supersedes the format sketched in #362 (the File System Access API remains a
possible future enhancement on Chromium); covers #378 via the provenance
block; with "the filesystem is the library", #363 reduces to saving the file
into a synced folder; replaces the localStorage flows of #169 / #182 / #239.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestuxImproves the user experience

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions