Hey @magic-peach
Bug description
The application crashes upon page reload if a text overlay was added because the textOverlays array is incorrectly serialized into the URL as [object Object]. The useEffect that continuously syncs the recipe state to the browser URL iterates through the keys and calls String(currentVal). For the textOverlays array of objects, this pushes ?textOverlays=[object+Object] to the browser URL.
Steps to reproduce
Steps to reproduce the behavior:
- Go to the Reframe editor page
- Upload video (any format)
- Click on the 'Text Overlay' tool and add a new text overlay
- Notice the browser URL automatically updates to include
&textOverlays=%5Bobject+Object%5D
- Refresh the page
- See error (the application crashes and becomes unresponsive)
Expected behavior
The application should correctly restore the textOverlays state upon refresh, or it should completely exclude complex objects like textOverlays from the shallow URL auto-sync loop so they aren't corrupted into a string.
Actual behavior
The application reads the string "[object Object]" back into the state, overwriting the array. The app then crashes when attempting to render or export, as it tries to call .map() or .forEach() on a string.
Browser and OS info
- OS: macOS 14 / Windows 11
- Browser: Chrome / Firefox / Safari
- Version: Latest
I am an open-source contributor participating in GSSoC '26 and would love to work on this issue!
Hey @magic-peach
Bug description
The application crashes upon page reload if a text overlay was added because the
textOverlaysarray is incorrectly serialized into the URL as[object Object]. TheuseEffectthat continuously syncs therecipestate to the browser URL iterates through the keys and callsString(currentVal). For thetextOverlaysarray of objects, this pushes?textOverlays=[object+Object]to the browser URL.Steps to reproduce
Steps to reproduce the behavior:
&textOverlays=%5Bobject+Object%5DExpected behavior
The application should correctly restore the
textOverlaysstate upon refresh, or it should completely exclude complex objects liketextOverlaysfrom the shallow URL auto-sync loop so they aren't corrupted into a string.Actual behavior
The application reads the string
"[object Object]"back into the state, overwriting the array. The app then crashes when attempting to render or export, as it tries to call.map()or.forEach()on a string.Browser and OS info
I am an open-source contributor participating in GSSoC '26 and would love to work on this issue!