Videoflo is series of Python scripts to help automate the YouTube video production workflow in DaVinci Resolve. Go here to learn more about Videoflo.
The following section will explain how to install Videoflo on your computer. This is a one-time process.
Videoflo should work with most modern versions of Mac, Windows, and Linux. You will also need the following software installed on your system.
- A modern version of Python (tested with v3.8)
- DaVinci Resolve 17 Studio or higher
Download Videoflo with the following command.
cd ~/ git clone https://github.com/tonyflo/videoflo.git
This will download Videoflo into the ~/videoflo/ directory.
You will need to install some Python package via pip which allow Videoflo to work.
It is recommended that you use a Python virtual environment. For Mac/Linux users for example, you can do something like this:
python3 -m venv ~/env/vf source ~/env/vf/bin/activate
Then install the following packages to this virtual environment.
pip install configparser requests oauth2client pip install google-api-python-client google-auth-oauthlib google-auth-httplib2
When you want to use videoflo, always activate your virtual environment first:
cd ~/videoflo source ~/env/vf/bin/activate
Tip: You can add an alias to your shell’s rc (run commands) file. Common rc files are .bashrc and .zshrc which are located in your Unix-like home directory. Add the following line to your rc file.
alias vf='cd ~/videoflo/; source ~/env/vf/bin/activate'
Then in the future when you want to use Videoflo, all you have to do is type vf in your Terminal.
Open the settings.ini file and provide the full path to where you keep your video projects. Here’s an example.
[main] root_dir = /Volumes/vid/channels/
If you have multiple YouTube channels, it is recommended to create subdirectories for each channel. For example, I have 3 channels, so the following directories exist on my system.
Optionally, if you will generate any screen recordings or screenshots during the research or filming phase, please specify the path where your screen recordings and screenshots are saved. Notice how the
screens settings below uses an asterisk as a wildcard character to match any filenames that start with “Screen”. This is the default naming convention for QuickTime Player which is the recommended way to capture screen recordings and screenshots.
[main] ... screens = /Users/tonyflorida/Desktop/Screen*
For each one of your channels, add a section in your settings.ini file. You will need at least one section, but can have as many sections as you have channels. Pick a short, memorable name for your section name as you will use this name to distinguish your channel on the command line. In the snippet below, the section for Tony Teaches Tech is named
[ttt] name = Tony Teaches Tech path = tony-teaches-tech schedule = 1,2,3,4 timeline = /Volumes/vid/assets/tony-teaches-tech/Timeline1.drt description = /Volumes/vid/assets/tony-teaches-tech/yt-description.txt framerate = 24 width = 3840 height = 2160
A description of each configuration option follows.
name(required) The proper name of your YouTube channel
path(required) The subdirectory under
root_dirwhere your video projects will exist
schedule(required) The release schedule for your channel as a comma separated list where 1 is Monday and 7 is Sunday
timeline(optional) The full path to a DaVinci Resolve timeline file that will act as a template for this channel’s videos. Your timeline might contain an intro or outro that you use across all videos on your channel. Starting in DaVinci Resolve 17, you can export a timeline by going to File > Export > Timeline.
description(optional) The full path to a text file containing a default description for this channel. This could include social media or other links that you want to appear as part of the description of all of your videos. This is similar to YouTube’s upload defaults. Note that when uploading a video to YouTube, Videoflo will append this description below the video’s unique description from Trello separated by a full blank.
framerate(required) The framerate that you export your videos
width(required) The width that you export your videos
height(required) The height that you export your videos
If you are using a Mac computer, Videoflo will tag your video project directories according to their status in the production workflow.
Please install the following packages to enable this feature. You will need to install brew if you don’t already have it.
pip install mac-tag brew install tag
For Mac users only as a one-time setup, open a Finder window, go to Finder > Preferences, and add the following tags. The colors don’t matter too much, but make sure you have the exact text for each tag.
How to Use Videoflo
In addition to an initialization script called
init.py, Videoflo contains 7 Python scripts in that allow you to automate various aspects of video production from idea to publishing.
The following is an overview of how those scripts fit into the video production workflow.
Note: In the examples below, please replace the
-c argument with the name of your channel section in from your settings.ini file.
0. Initialize Videoflo for Your Channel
Sign up for a free Trello account if you don’t already have one. Create an empty board in Trello. This board is where Videoflo will keep track of your video projects for this channel. I named my Trello board Tony Teaches Tech after my YouTube channel of the same name.
Next, initialize Videoflo with your Trello board. In the example below, the
-c argument of
ttt comes from my settings.ini file.
python init.py -c ttt
The first time
init.py is run, a browser window will open asking “Would you like to give the following application access to your account?“.
Click the Allow button, and on the next page, copy the token and paste it into your command window.
Select the Trello board associated with your channel by typing the number associated with it and hitting Enter on your keyboard.
Videoflo will automatically create lists on your Trello board for each stage in the video production process if they don’t already exist.
At this point, you have successfully initialized Videoflo with Trello for this channel. Feel free to repeat this process for other channels that you may have.
1. Create the Directory Structure for Your New Video Idea
At the inception of an idea for a video, use
new-vid.py to create the basic directory structure to house your future video files, assets, thumbnails, etc. The name of the directory in the example below will be
python new-video.py my-first-video -c ttt
Based on the configuration setting example above, this will create the following directory for your video project
/Volumes/vid/channels/tony-teaches-tech/my-first-video/. If using Mac, this directory will be tagged with a Script tag.
In this directory, a
camera subdirectory will be created. This is where you will eventually copy your camera’s video file for this project.
This will also create an empty
notes.txt file in this directory. You can use this as a place to put an outline for your video or other relevant notes.
Additionally, a new card will be added to the Script list in Trello as can be seen above. The due date for this card will be set as the next available date based on the release schedule you defined in your settings.ini file for this channel. The due date on the card corresponds to the date and time in the future that you want the video to be published on YouTube.
For example, let’s say you publish videos every Tuesday at 7:05 PM. If the Trello card with the latest due date is January 12, 2022 at 7:05 PM, then your new Trello card will be assigned a due date of January 19, 2022 at 12:30 PM. If this is your first Trello card, then it will default to a week from right now.
2. Research and Plan
With an idea in your head, it is best practice to do some keyword research for your video topic. This will not only help you determine the final title and description for your video, but also point you in the right direction for general research on the topic.
Based on your research, put the title and description of your YouTube video as the title and description of the new card in Trello. Additionally, put relevant tags from your keyword research in the tags checklist on the card in Trello.
If you don’t have all of this information yet, that’s okay. You can add this information anytime before uploading; however, it’s highly recommended that you put some serious thought into this as early as possible.
Also note that the due data for the card will be the date and time that the corresponding video will be scheduled to be published on YouTube.
Hashtags will be appended to your video description at the end on a line of their own. These should not contain any spaces or special characters and are optional.
Plan Your Video
Now that you know exactly what your video is going to be about, do the necessary research for it.
You can make a simple outline or write a script in
notes.txt. If you need more flexibility than a plain text file, feel free to link a Google Doc to your Trello card as an attachment.
After you have written a script or outline, use
ready-to-film.py to update the state of the video.
python ready-to-film.py my-first-video -c ttt
If you specified a location for screen recordings and screenshots in settings.ini, this script will move these to a
screen folder in the root of your project directory.
The Trello card for this video will be moved to the Film board indicating that the video is ready to be filmed. If using Mac, this directory will be tagged with a Film tag.
3. Shoot the Video
Set aside some time and plan to film multiple videos in the same day. This not only is more efficient, but also allows you to take full advantage of the batching capability of Videoflo.
After filming each video, use
done-filming.py to update the state of the video in Trello.
python done-filming.py my-first-video -c ttt
If you specified a location for screen recordings in settings.ini, this script will move these to a
screen folder in the root of your project directory.
The Trello card for this video will be moved to the Edit board indicating that the video is ready to be edited. If using Mac, this directory will be tagged with an Edit tag.
4. Edit the Video
edit.py to create a DaVinci Resolve project for your video. This will import all media files from this project’s directory into the Media Pool.
Note: You’ll need to first manually copy your camera’s video files from your SD card into the
camera subdirectory for each video project before executing this script.
Another Note: It’s very important that you have DaVinci Resolve open before executing the
edit.py script or else it will fail.
python edit.py my-first-video -c ttt
This script will also import an optional timeline file for the channel that you specified in settings.ini.
5. Finish the Edit
When you’re satisfied with the edit, use
finish-edit.py to export the DaVinci Resolve project as a .drp file to the root of your project directory.
Make sure you execute this script when you still have the project open in DaVinci Resolve. There is no need to specify the
-c argument for this.
Note: It is recommended to have ‘Live Save’ enabled in DaVinci Resolve; otherwise, the project export will fail if you haven’t saved your project. You can enable this by going to DaVinci Resolve > Preferences > User > Project Save and Load > Save Settings and checking the ‘Live Save’ checkbox.
The Trello card for this video will be moved to the Render board indicating the the video is ready to be rendered. If using Mac, this directory will be tagged with a Render tag.
Feel free to repeat these steps for all videos that you are currently working on.
If you have multiple video project that you are working on simultaneously, you can render all projects (overnight for example) after your finished editing them all. You can do this with the
render.py script which will find all video projects that are in the Trello Render list for a particular channel and render them one after the other.
The render settings specified for the channel in settings.ini be used here.
Please make sure DaVinci Resolve is open, or else the script will fail.
python render.py -c ttt
Each rendered video will be saved to the root of the project directory.
After each video is rendered, the Trello card for that video will be moved to the Upload board indicating the the video is ready to be uploaded to YouTube. If using Mac, this directory will be tagged with an Upload tag.
Note: If you would like your video file to be named something else, this is a good time to change the name of the .mov file. It’s understood that YouTube uses the filename of your video file as an additional indicator to determine what your video is about, so it’s important for SEO purposes to name it accurately and not video1_final.mov for example.
7. Upload to YouTube
upload.py script to upload all rendered videos for a particular channel to YouTube.
python upload.py -c ttt
Before uploading, this script will make sure that you have the following for each video:
- Thumbnail: PNG file in the root of your project directory. I like to use Canva to make my thumbnails.
- Title: The name of the Trello card will be used as the title for the video.
- Description: The description of the Trello card will be used as the description for the video.
- Tags: The tags in the ‘tags’ checklist on the Trello card will be used as the tags for the video.
- Hashtags: The hashtags in the ‘hashtags’ checklist on the Trello card will be appended to your description.
- Scheduled Date: The ‘Due date’ on the Trello card will be used as the date and time that the video will be scheduled to be published on YouTube.
Note: The first time you upload a video to a channel with Videoflo, you will need to authorize Videoflo to access your YouTube account. Learn more here.
After each video is uploaded, the Trello card for that video will be moved to the Scheduled board indicating the the video is scheduled to be published. Attachments will be added to the card that link to the video in YouTube studio and the video itself.
If using Mac, this directory will be tagged with a Backup tag indicating that the project directory for this video can be backed up.
In YouTube Studio, you can confirm that titles, descriptions, tags, and scheduled dates are set accordingly for each video that was uploaded.