Getting started¶
Requirements¶
| Need | For |
|---|---|
| Python 3.9 or newer | everything |
| PyYAML | everything (installed automatically) |
ffprobe from FFmpeg on PATH |
compose only (reads the media you hand it) |
Python 3.14+ (built-in compression.zstd) or the zstandard package |
reading clip effects from a Project.db, and timeline markers stored compressed |
Nothing else. drpkit never starts Resolve and never talks to its scripting API.
Install¶
pip install git+https://github.com/higuchiki/drpkit.git
# with the optional zstd support:
pip install "drpkit[zstd] @ git+https://github.com/higuchiki/drpkit.git"
drpkit --version
In a checkout, pip install . works too. The old entry points fairlight_reader.py, fairlight_writer.py and drp_compose.py are thin wrappers around the same code.
Three commands¶
1. Read a mixer¶
One Markdown table per mixer strip (each track column and each bus). Every row shows the converted value, a confidence mark and the raw stored value:
## タイムライン:Fixture
### Track1(track・列0)
| 項目 | 値 | 生値 |
|---|---|---|
| fader | 0 dB² | 0 |
| proc_order | FX→DY→EQ (default) | 5 |
| eq_band1_type | HPF | 6 |
| eq_band1_freq | 70 Hz | 70 |
| eq_band1_q | 1.1※ | 26 |
...
Table headings and some labels are Japanese (the tool was first written for a Japanese workflow); item names, values and units are plain. Use --json for machine-readable output.
A disk-database project is read the same way; pick one timeline with --timeline:
2. Read the edit¶
Clips (position, source In/Out, fades, fade curve point, clip volume, volume keyframes, clip FX, color), transitions and timeline markers. All positions are frames at the timeline frame rate. See Clips & edits.
3. Compose a new project¶
The template's audio tracks are emptied and refilled from the cut list; the mixer and everything else stay byte for byte. Import the result in Resolve with File → Import Project, into a project library used only for testing.
Safety rules¶
readopens a.drpas a zip for reading and aProject.dbwith SQLitemode=ro&immutable=1; it never modifies the input.writeandcomposerefuse an output path that already exists, build every change in memory, verify it, write a temporary file next to the output, read it back and verify again, and only then move it to the output name in one step (hard link, or rename where links are unsupported). On any error the temporary file is removed and no output exists.- Keep a backup of the original and check the result in Resolve before relying on it. No warranty — see LICENSE.
Run the tests¶
The compose tests need ffmpeg / ffprobe. What each test covers: Verification.