Skip to content
Scalpels home

Scalpels is officially launching on October 31, 2026. Special early adopter pricing is available now.

← All documentation

Documentation

Reel

Sessions and replay

Updated

Each time Reel.start() succeeds, the visitor's browser gets a new recording session. The Sessions screen lists every session across your applications, newest first.

When a session becomes playable

A recording is not playable as soon as the visitor stops. Reel closes and assembles sessions on the scheduler, in stages:

Status What it means How long
Recording Chunks are arriving. The session appears in Sessions almost immediately. While the visitor interacts
Closing No chunk has arrived for 15 minutes, so Reel closed the session and waits for late uploads. 2 more minutes
Compacting A queued job assembles the chunks into one verified replay object, then deletes the individual chunks. Seconds to minutes
Ready Playable. Until it expires or is deleted

Budget roughly 17 minutes plus compaction between the last activity and a replay you can open. Closing and Compacting are normal progress, not failures. Two other statuses mark the end of a session: Deleting and Deleted. A session that cannot be compacted ends as Failed.

Finding a session

Open Sessions, or open it for one application from that application's page. You can filter by:

  • application, session ID, application user ID, and release or deploy ID
  • sanitised path (matches the first or latest path in the session)
  • status and marker type
  • protected or unprotected, and watched or unwatched by you
  • start and end time ranges, and minimum and maximum duration in seconds

Filters are kept in the page URL, so you can share a filtered list with a colleague. Searching reads only session metadata; no replay data is downloaded until you load a replay.

Inspecting a session

Select Inspect on a session to open it. The page shows:

  • Recording metadata: start, end, duration, gap count, first and latest path, application user ID and release ID.
  • Timeline: each status change with its reason, and each marker. Selecting a marker opens the replay at that moment.
  • Retention: when the session is scheduled for deletion, and the protect, unprotect and delete controls. See Retention and deletion.
  • A Completeness not confirmed notice when the recorder did not send an explicit closing sequence. The replay may still contain everything that was captured.
  • A Missing replay data detected notice when part of the session cannot be reconstructed.

The player

Select Load replay to download and play the session. The player has play and pause, speeds of 0.5x, 1x, 2x and 4x, a Skip inactivity option and a position slider. Only sessions with status Ready can be played.

The player runs in a sandboxed frame and never loads anything from the network. External images, media, fonts, stylesheets and iframe content are shown as placeholders, so a replay looks plainer than the live page. Each replay you load is recorded as a view, which is what the Watched by me filter uses.

Error markers

When a same-origin request made by the recorded page returns a 5xx, the recorder adds a marker with the method, path (without its query string) and status. A marker of type server_error means your application's Reel client tied the failing request to this session; error means the page saw a 5xx response without that binding. Filter Marker type to find sessions where something broke.

Linking to sessions from your app

The client's Reel facade builds links into your Reel deployment:

  • Reel::sessionsUrlFor($user) and Reel::sessionsUrlForId($id) return the session list for that application, filtered to one application user ID.
  • Reel::sessionUrl($sessionId) returns the page for one session.

These links are filters, not credentials. Anyone who opens one still has to sign in to Reel. They can end up in browser history and logs, so do not treat them as secret.

With REEL_CONTEXT_EXPORT set, the client also puts the session ID, and optionally this link, into Laravel Context for requests tied to a recording, so tools that read Context can carry it. See Configuration.