# Snapper 🐟
![snapper-logo](https://github.com/in03/snapper/blob/main/assets/snapper_logo.svg)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/in03/snapper/main.svg)](https://results.pre-commit.ci/latest/github/in03/snapper/main) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
> **Note**
>
> Currently only Resolve 18 is supported.
> Resolve 17 and older require Python 3.6, which is now EOL. Some dependencies have started dropping support for it.
> If you use Resolve 17, checkout the 'resolve-17' branch. You can fork that branch and any incompatible dependencies if you're feeling brave.
> Although new features will not be ported, pull requests are welcome. The Resolve 17 branch has not been tested with older versions of Resolve.
## Purpose
Sometimes you want to try out some risky idea, create a couple of variations of something to compare, or even just have some timeline backups within easy reach when your project take some big steps. Snapper helps automate that. It's all too easy to throw 'best practice' out the window when you're on a tight turn-around. Snapper is really just a quick and easy utility to help you version your timelines. *Snapshots* sound **cool**, but really they're just timelines with a simple version number appended:
**My timeline V1**, **My timeline V2**, **My timeline V3**, etc.
## Usage
Simply run `snapper new` to create a new snapshot of the active timeline.
You can run this command with a shell-script, batch-file, StreamDeck, desktop shortcut, whatever you like.
When you create a new snapshot, Snapper duplicates your active timeline, renames it as the newest version, and puts it in a subfolder called '@Snapshots' next to your working timeline. If you keep all of your timelines in one place they'll all share the same subfolder, but if you like to keep unrelated timelines in separate folders, they'll each get their own '@Snapshots' subfolder. This helps prevent one person locking all the timelines if they park on the subfolder in collaborative mode.
If you still like seeing all your timeline versions in one place, you can enable the timelines smart bin in Resolve's settings - best of both worlds.
## What it doesn't do
Creating snapshots was always a point of friction for me and others I work with. That's why I made Snapper. That being said there are things I specifically don't want it to do. I want them to **stay** points of friction:
Deleting snapshots - That's dangerous territory, and better left as a manual process. Just keep them - unless you work with huge timelines, they don't really bloat your projects
Reverting snapshots - More often than not you'll want to do a partial revert, and there's no way of knowing how much you'd like to revert. It makes more sense to use the very granular tools Resolve provides you to pick and choose what you want to. Plus, if we're to avoid deleting all versions upstream of a revert, we leave behind a messy, jump-around history.
## Installation
First make sure you have:
- Python 3.10 - install with pyenv and pipx if you want to keep things tidy
- DaVinci Resolve Studio, with scripting set up (read Resolve's scripting README)
Then run:
```
pipx install git+https://github.com/in03/snapper
```
---
```
___ ___ ___ ___ ___ ___ ___
|_ -| | .'| . | . | -_| _|
|___|_|_|__,| _| _|___|_|
|_| |_|
Create and manage DaVinci Resolve timeline revisions 🐟
Usage: snapper [OPTIONS] COMMAND [ARGS]...
Do yourself a favour and create frequent timeline snapshots. Don't leave
messy little experiments at the end of your timelines. Keep it tidy. Keep it
clean.
Just type: "snapper new"
Options:
--verbose / --no-verbose Log debug messages [default: no-verbose]
--install-completion [bash|zsh|fish|powershell|pwsh]
Install completion for the specified shell.
--show-completion [bash|zsh|fish|powershell|pwsh]
Show completion for the specified shell, to
copy it or customize the installation.
--help Show this message and exit.
Commands:
new Create a new timeline snapshot
```
## How can I contribute?
Clone the repo, install dependencies, call from poetry shell:
```
git clone https://github.com/in03/snapper
cd snapper
python3 -m pip install poetry
python3 -m poetry shell
poetry install
snapper --help
```
If you're unfamiliar with using Poetry for dependency management and packaging, [give it a look](https://python-poetry.org/docs/basic-usage).
Raw data
{
"_id": null,
"home_page": "https://github.com/in03/snapper",
"name": "dr-snapper",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.10.0,<3.12.0",
"maintainer_email": "",
"keywords": "DaVinci Resolve,Scripting,Backups,CLI",
"author": "Caleb Trevatt",
"author_email": "in03@users.noreply.github.com",
"download_url": "https://files.pythonhosted.org/packages/cd/08/4f290348369b9ae1eac49d18b5fd7d544d2ea526edc22b72e657b9c23b74/dr_snapper-0.3.5.tar.gz",
"platform": null,
"description": "# Snapper \ud83d\udc1f\n![snapper-logo](https://github.com/in03/snapper/blob/main/assets/snapper_logo.svg)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/in03/snapper/main.svg)](https://results.pre-commit.ci/latest/github/in03/snapper/main) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\n> **Note**\n> \n> Currently only Resolve 18 is supported.\n> Resolve 17 and older require Python 3.6, which is now EOL. Some dependencies have started dropping support for it.\n> If you use Resolve 17, checkout the 'resolve-17' branch. You can fork that branch and any incompatible dependencies if you're feeling brave.\n> Although new features will not be ported, pull requests are welcome. The Resolve 17 branch has not been tested with older versions of Resolve.\n\n## Purpose\nSometimes you want to try out some risky idea, create a couple of variations of something to compare, or even just have some timeline backups within easy reach when your project take some big steps. Snapper helps automate that. It's all too easy to throw 'best practice' out the window when you're on a tight turn-around. Snapper is really just a quick and easy utility to help you version your timelines. *Snapshots* sound **cool**, but really they're just timelines with a simple version number appended: \n\n**My timeline V1**, **My timeline V2**, **My timeline V3**, etc.\n\n## Usage\n\nSimply run `snapper new` to create a new snapshot of the active timeline.\nYou can run this command with a shell-script, batch-file, StreamDeck, desktop shortcut, whatever you like. \n\nWhen you create a new snapshot, Snapper duplicates your active timeline, renames it as the newest version, and puts it in a subfolder called '@Snapshots' next to your working timeline. If you keep all of your timelines in one place they'll all share the same subfolder, but if you like to keep unrelated timelines in separate folders, they'll each get their own '@Snapshots' subfolder. This helps prevent one person locking all the timelines if they park on the subfolder in collaborative mode.\n\nIf you still like seeing all your timeline versions in one place, you can enable the timelines smart bin in Resolve's settings - best of both worlds.\n\n## What it doesn't do\nCreating snapshots was always a point of friction for me and others I work with. That's why I made Snapper. That being said there are things I specifically don't want it to do. I want them to **stay** points of friction:\n\nDeleting snapshots - That's dangerous territory, and better left as a manual process. Just keep them - unless you work with huge timelines, they don't really bloat your projects\n\nReverting snapshots - More often than not you'll want to do a partial revert, and there's no way of knowing how much you'd like to revert. It makes more sense to use the very granular tools Resolve provides you to pick and choose what you want to. Plus, if we're to avoid deleting all versions upstream of a revert, we leave behind a messy, jump-around history.\n\n## Installation\nFirst make sure you have:\n\n- Python 3.10 - install with pyenv and pipx if you want to keep things tidy\n- DaVinci Resolve Studio, with scripting set up (read Resolve's scripting README)\n\nThen run:\n```\npipx install git+https://github.com/in03/snapper\n```\n\n---\n\n```\n ___ ___ ___ ___ ___ ___ ___\n|_ -| | .'| . | . | -_| _|\n|___|_|_|__,| _| _|___|_|\n |_| |_|\n\nCreate and manage DaVinci Resolve timeline revisions \ud83d\udc1f\n\nUsage: snapper [OPTIONS] COMMAND [ARGS]...\n\n Do yourself a favour and create frequent timeline snapshots. Don't leave\n messy little experiments at the end of your timelines. Keep it tidy. Keep it\n clean.\n\n Just type: \"snapper new\"\n\nOptions:\n --verbose / --no-verbose Log debug messages [default: no-verbose]\n --install-completion [bash|zsh|fish|powershell|pwsh]\n Install completion for the specified shell.\n --show-completion [bash|zsh|fish|powershell|pwsh]\n Show completion for the specified shell, to\n copy it or customize the installation.\n --help Show this message and exit.\n\nCommands:\n new Create a new timeline snapshot\n```\n\n## How can I contribute?\nClone the repo, install dependencies, call from poetry shell:\n```\ngit clone https://github.com/in03/snapper\ncd snapper\npython3 -m pip install poetry\npython3 -m poetry shell\npoetry install\nsnapper --help\n```\nIf you're unfamiliar with using Poetry for dependency management and packaging, [give it a look](https://python-poetry.org/docs/basic-usage).\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Create a new timeline 'snapshot' to revert to when trying out risky ideas in DaVinci Resolve",
"version": "0.3.5",
"project_urls": {
"Homepage": "https://github.com/in03/snapper",
"Repository": "https://github.com/in03/snapper"
},
"split_keywords": [
"davinci resolve",
"scripting",
"backups",
"cli"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "fbbdf5725c5e40fece165e8865f9b19f77f3e9b59bf9a9759f8c4ebf79bae400",
"md5": "cca0665688bde1514408f431ae7bc65b",
"sha256": "11f8b0bbcb7a1bc9245a5660f250b8864ebb047d0282b46b11ecdac4d727f6a7"
},
"downloads": -1,
"filename": "dr_snapper-0.3.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cca0665688bde1514408f431ae7bc65b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10.0,<3.12.0",
"size": 8260,
"upload_time": "2023-06-01T06:23:11",
"upload_time_iso_8601": "2023-06-01T06:23:11.914219Z",
"url": "https://files.pythonhosted.org/packages/fb/bd/f5725c5e40fece165e8865f9b19f77f3e9b59bf9a9759f8c4ebf79bae400/dr_snapper-0.3.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "cd084f290348369b9ae1eac49d18b5fd7d544d2ea526edc22b72e657b9c23b74",
"md5": "c832405404b85a9723549de0be0e5fde",
"sha256": "c5cc2ccbfff85044e129e0e1bdb4a89da0cc5dd4cfca6caecd9f4bf89ee7b1fd"
},
"downloads": -1,
"filename": "dr_snapper-0.3.5.tar.gz",
"has_sig": false,
"md5_digest": "c832405404b85a9723549de0be0e5fde",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10.0,<3.12.0",
"size": 7380,
"upload_time": "2023-06-01T06:23:13",
"upload_time_iso_8601": "2023-06-01T06:23:13.556466Z",
"url": "https://files.pythonhosted.org/packages/cd/08/4f290348369b9ae1eac49d18b5fd7d544d2ea526edc22b72e657b9c23b74/dr_snapper-0.3.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-06-01 06:23:13",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "in03",
"github_project": "snapper",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "dr-snapper"
}