7.3 KB


video player for artists by artists

Hi, we're Jakub and Viktor, graduates from an art university, and we know what it's like

  1. to transcode all your videos the night before your presentation,
  2. to burn the DVDs three times until the player finally accepts them,
  3. to see glitches and lags in your video and do the transcoding several times again until the playback is smooth,
  4. to visit the exhibition and see that your videos are not playing because someone forgot to press the play button or didn't turn the loop function on.

VideoPi fixes all these problems:

  1. it plays virtually any video format you can think of[^1],
  2. from a USB stick[^2],
  3. with no glitches or lags (full HD supported),
  4. and it starts playing all videos on the USB stick in a loop automatically; you just connect the power cord.

VideoPi requires no configuration for the most common use case -- HDMI full HD video output with a separate 3.5mm jack audio output.

VideoPi can also capture images using a webcam and upload them to your server.

VideoPi is extendable and open for modifications. You can modify VideoPi to do video post-processing like gamma adjustment, or to play the clips in random order, or to do something we couldn't even imagine. VideoPi has all the capabilities of a micro PC; in the end it's nothing but a clever Linux installation[^3]. Dig in VideoPi's open-source code.

Get VideoPi

If you don't feel like installing VideoPi yourself (which you totally can, by the way, if you know the basics of Linux), we can

  • lend you a VideoPi (or two, or a dozen) for a daily price for as long as you need,
  • or we can sell it to you, so it will be yours and yours only forever.

In either case, we will help you with the initial setup.

We haven't come up with a price list or the exact extent of provided support and maintenance yet, so just send us an email and we'll get back to you.


VideoPi aims for simplicity and zero configuration, therefore:

  • Make sure the HDMI cable is connected before you power on VideoPi.
  • By default, the sound will play from the 3.5mm jack not from the HDMI.
  • Volume adjustment is not available. Adjust the volume on your speakers.
  • Video files will play in alphabetic order. If you want to be sure of particular file order, name your files with numbers or lowercase letters and use only latin characters.
  • File names with non-latin characters (such as chinese or cyrillic) as well as special characters (such as punctuation) are supported but should be avoided; especially if you care about the playback order.
  • The loop (repeat all) function cannot be turned off.
  • To setup the webcam you need to have an internet connection and a server with remote SSH access, see the Webcam section for more info.


WARNING: Following documentation uses /dev/sdX as a substitute for your real SD card device path. Double check this path before executing the installer (Makefile), so that you don't accidentally overwrite a different device.


Required Arch Linux packages (should be similar on other distributions):

util-linux (sfdisk)
dosfstools (mkfs.vfat)
e2fsprogs (mkfs.ext4)

arch-install-scripts (arch-chroot) # Installation only
binfmt-support (update-binftms) # Installation only
qemu-user-static (qemu-arm-static) # Installation only

Install VideoPi on an SD card

First format your SD card:

# make erase filesystems DEVICE=/dev/sdX

Then install VideoPi for your Raspberry Pi version on the SD card and create a disk image of the whole card:

# make VERSION=2 DEVICE=/dev/sdX

Supported Raspberry Pi version are VERSION=1, 2 and 3.

Unpack a VideoPi image

After you've created an SD card image (see previous section), you can unpack it to another SD card without having to go through the installation again:

# make mount unpack umount VERSION=2 DEVICE=/dev/sdX


See the Makefile help for all available commands:

$ make help


To customize the installation (add or replace some files on the SD card), select one of the available modifications from src-custom/ or create your own and pass appropriate CUSTOM= parameter to make. Example:

$ mkdir -p src-custom/my-improvement/home/alarm
$ echo "bar" > src-custom/my-improvement/home/alarm/foo
# make VERSION=2 DEVICE=/dev/sdX CUSTOM="my-improvement"

Use modification shuffle to play the video files in random order:

# make VERSION=2 DEVICE=/dev/sdX CUSTOM="shuffle"
Multiple modifications

To use multiple modifications put a space separated list in the parameter CUSTOM=:

# make VERSION=2 DEVICE=/dev/sdX CUSTOM="shuffle my-improvement"

To setup a network connection create a new netctl network config (possibly based on src/etc/netctl/example) in a new modifications directory and rebuild the image:

$ mkdir -p src-custom/my-home-network/etc/netctl
$ echo "my netctl content" > src-custom/my-home-network/etc/netctl/home
$ rm src-custom/my-home-network/etc/netctl/my-network
$ ln -s src-custom/my-home-network/etc/netctl/home src-custom/my-home-network/etc/netctl/my-network
# make VERSION=2 DEVICE=/dev/sdX CUSTOM="my-home-network"

To setup a webcam image upload you need a working Network connection and SSH. Copy example SSH config files from src/ and edit them to match your server settings:

$ mkdir -p src-custom/my-server/home/alarm/.ssh
$ cp src/home/alarm/.ssh/config src-custom/my-server/home/alarm/.ssh/
$ cd src-custom/my-server/home/alarm/.ssh
$ nano known_hosts
$ echo "" > id_rsa
$ nano config

Then edit your remote server directory:

$ cp src/home/alarm/bin/upload-image src-custom/my-server/home/alarm/bin/upload-image
$ nano src-custom/my-server/home/alarm/bin/upload-image

...and build the image:

# make VERSION=2 DEVICE=/dev/sdX CUSTOM="my-home-network my-server"


The log is located in /home/alarm/.log/devmon.log.


Copyright 2016 Jakub Valenta

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see

[^1]: VideoPi uses the excellent mpv media player with the FFmpeg library, which supports MPEG-2, H.263/MPEG-4 Part 2 (DivX, .avi, .mpeg), H.264/MPEG-4 AVC (.mp4, .mov, .mkv), Windows Media Video (.wmv), VP8 (.webm), Theora (.ogv), and many other codecs.

[^2]: VideoPi reads USB flash drives formatted on Windows (FAT, NTFS), Mac (HFS+), or Linux (ext4 etc).

[^3]: VideoPi is a set of configuration files and scripts on top of ArchLinux ARM GNU/Linux distribution. It uses udevil to manage USB flash drive mounting and mpv to play the videos.