# Developers

If you are a programmer (or want to become a programmer), and are interested in developing new features, fixing bugs, or improving the user interface for OpenShot, the following sections will explain how to get started and get involved!

## The Big Picture

OpenShot Video Editor has 3 main components, a Python & PyQt user interface (openshot-qt), a C++ audio library (libopenshot-audio) and a C++ video library (libopenshot). If you are not familiar with Python, PyQt, or C++, those would be great topics to research and learn more about at this point.

However, many bugs can be fixed and new features added with only Python knowledge, since the C++ components are not involved in the user interface at all. Python is an amazing language, and is super fun to learn, and is the only prerequisite skill needed to become an OpenShot developer!

Warning

The instructions that follow are for Ubuntu Linux, which is the easiest environment to configure for OpenShot development. If you are using another OS, I suggest running a virtual machine with Ubuntu LTS before continuing any further.

If you must use a Windows or Mac system for development, start by referring to the build notes in the `libopenshot` wiki. Building the library with all of its dependencies is the most challenging part of the process.

- Windows Build Instructions

- Mac Build Instructions

## Getting the Latest Source Code

Before we can fix any bugs or add any features, we need to get the source code onto your computer.

Use git to clone our 3 repositories:

    git clone https://github.com/OpenShot/libopenshot-audio.git
    git clone https://github.com/OpenShot/libopenshot.git
    git clone https://github.com/OpenShot/openshot-qt.git

## Configuring your Development Environment

In order to actually compile or run OpenShot, we need to install some dependencies on your system. The easiest way to accomplish this is with our Daily PPA. A PPA is an unofficial Ubuntu repository, which has our software packages available to download and install.

    sudo add-apt-repository ppa:openshot.developers/libopenshot-daily
    sudo apt-get update
    sudo apt-get install openshot-qt \
                         cmake \
                         libx11-dev \
                         libasound2-dev \
                         libavcodec-dev \
                         libavdevice-dev \
                         libavfilter-dev \
                         libavformat-dev \
                         libavresample-dev \
                         libavutil-dev \
                         libfdk-aac-dev \
                         libfreetype6-dev \
                         libjsoncpp-dev \
                         libmagick++-dev \
                         libopenshot-audio-dev \
                         libprotobuf-dev \
                         libqt5svg5-dev \
                         libswscale-dev \
                         libunittest++-dev \
                         libxcursor-dev \
                         libxinerama-dev \
                         libxrandr-dev \
                         libzmq3-dev \
                         pkg-config \
                         python3-dev \
                         protobuf-compiler \
                         qtbase5-dev \
                         libqt5svg5-dev \
                         libxcb-xfixes0-dev \
                         qtmultimedia5-dev \
                         swig

At this point, you should have all 3 OpenShot components source code cloned into local folders, the OpenShot daily PPA installed, and all of the required development and runtime dependencies installed. This is a great start, and we are now ready to start compiling some code!

## libopenshot-audio (Build Instructions)

This library is required for audio playback and audio effects. It is based on the JUCE audio framework. Here are the commands to build it:

    cd libopenshot-audio
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=dist ..
    make
    make install

Essentially, we are switching to the `libopenshot-audio/build` folder, then running `cmake ..` on the parent folder. This finds dependencies and creates all the needed Makefiles used to compile this library. Then `make` uses those Makefiles to compile this library, and `make install` installs them in the location we specified. If `CMAKE_INSTALL_PREFIX` isn’t set, the files will install to `/usr/local/` (by default) and `make install` will require administrative privileges to run.

## libopenshot (Build Instructions)

This library is required for video decoding, encoding, animation, and just about everything else. It does all the heavy lifting of video editing and video playback. Here are the commands to build it:

    cd libopenshot
    mkdir build
    cd build
    cmake -DLIBOPENSHOT_AUDIO_DIR=../../libopenshot-audio/build/dist ..
    make

Essentially, we are switching to the `libopenshot/build` folder, then running `cmake ..` on the parent folder. This finds dependencies and creates all the needed Makefiles used to compile this library. Then `make` uses those Makefiles to compile this library. Because we provided the location of our compiled `libopenshot-audio` installation, that version of the library will be used instead of the system version (if any).

We don’t install our `libopenshot` after building, because we don’t need to. For testing purposes, we can tell OpenShot to use `libopenshot` right from our `build` directory.

## Language Bindings

The `libopenshot` API is available in several languages through SWIG bindings. Python is used by the OpenShot user interface, and we also provide Ruby and Java bindings. Experimental support for Godot 4.4 is included for developers who wish to integrate video editing features into the Godot game engine. All of these bindings map to the same C++ codebase so you can edit video from the environment you prefer.

## openshot-qt (Launch Instructions)

This is our main PyQt Python application. Because it is written in Python, it does not require any compiling to run. To launch OpenShot from the source code with our newly-built `libopenshot-audio` and `libopenshot` libraries, use the following commands:

    cd openshot-qt
    PYTHONPATH=../libopenshot/build/src/bindings/python
    python3 src/launch.py

This should launch the OpenShot user interface. Any changes you have made to the source code files (`*.py` Python files, `*.ui` PyQt UI files, etc…) will be included. This requires the `libopenshot-audio` and `libopenshot` libraries, and if anything went wrong with the steps above, OpenShot will likely not launch.

If OpenShot launches at this point, congratulations! You now have a working local version of OpenShot, which is running off your local source code. Try making some changes to the source code and re-launch OpenShot… you should now see your changes!

## GitHub Issues

Now that you have successfully compiled and launched OpenShot Video Editor from source code, be sure to check out our list of bug reports on GitHub: OpenShot Issues. Also, you are encouraged to fill out our quick contributor form and introduce yourself!

## Share your Changes

Once you have fixed a bug or added an amazing new feature, be sure to share it with the OpenShot team. Ideally, we can merge this into our main source code branch. The easiest way to share your changes is by creating a fork of our repo, pushing your changes back to GitHub, and creating a Pull Request. A Pull Request lets the OpenShot team know you have changes ready to be merged. Then we can review things, give feedback, and hopefully merge your changes into the main branch.