feat: add a clip/edit step to the recording flow - #262
Open
anscg wants to merge 6 commits into
Open
Conversation
Bumps the vendored Lookout SDK to 1e4fdd7, which ships the timelapse clip
editor and the server-side clips/edit-hold support, and wires it into Lapse:
- Enable clips on session creation (`clips: true`), so the session is
editable regardless of the Lookout server's default. Kept explicit rather
than relying on the server default so it works against deployments that
still default clips off.
- Request the edit hold on stop (`actions.stop({ edit: true })`) so the
session stays open for editing instead of compiling straight to complete.
- After recording, present the TimelapseEditor in a Lapse-styled modal
before handing off to the publish page; dismissing or saving continues the
existing publish flow.
- Recolor the SDK's controls and the editor to Lapse's red via the
provider's `accentColor`.
If the browser closes (or the page refreshes) while the edit hold is live, the publish page previously sat on the compile spinner until the hold lapsed and the session auto-published uncut. Now it probes the session's edit hold via the device's stored Lookout token and reopens the editor while editing is still possible. The editor modal is extracted into a shared EditorModal used by both the recorder and the publish page; since the editor is the only SDK-rendered surface in Lapse, the accent color moves there too (setAccentColor on mount) instead of living on LookoutProvider.
anscg
marked this pull request as draft
August 9, 2026 21:23
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
anscg
marked this pull request as ready for review
August 9, 2026 22:46
Lamparter
self-requested a review
August 10, 2026 10:18
The Lookout bump adds `clockOffset.test.ts` to `@lookout/shared`, whose build is a plain `tsc` over all of `src`. Nothing in the Lapse workspace provides `vitest`, so the test file's import fails to resolve and the root build dies on TS2307 before anything else compiles. Add `vitest` alongside the `tsup` that's already hoisted for the vendored React client, so the vendored packages' tooling resolves from the workspace root the same way it does in the Lookout repo. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Desktop is the default recording mode, and the tab that launched it had no way of knowing the recording ever finished: the SDK status effect that navigates to publish only exists while Lapse itself is capturing, and the site-wide draft check in `_app.tsx` deliberately skips `/timelapse/create`. So the one page a desktop recorder is left on is the one page that can't move them along, and getting to publish meant wandering back into Lapse and being redirected from somewhere else. Lookout has had a redirect hook for this since `3bbf3ca` - the desktop app opens it in the user's default browser the moment the session flips to `complete`, including after publishing from its own editor. We just never set it. Now session creation points it at a handoff page of our own. The hook is immutable once a session exists, which shapes two things: the draft's ID is minted before the session so the URL can contain it, and the hook targets `/timelapse/handoff/:draftId` rather than the publish page directly, so the URL every past session carries stays valid if the flow behind it moves. That page also can't assume a signed-in user, since it opens in whichever browser is the OS default. Rather than a second sign-in, it points them back to the browser they recorded from - where opening Lapse at all lands them on publish already - and keeps sign-in as a fallback. Alongside it, two things the desktop flow was missing: - The `lookout://` deep link is now shown on the "Opening Lookout" screen, copyable. Lookout has a paste-a-link box for when the handoff doesn't fire, and this is the only place that link exists to be copied from. - Lapse no longer opens its own cut editor for a desktop recording. The edit hold on such a session belongs to the desktop app's editor window, which is likely open on it right now; a second editor here had both surfaces renewing the same lease and racing to write cuts. The status poll now reports whether Lookout recorded the session from the desktop (via its `clientInfo`), and runs before the edit-hold probe so the probe knows to stay out of it. Deploying this needs `WEB_BASE_URL` set - it's where the hook points, and session creation throws without it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Author
|
meow should be ready |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds a clip/edit step to the recording flow. After you stop recording, the Lookout timelapse editor opens in a Lapse-styled modal so you can trim out parts you don't want before publishing.
How
Bumps the vendored Lookout submodule to
80eb3c6, which ships theTimelapseEditorcomponent and the server-side clips / edit-hold support, then wires it into Lapse:clips: trueinlookout.ts→createSession). Kept explicit rather than relying on the SDK's new default-on behavior, so the editor works even against Lookout deployments that still default clips off.actions.stop({ edit: true }). Without this the server compiles straight tocompleteand the session comes backnot_ready("isn't available for editing").TimelapseEditorrenders in the existing LapseModal; saving or dismissing it continues to the current publish page. No token to edit against falls back to the old straight-to-publish path.EditorModal).#ec3750) via the provider'saccentColor.Notes
@number-flow/react,@videojs/react, etc.), hence thepnpm-lock.yamlchange.distis a build artifact regenerated bypnpm dev, so it's not committed.Testing
tsc --noEmitpass.@lookout/reactbuilds (JS + DTS) with the editor andaccentColorpresent.