with open("frontend/src/App.tsx", "r", encoding="utf-8") as f: content = f.read() old_add_marker = """ const handleAddMarker = () => { if (!duration) return; const snapped = snapToFrame(cursorTime); setMarkers((prev) => normalizeMarkers([...prev, snapped])); };""" new_add_marker = """ const handleAddMarker = async () => { if (!video || !duration) return; const snapped = snapToFrame(cursorTime); const nextMarkers = normalizeMarkers([...markers, snapped]); setMarkers(nextMarkers); try { await replaceMarkers(video.id, nextMarkers); setPendingSegmentEditPersist(true); } catch (err) { setError((err as Error).message); } };""" content = content.replace(old_add_marker, new_add_marker) # Remove "Save markers" button old_button = """ """ content = content.replace(old_button, "") with open("frontend/src/App.tsx", "w", encoding="utf-8") as f: f.write(content) print("App.tsx add marker autosave patched")