Skip to content
Back to skills

Replay Recording

ASecurity

Replays a CARLA .log recorded by the recorder — the whole run or a time window, at any speed, following a chosen actor, optionally regenerating sensors and restoring weather. Use when the user asks to "replay the recording", "play back the run", "watch it again in slow motion / at 2x", "follow vehicle N during replay", or "replay onto a different map".

  • 14,461 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
ai-agentspythongoshellbashapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned October 6, 2026

npx -y skills add carla-simulator/carla --skill replay-recording --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Replay Recording?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Replay Recording
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/carla-simulator-replay-recording-carla/badge)](https://www.skillsdirectory.com/skills/carla-simulator-replay-recording-carla)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: replay-recording
description: Replays a CARLA .log recorded by the recorder — the whole run or a time window, at any speed, following a chosen actor, optionally regenerating sensors and restoring weather. Use when the user asks to "replay the recording", "play back the run", "watch it again in slow motion / at 2x", "follow vehicle N during replay", or "replay onto a different map".
license: MIT
compatibility: Any OS with the CARLA PythonAPI installed for the active interpreter and a reachable, already-running CARLA server. Needs a .log on the server (from the record-simulation skill). Does NOT need UE4_ROOT. Tested against CARLA 0.9.16.
metadata:
  group: python-api
  requires: record-simulation
  prerequisites: scripts/check_env.sh
  reference: references/replay.md
---

# Replay a CARLA recording

> **Paths.** `scripts/…` and `references/…` below are relative to the
> directory holding this SKILL.md. Your working directory is the user's
> project, not that directory, so prefix them with its absolute path or the
> command is not found.

Play back a `.log` produced by [`record-simulation`](../record-simulation/SKILL.md).
The server re-creates the recorded scene; `play` prints its summary. Confirm the
replay by watching the followed actor or by inspecting the same log with
[`query-recording`](../query-recording/SKILL.md).

## The scene, the holders and the clock

`play` puts the world into the state a replay needs, in this order:

1. **Stops local spawn holders.** `spawn-vehicles` / `spawn-walkers` / a held
   `create-sensor` stay resident by design, and each removes its own actors and
   restores the clock in a `finally`, so they are sent SIGINT rather than
   killed. `--keep-scene` skips all of this.
2. **Puts the world back to asynchronous.** The replayer runs **server-side**,
   so no client has to tick anything. If a client still owned a synchronous
   clock the replay would advance only as fast as that client ticked; worse,
   with the holder gone and the world left synchronous, nothing ticks at all
   and the replay appears to do nothing.
3. **Clears the scene.** A replay RECREATES the actors in the log, so it adds
   to the world rather than replacing it: replaying a 50-car log into a live
   50-car scene gives 100 vehicles driving through each other. Traffic signs
   and the spectator survive — they belong to the map, not the scene.

The corollary for recording: **the recorder is free to be the synchronous
client.** Capturing under a fixed timestep is what makes a log reproducible,
and it costs the replay nothing, because playback is driven by the server.

Holder detection reads `/proc` argv rather than matching a command-line
substring — a shell whose own command line merely quotes
`vehicles.py spawn --hold` matches a substring search and gets signalled, which
kills the caller by accident.

## Instructions

```
Progress:
- [ ] Step 1: Check prerequisites (bash scripts/check_env.sh), clear FAILs
- [ ] Step 2: (optional) inspect the log first (query-recording) to pick times/ids
- [ ] Step 3: Play — whole log, or a window; set speed / follow as asked
- [ ] Step 4: Stop when done (decide keep-actors)
```

Commands need `CARLA_HOST`/`CARLA_PORT` from `scripts/env.sh`.

### Step 1: Check prerequisites

```bash
bash scripts/check_env.sh
```

### Step 3: Play

```bash
source scripts/env.sh

# whole log at real time
python3 scripts/replay.py play --file /tmp/run.log

# a 10s window from t=5s, following actor 87, at 2x
python3 scripts/replay.py play --file /tmp/run.log --start 5 --duration 10 --follow 87 --time-factor 2.0

# regenerate sensors and restore the recorded weather
python3 scripts/replay.py play --file /tmp/run.log --replay-sensors --replay-weather

# change speed of the running replay, e.g. slow motion
python3 scripts/replay.py speed --factor 0.25
```

`--start` is seconds from the beginning (negative counts from the end),
`--duration 0` plays to the end, `--follow 0` means don't move the spectator.

### Step 4: Stop

```bash
python3 scripts/replay.py stop                 # remove replayed actors
python3 scripts/replay.py stop --keep-actors   # leave them in the world
```

## Examples

**Example 1: watch it back**

User says: "replay that run"

`play --file /tmp/run.log`. Server summary prints; watch in the CARLA window.

**Example 2: slow-mo on one car**

User says: "replay following car 87 at quarter speed"

`play --file /tmp/run.log --follow 87 --time-factor 0.25`.

**Example 3: regenerate camera data from a recording**

User says: "I need camera frames from that recording"

Re-attach the sensors you want (create-sensor / read-sensor skills), then
`play --file /tmp/run.log --replay-sensors`. The recorder stored no images; they
are regenerated now.

## Troubleshooting

**Problem: `play` prints a file-not-found / parse error**
Cause: the `.log` is not on the server at that path.
Solution: use the server-side path; a relative name resolves under
CarlaUE4/Saved/. Verify with `query-recording info` first.

**Problem: replay shows nothing / wrong map**
Cause: the log was recorded on a different map than the one loaded.
Solution: replay loads the recorded map automatically; for OpenDRIVE-only logs
use `--map-override <Name>`.

**Problem: no sensor images during replay**
Cause: `--replay-sensors` not set, or no sensors attached.
Solution: attach sensors, then replay with `--replay-sensors`.

**Problem: actors vanish when replay ends**
Cause: `stop` removes replayed actors by default.
Solution: `stop --keep-actors` to keep them.

## Outputs

Server state: the recorded scene re-enacted on the running server. Optionally
regenerated sensor data (with `--replay-sensors`). No file is produced.

Detail (time window semantics, sensors/weather, map override, sync interaction)
in [references/replay.md](references/replay.md).

Files in this skill

  • SKILL.md5.7 KB
  • references/replay.md2.1 KB
  • scripts/check_env.sh2.1 KB
  • scripts/env.sh1.3 KB
  • scripts/replay.py9.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…