MyGo 云音乐
用 Go 与 MyGo 写成的第三方网易云音乐桌面客户端。原生界面,没有 WebView;边下边播,无损与 Hi-Res,逐字歌词与「律动」,刘海播放器。
Translation pending
Turn GPX tracks into cinematic 16:9 map videos with photos, clips and MP4 export — right in the browser
MediaHTMLGitHub @314RCHOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Web app (a single file, no build step) that turns a GPX track into a 16:9
video animation over satellite imagery, with MP4 export straight from the
browser.
Online: (GitHub Pages, nothing to
install; your tracks, photos and videos stay on your computer, and nothing is
sent anywhere except the track for OpenStreetMap road detection, on request).
then open.
After updating index.html, reload the page bypassing the cache
(Cmd+Shift+R): the small Python server does not stop the browser from caching it.Read the full README ↗Web app (a single file, no build step) that turns a GPX track into a 16:9 video animation over satellite imagery, with MP4 export straight from the browser.
Online: https://314rch.github.io/gpx-cinematic/ (GitHub Pages, nothing to install; your tracks, photos and videos stay on your computer, and nothing is sent anywhere except the track for OpenStreetMap road detection, on request).
Locally:
cd gpx2mp4 && python3 -m http.server 5178
then open http://localhost:5178/index.html.
After updating index.html, reload the page bypassing the cache
(Cmd+Shift+R): the small Python server does not stop the browser from caching it.
A mini server is required: opening index.html by double-clicking it may lead
the browser to block network requests (map tiles).
Tested on Chrome / Edge / Brave and Safari 17+ (MP4 export uses WebCodecs).
.gpx file (or click the drop zone).Space (or ▶) to preview, the timeline to move through time.| Phase | What happens |
|---|---|
| Intro | Overview of the track, north up, then zoom in to the start point |
| Route | Tilted camera following the current point and looking ahead, persistent track |
| Outro | Zoom out to the north-up overview + end card: title, end subtitle (free text, specific to each track, nothing if empty), then distance, max altitude, duration (if the GPX is timestamped) |
You can load several GPX files at once: multiple selection in the file picker, or drag and drop several files or a whole folder (subfolders included) onto the drop zone. The tracks appear in a list; clicking one makes it active.
Theme: the button at the top right of the panel switches the interface between ◐ Auto (follows the system setting), ☀ Light and ☾ Dark. The choice is remembered by the browser. The video preview and the clip editor stay dark in both themes, since that is what gets exported.
Media are organized by track. Select a track, then 📁 Active track folder (Track photos & videos section): its contents are attached to that track only. The track list shows what each one contains (📷 photos, 🎬 videos); the Map & photos tab and the video only use the active track’s media. A simple layout: one subfolder per day or per GPX.
eXIf chunk in PNGs (iPhone exports).com.apple.quicktime.location.ISO6709 or ©xyz, date with time zone),
reading only the file header. In the video, the clip is played in full
(or as edited in the ✂ Clips tab) while the marker is stopped, with no
duration limit. The caption shows playback progress
(“▶ 0:04 / 0:12”), with a progress bar at the bottom of the clip. On
export, each frame is synced exactly to the matching moment in the clip.
Audio is not included.Select the track, then 📁 Active track folder. When a project is opened, folders are found again automatically (see “Project”).
“Unreadable” video: hover over the label to see the exact reason. A transient playback error (common with iPhone HDR videos) is retried once automatically. If the browser really cannot decode it, convert it to H.264 with the macOS tool, then copy its location and date back:
avconvert --preset Preset1920x1080 --source IMG.mov --output IMG.mp4
exiftool -overwrite_original -TagsFromFile IMG.mov -Keys:GPSCoordinates -Keys:CreationDate IMG.mp4
The strip in the Map & photos tab has three filters: All, Geotagged, Unplaced (with counts).
.json project, track by track (key: file name, size and
date), and come back when you reopen the same folder. An edited or
re-exported file (different date) is matched by its name. A reopened
project flags with ⚠ the tracks whose folder needs reloading. The files
themselves are never modified.🕒 Suggest positions from time computes a location for photos without GPS, without applying anything: they appear dotted, and each suggestion can be accepted (✓) or rejected (✗), or all at once.
Order inside a stop: media shown at the same place form a group (“2 / 4” in the caption). In the media panel, each of them carries its rank with ▲ ▼ to move it earlier or later in the group; the panel lists them in that same order. Without a chosen order, a group follows distance, then date, then file name. The order is saved with the media (browser and project).
In both cases, each selected photo has a sphere on the map at its location and a dot on the minimap.
Marker stop: when reaching a photo or video, the marker brakes firmly (≈ 0.8 s) and stops in place. It only moves on once the display is over: per-photo duration elapsed, or video played to the end (or its edit), including the photo’s fly-out and return. It then speeds up again smoothly. Media very close to each other (less than 150 m, or less than one second of travel apart) form a group: a single stop, at the first item, during which they follow one another. The video gets longer accordingly. Untick “Stop the marker during photos and videos” to have media shown without stopping, while the marker keeps moving.
On the left, the active track’s videos (edit duration, number of segments, km or status: unplaced, excluded, off track). On the right, the editor’s player (with sound, which the exported video does not have; 🔇/🔊) and a timeline illustrated with frames from the clip.
A clip can keep several segments, played in order:
Below the timeline, the list of segments and, between two segments, the transition: hard cut, crossfade, slide (the next image pushes the previous one out), fade to black, fade to white, blur. Their duration is set in “Transitions” (0.8 s by default). ▶ Play edit (M) plays the result as it will appear in the video. Space = play/pause the file, ← → = ±1 s, ⇧← ⇧→ = ±1 frame.
In the video, the marker stays stopped for the whole edit. Two players take turns on the same file: while one plays a segment, the other is already waiting, cued to the next one, which gives clean cuts and makes crossfades possible.
Your own words for the stretches without photos, drawn like a travel journal: handwritten ink (Caveat) on cream paper with torn edges and bits of tape. Two styles, chosen per note:
Section Notes of the panel: put the playhead where the note belongs, then + At playhead; type an optional title and the text (line breaks are kept), and pick the style. The reading time comes from the length of the text (about 3 words per second for a caption, a little slower for a card); type a duration to override it. ▸ jumps to the note.
Notes are tied to a km of the track, so they stay in place when the route duration or the photos change. A caption that would fall on a photo stop or a story card is moved just after it, and captions never overlap each other. ⇥ Next gap moves the playhead to the next stretch of at least 12 s with no photo, clip or note on screen — the stretches worth filling. In the 🎵 Soundtrack tab, the video lane shows story cards (✎), captions (cream strips) and those gaps (hatched).
Notes are saved in the project and follow the track if its GPX is updated.
Each track has its own music: a folder of audio files (mp3, m4a, aac, wav,
ogg, opus, flac), for example music/20260816/ next to photos/20260816/.
📁 Music folder picks it; when a project is opened, it is found again
automatically (the folder recorded in the project, otherwise a folder named
after the GPX’s name or date that contains audio files — a folder under
music/ or audio/ wins). The track list shows 🎵 with the number of songs.
The tab keeps the video preview on top and shows below it:
Overall settings, per track: Volume (master), Crossfade (overlap between consecutive songs, faded out / in, 3 s by default), End fade-out (the music fades out over the last seconds of the video, 3 s by default) and Loop (the playlist starts again if it is shorter than the video). A line under the playlist says whether the music covers the whole video.
The songs start with the video (intro included). Fades use equal-power curves, so a crossfade keeps a steady loudness. In the preview, the soundtrack plays with the picture (🔊 / 🔇 in the transport bar mutes it without affecting the export); playback is clocked on the audio, so picture and sound stay in sync, and both wait together if tiles are still loading. Only the songs the video actually reaches are decoded.
The music is mixed into the exported MP4 as a 48 kHz stereo AAC track. The order, volumes, fades and settings are saved in the project; the audio files stay in their folder.
Recorded comments (mp3, m4a, wav…) sit in their own folder per track, for
example audio/20260816/ — 🎙 Voice folder in the 🎵 Soundtrack tab, or
found automatically when the project is opened (a folder named after the
track under audio/, voice/, voix/, comments/, narration/; music is
never taken from those folders, and comments never from music/).
Comments play in the preview and are mixed into the exported MP4 with the music. Their placement, volumes and settings are saved in the project and follow the track if its GPX is updated. The track list shows 🎙 with the number of comments.
One project = one folder, for example:
replay/
├── full.gpxcine.json (anywhere in the folder)
├── gpx/ the original .gpx files (authoritative if they change)
├── photos/
│ ├── 20260815/ photos and videos from 15 August
│ └── 20260816/
├── music/
│ ├── 20260815/ the soundtrack of 15 August (mp3, m4a, wav…)
│ └── 20260816/
└── audio/
├── 20260815/ recorded voice comments of 15 August
└── 20260816/
.gpxcine.json file is opened, then each track’s photos/videos are
reloaded automatically: from the folder recorded in the project,
otherwise from the subfolder named after the GPX’s name or date
(20260816 ↔ 20260816.gpx). A folder with no project but containing
GPX files becomes a new project. You can also drag and drop the folder
onto it./Users/…/replay) on its own, but it remembers the last project folder
opened or saved. 📂 Open then starts in that folder, and a
↻ Reopen “replay” button reopens it in one click, without going through
the picker (Chrome just asks you to confirm access; choosing “Allow on
every visit” even avoids that confirmation)..gpx files in the project folder
(e.g. replay/gpx/) are authoritative. On opening, a track whose file has
changed is updated: waypoints are moved onto the new track based on their
location, start and finish go to the new ends, titles and settings are kept
(subtitle and duration are recomputed if they were still at their default
value). A new GPX in the folder is added to the project. Then save to keep
the update..json
file is opened, saving is done by download, and media folders must be
chosen again (⚠ in the track list).<wpt> at one end, its name is used.
Clearing a field removes the marker.<wpt> tags are imported and snapped to the track.When the marker passes a waypoint, its name is shown in a banner and its marker lights up.
A waypoint’s color swatch sets the track color from that waypoint onwards, up to the next waypoint that defines another one. A faded swatch means “inherited color”: the previous section continues. The first section takes the general color (Overlay section), and the finish has no swatch since no section starts from it. ↺ reverts to the inherited color.
The upcoming track (dotted) already takes the color of its sections. The
current section’s color also applies to the position marker, the displayed
distance, the elevation profile fill, the true-heading triangle on the
compass rose and the minimap. It is saved
in the .json project.
Below the minimap, a label shows the current road: the number on a sign (color by prefix: A and N red, D yellow, E green, M royal blue, other numbers blue), followed by the name. When the road changes, the old label fades out as the new one appears. Current road checkbox in Overlay.
Roads section of the panel:
1 · Hringvegur or D902 · Col du Galibier: what comes before the
“·” is shown on the sign if it looks like a road number; otherwise the
name is shown alone, with a road icon. An empty name shows nothing on that
section (dirt track, off-road…);Roads are specific to each track and saved in the project. If the GPX is updated, each road start is moved based on its location.
During the journey: distance, altitude, max altitude reached so far (and speed if the GPX is timestamped). On the end card: distance, max altitude, duration.
Elevation gain is no longer shown by default: on a planned route (gpx.studio, Komoot…), altitudes come from a terrain model that “sees” the cliffs and embankments along the road, and the elevation gain is heavily overestimated (on a 357 km drive through the Westfjords: from 3,200 to 4,800 m depending on smoothing). The Show elevation gain checkbox (Overlay) brings it back, for a track recorded with an altimeter.
A marine compass in the top-left corner shows the map orientation: the dial rotates with it (the red N always points to true north), the fixed white lubber line at the top and the heading shown below it (“NE · 042°”) give the camera direction. A second triangle, in the current section’s color, shows the true heading (direction of travel along the track): the gap between the two triangles shows how much the smoothed camera differs from the road. It is part of the exported image; Compass rose checkbox in Overlay to hide it.
To the right of the compass rose, an always north-up thumbnail shows the active track’s extent enlarged by 20%: basemap, full track, route covered so far in each section’s color, current position and a cone showing the camera direction. Other loaded tracks appear in gray if they pass through the area. It appears when the title fades out and disappears for the final view. Minimap checkbox in Overlay.
Active track width (1 to 2.5×, default 1.5×): the followed track is drawn thicker than inactive tracks, which stay thin and gray.
Follow zoom / Pitch: camera height and angle.
Marker position on screen: places the current point lower or higher, hence more or less visibility “ahead”.
Look-ahead: distance ahead used to compute the heading.
Heading smoothing (m): geometric smoothing of the track direction.
Camera smoothness (s): rotation inertia, applied in the animation’s time domain (zero-phase filter, so the camera does not lag behind the path).
Max rotation (°/s): angular speed cap. This is the decisive setting on mountain switchbacks: on the test track, the raw heading of the track reaches 88 °/s while the camera stays at 25 °/s.
Marker freedom on screen (%): lets the marker drift from the center (up to this fraction of the frame width). The camera then follows the average line of the route instead of every bend: in a series of hairpins, the map no longer sweeps from one edge to the other. 0% = marker always centered. On the test track, at 15% (default), camera acceleration is divided by 8.5 on average and by 19 at peak.
These settings depend on the route duration: the heading is recomputed on every change, and stays fully deterministic so that the frame-by-frame export is identical to the preview.
Personal use: check these services’ terms of use for commercial or heavy use.
index.html — the whole app (interface, animation engine, export)samples/photos/ — test photos geotagged along the tracks (including
a group of 3 at Plan Lachat, one off track and one without GPS)samples/ — adjoining test tracks: Télégraphe → Valloire, Valloire →
Galibier, Galibier → Lautaret (to try loading a folder)*.gpxcine.json — saved projects (track + settings + waypoints)