Semantic version control for video timelines (OTIO). Library + CLI.
Project description
pyvedit
Python bindings for vedit — semantic version control for video timelines (OpenTimelineIO).
The PyPI package is pyvedit. The Python module is vedit.
pip install pyvedit
import vedit
repo = vedit.Repo.init("./project")
# Agent generates a timeline as an OTIO dict.
timeline = my_agent.generate(prompt="opening montage, fast cuts")
h0 = repo.commit(timeline, message="agent v0")
# Branch off and try a different approach.
repo.create_branch("alt", at="HEAD")
repo.switch_branch("alt")
alt_timeline = my_agent.generate(prompt="opening montage, slower")
h1 = repo.commit(alt_timeline, message="agent v0 — slower")
# What did the agent change between the two?
for change in repo.diff_refs("main", "alt"):
print(change.op, change.to_dict())
# trimmed {'clip': {'name': 'shot_03', ...}, 'before': {...}, 'after': {...}}
# added {'clip': {'name': 'reaction_take_2', ...}, ...}
# Or diff two timelines directly without a repo.
changes = vedit.diff(timeline_a, timeline_b)
What it does
vedit is the snapshot, branch, diff, and merge layer for OTIO timelines. Built for AI video tools that need version control without reinventing it from scratch, and for editors who want a real edit history beyond their NLE's undo stack.
The semantic diff understands timeline operations, not byte differences:
Trimmed "drone_shot_04" by 1.80s (in)Moved "interview_take_2" before "b_roll_03"Added crossfade between "title_card" and "drone_shot_04" (12 frames)
Three-way merge produces structured conflicts (track-granular in v0.6.0; clip-granular in v0.6.1). Backed by a content-addressed object store and a commit graph; same shape as git.
API surface
# Repo lifecycle
vedit.Repo.init(path) # create new repo
vedit.Repo.open(path) # open at exact path
vedit.Repo.discover() # walk up to find .vedit/
# Commit / read
repo.commit(timeline_dict, message="...", author_name=None, author_email=None)
repo.read_timeline(ref) # returns OTIO dict
repo.read_commit(ref) # returns commit dict
repo.resolve(ref) # full hash from any ref
# Branches
repo.create_branch(name, at="HEAD")
repo.switch_branch(name)
repo.delete_branch(name)
repo.list_branches() # [(name, hash), ...]
repo.current_branch() # str or None
# History
repo.log() # [(hash, commit_dict), ...] from HEAD
repo.log("alt") # from a specific ref
# Diff
repo.diff_refs("main", "alt") # returns list of Change objects
vedit.diff(before_dict, after_dict) # standalone, no repo
# Errors
vedit.VeditError # all errors from the core
Links
- GitHub: explicit09/vedit
- Issues: explicit09/vedit/issues
- License: Apache 2.0
The full README, roadmap, prior art, and architecture notes live in the GitHub repo.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyvedit-0.0.1.tar.gz.
File metadata
- Download URL: pyvedit-0.0.1.tar.gz
- Upload date:
- Size: 62.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac50c2b6f7912c1d339f8ac94771ec549802003c7db7fbf4ac38e1da6dfc114e
|
|
| MD5 |
39878355bcb7913521bad9c98798dfc9
|
|
| BLAKE2b-256 |
64449e0e058e709a997709eb457e3a7d843f3a9acf542ea7f9cfae4d61e7bc19
|
File details
Details for the file pyvedit-0.0.1-cp39-abi3-win_amd64.whl.
File metadata
- Download URL: pyvedit-0.0.1-cp39-abi3-win_amd64.whl
- Upload date:
- Size: 420.3 kB
- Tags: CPython 3.9+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e76d138ea992c833d423b4320b4c105c9b75f152be1bbb7c8cc32ef96e47b95
|
|
| MD5 |
137ffba1443ea2dc2f8ca1274f2f08cf
|
|
| BLAKE2b-256 |
0cd82d7d7821a185528936aa3ab82ded4dea086f0356534659221a6453a716f3
|
File details
Details for the file pyvedit-0.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: pyvedit-0.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 506.6 kB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2c7dab42e3ee47e0700a2c095958325b7bee9e0aa74f831ec001b851556ff95
|
|
| MD5 |
8f58ba81c2a1e31b149624117bbecfaf
|
|
| BLAKE2b-256 |
99d2c332772fac63c676c1e1b680b2a6d07b5ebc65a2586cb1f182f8bc6dbec4
|
File details
Details for the file pyvedit-0.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: pyvedit-0.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 482.3 kB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad328a5a999f7a5bab43d8eee79e5c455623a4f79af09b6b64a88f5597d6a423
|
|
| MD5 |
2ffbb44050c0f723e46fe23bf60206f6
|
|
| BLAKE2b-256 |
fde7f3b99b60c1b24d694b0d09a374137b447d04b5d18ce1f35178c2be249db4
|
File details
Details for the file pyvedit-0.0.1-cp39-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: pyvedit-0.0.1-cp39-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 459.6 kB
- Tags: CPython 3.9+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df49e36a84e418b221c2875f42a2be766514cb92a296183097279be8f8cfe491
|
|
| MD5 |
f6307915803f04a28a1b5d24a3c4d02c
|
|
| BLAKE2b-256 |
2846fa685ed76cdf684710f6e284d08f77637fa4ce78bac66fc051027349a76a
|