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".
Scanned 9/20/2026
Install to Claude Code
npx -y skills add carla-simulator/carla-agentic-tools --skill replay-recording --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Replay Recording?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/carla-simulator-replay-recording)More formats (shields.io, HTML) on the badges page.
---
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).
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!