Skip to content

Instantly share code, notes, and snippets.

@malerba118
Created October 16, 2026 20:09
Show Gist options
  • Select an option

  • Save malerba118/cc3d5dc341cff4e8b609bcbacf30aac6 to your computer and use it in GitHub Desktop.

Select an option

Save malerba118/cc3d5dc341cff4e8b609bcbacf30aac6 to your computer and use it in GitHub Desktop.

We've found about a dozen problems with Editframe so far, all recorded in docs/ENGINE.md. Six we fixed by patching Editframe itself, and the rest we worked around in our own code. The patches live in one file, patches/@editframe__elements@0.60.31.patch, and each has an end-to-end test.

Fixed by patching Editframe

  • Left-trimmed audio ignored seeks. Editframe assumed a clip starting at time 0 was untrimmed, so a left-trimmed sound played that many seconds ahead of every seek. The shortcut now applies only when the clip really starts at the beginning of its file.
  • Video froze after playing to the end of its file. Once its decoder ran out, a rewind or loop showed the last frame for good while the sound and clock carried on. AI clips hit this most, since a clip usually ends where its take does. The decoder now restarts on any seek back.
  • No playback speed at all. We added a rate to video and audio, with a time-stretch so sped-up or slowed-down sound keeps its pitch on both the monitor and export.
  • Fades were wrong in export. Export mixes sound in half-second chunks, so a volume change applied to whole chunks at a time. A patch lets export apply a fade sample by sample, and the monitor now glides between volume levels instead of stepping.
  • Exports lost the app's font. Font URLs were resolved against the wrong address. Fixed.
  • Video flashed blank when its canvas was resized to the size it already had. Fixed.

Worked around in our code

  • Overlapping title lines in export and the agent's contact sheets. This is the one from this week: Editframe's text capture drops any style left at its default normal, so line spacing broke. Titles now set an explicit line height of 1.15. It's the cause of the agent splitting captions into one clip per line.
  • Play waited for the media to load. A fresh import sat dead after Space for 2 to 22 seconds. The monitor now plays the original file until its preview is ready, and the playhead keeps moving after 500ms even if the picture hasn't caught up.
  • Playback froze while the importer transcoded a preview in the same tab. We stopped transcoding in the browser; the server makes previews now.
  • Clips outside a cut were never hidden, so we hide each one outside its time window ourselves.
  • A seek during play didn't take, so we pause and restart from the new time.
  • Export lost its sound after a hot reload in dev. Export now refuses with "Reload the page to export" when this happens. A production build is never affected.
  • The React wrappers have wrong types for two components, so we re-type them.

Still open

  • The audio element is over 1,000 lines with several playback paths that each handle timing their own way, so more bugs like the trimmed-audio one are likely.
  • Editframe is version 0.x with few users, so bugs reach us first, and every upgrade means re-checking all six patches.
  • Its way of drawing text and graphics is slow and a poor base for transitions and effects. Long exports in a browser tab also risk memory limits, throttling and the tab being closed.

That last point is why docs/ENGINE.md leans towards replacing Editframe with our own renderer before transitions, effects and keyframes are built. The roadmap has a test build to decide it: play one cut with our own renderer and compare it against Editframe on seek accuracy, scrubbing, time to first frame and export time. That hasn't been done yet. Until then, the rule is to keep Editframe confined to the playback/ and media/ folders and not build transitions or effects on it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment