# IRecordingManager
Interface for controlling player recordings. Start and stop per-tick capture of player state, with support for rolling buffer mode and recording session metadata on stop.
---
## Source
```java
package gg.lode.recap.api.recording;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
public interface IRecordingManager {
boolean startRecording(Player player, String name);
boolean startRecording(Player player, boolean persist);
boolean startRecording(Player player, boolean persist, int maxSeconds);
boolean startRecording(Player player, String name, boolean persist);
boolean startRecording(Player player, String name, boolean persist, int maxSeconds);
@Nullable IRecordingSession stopRecording(Player player);
@Nullable IRecordingSession stopRecording(Player player, String name);
boolean cancelRecording(Player player);
boolean isRecording(Player player);
Collection<String> getRecordingNames();
boolean deleteRecording(String name);
int clearAllRecordings();
int clearAllRecordings(String regex);
}
```
---
## Methods
### Starting Recordings
| Method | Description |
|---|---|
| `startRecording(Player, String)` | Begin per-tick recording in persist mode. Returns `false` if the player is already recording or the name is taken. |
| `startRecording(Player, boolean)` | Auto-generated name. `persist=true` for full recording, `false` for 30-second rolling buffer. |
| `startRecording(Player, boolean, int)` | Auto-generated name with custom rolling buffer duration in seconds. |
| `startRecording(Player, String, boolean)` | Named recording with persist flag. |
| `startRecording(Player, String, boolean, int)` | Named recording with persist flag and custom buffer duration. |
### Stopping Recordings
| Method | Description |
|---|---|
| `stopRecording(Player)` | Stop and save. Returns `IRecordingSession` with metadata, or `null` if not recording / save failed. |
| `stopRecording(Player, String)` | Stop, rename, and save. Returns `null` if the name is already taken. Useful with auto-named rolling buffers. |
| `cancelRecording(Player)` | Discard recording without saving. Returns `false` if the player wasn't recording. |
### Managing Recordings
| Method | Description |
|---|---|
| `isRecording(Player)` | Check if a player is currently being recorded. |
| `getRecordingNames()` | List all saved recording names on disk. |
| `deleteRecording(String)` | Delete a recording file by name. |
| `clearAllRecordings()` | Delete all saved recordings. Returns count deleted. |
| `clearAllRecordings(String)` | Delete recordings matching a regex pattern. Returns count deleted. |
---
## Rolling Buffer Mode
When `persist` is `false`, recordings operate in rolling buffer mode — only the last N seconds of frames are kept in memory. Older frames are discarded as new ones are captured.
```java
// Record everyone on join — 30 second rolling buffer, auto-generated name
manager.startRecording(player, false);
// Incident detected — save with a meaningful name
IRecordingSession session = manager.stopRecording(player, "combatlog-" + player.getName());
// Normal quit — discard without saving
manager.cancelRecording(player);
```
---
## Related Pages
- [[Recap/API/IRecordingSession]] — recording metadata returned on stop
- [[Recap/API/RecapAPI]] — accessor class
- [[Recap/API/ISceneManager]] — scene and playback management
- [[Recap/Developers/Overview]] — usage examples