Skip to content

A project created on Windows opens empty on macOS: absolute media paths are never relinked #212

Description

@EtienneLescot

Summary

An .openscreen project authored on Windows opens on macOS with an empty preview, no waveform, and no working transcription. The media files can be present and perfectly valid — the project simply never points at them.

The media-links registry already holds the correct local path, so the relink mechanism has the right answer and is not applied on project open.

Root cause

The project stores absolute media paths:

"originalPath": "C:\\Users\\camil\\AppData\\Roaming\\openscreen\\recordings\\recording-1785170318238.mp4",
"sourcePath":   "C:\\Users\\camil\\AppData\\Roaming\\openscreen\\recordings\\recording-1785170318238-webcam.mp4"

On macOS, ffmpeg parses the leading C: as a URL scheme and fails with AVERROR_PROTOCOL_NOT_FOUND (0x4F5250F8, i.e. -1330794744). Confirmed directly against the LGPL ffmpeg the compositor links:

$ ffprobe 'C:\Users\camil\AppData\Roaming\openscreen\recordings\recording-1785170318238.mp4'
C:\Users\...\recording-1785170318238.mp4: Protocol not found

which is exactly what the app logs:

[live] render thread error: open_input a échoué (ret=-1330794744)
native bridge compositor.readFrame failed: Error: open_input a échoué (ret=-1330794744)
[renderer:warn] [compositor-view] readFrame failed: {}
[renderer:warn] useAudioPeaks: could not decode audio for waveform: {}

The renderer fails for the same reason, independently of the compositor: transcribeAsset builds toFileUrl(asset.originalPath) and useAudioPeaks fetches the same URL, so transcription and the waveform break too.

Why the existing relink does not save it

~/Library/Application Support/openscreen/recordings/media-links.registry.json already contains the correct macOS path for this exact media:

/Users/<user>/Downloads/recordings/recording-1785170318238.mp4

findMediaLinksByFingerprint / registerMediaLinks (electron/media/mediaLinksRegistry.ts) exist and the registry is populated, but nothing resolves assets[].originalPath through it when a project is opened. The data needed to fix the path at load time is present and unused.

Reproduce

  1. Record on Windows, save the project, copy the .openscreen plus its media to a Mac.
  2. Open the project on macOS.
  3. Preview stays on the empty state, the timeline clip has no waveform, Transcribe now cannot extract audio.

Adding the same media to the timeline by hand does not help: the clip inherits the same broken asset.

Impact

Every project authored on Windows is unusable on macOS (and the reverse case — a macOS /Users/... path opened on Windows — should fail the same way). Moving a project between machines on the same OS breaks identically whenever the media directory differs.

Suggested fix

Resolve each assets[].originalPath / cameraTrack.sourcePath through the media-links registry on project load, and fall back to a "locate this media" prompt when the fingerprint is unknown. Storing paths relative to the project file, or persisting the fingerprint alongside the path, would stop the situation arising in the first place.

Rewriting the two paths by hand is enough to make the project fully work on macOS — preview, webcam PiP, waveform and transcription all come back — which confirms nothing else is wrong with the project.

Environment

macOS 26.5 (Darwin 25.5), Apple M1, Electron 41.2.1, release/v1.8.0.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions