An open-source platform for online video.
The code powering https://veems.com. A next generation video sharing platform, with freedom of speech values.
We're actively looking for help with both frontend and backend development.
Join us on Discord if you're interested in being involved.
A preview of what we're building.
Further design materials can be found here.
In order of priority.
- Uploading, transcoding of content, playlist video packaging (✅).
- Playback of video content (✅).
- User & API authentication (✅).
- Creation of "Channels" (✅).
- Homepage video listings ✅.
- Search function ✅.
- Channel Manager (basics).
- Video Management (✅).
- Channel customisation (✅).
- Like/dislike videos (✅).
- Follow (Subscribe to) a Channel (✅).
- Related videos suggestions, Video playback page (✅).
- Video share button (✅).
- Moderation
- Ability to report content (✅).
- Moderation queue in Admin with actions (✅).
- Content error pages if unavailable due to moderation (✅).
- Video comments.
- Comment as user or Channel owners (✅)
- Ability to report comments (✅)
- Moderation of comments that break the rules (✅)
- Reply to a specific comment (✅)
- Sync channel(s) content from YT to Veems automatically.
- Channel Dashboard, sync configuration (✅)
- Background sync process (✅)
- Related user notifications (✅)
- Video view metrics in Channel Manager (✅)
- Activity notifications:
- Email notifications.
- To Channel owner when Sync process has completed/failed.
- To Video owner when comment is added (rate limited).
- To Commenter when comment is replied to (rate limited).
- To Channel owner when new subscriber (rate limited).
- Email notifications.
- Video responses.
- Channel vanity URLs.
- Video categories pages.
- Sport
- Comedy
- etc
- Trending videos.
- Trending algorithm.
- Trending section on Homepage.
- User notifications.
- UI notifications.
- Live streaming.
- Ability for Channel owner to export Subscribers.
- Rate limited once per month.
- User controlled content hiding. (e.g. Don't show me any cat videos).
- User Badges (earned by performing actions on the platform).
- Monetization.
- Revenue share from Premium user accounts.
- Banner ads.
- Pre-roll video player ads.
- Video view validation.
- Embeddable video player.
- Video comments.
- Tagging of another user via a comment (notification sent to tagged user).
- Community moderation.
- Jury system.
- The ability for Channel owners to self-host their content.
This section is work-in-progress, more to be added shortly.
Step 1. First install OS dependencies, ffmpeg and ffprobe. You will also need Docker.
Linux:
sudo apt update
sudo apt install ffmpeg
ffmpeg -versionMac:
brew install ffmpegWindows: https://ffmpeg.org/download.html
Step 2. Install application Python dependencies.
From within a Python 3.6+ virtualenv (we recommend using pyenv to manage your virtualenvs).
make installStep 3. Configure local environ variables.
Next, create a file called .env using .env.template as a template.
Also important export all of the variables defined in your .env file within your current shell window. (If you fail to do this you will not be able to run the application outside of Docker).
With Docker:
make runWithout Docker:
cd ./react-components/ && npm run build-dev && cd ../
make start-deps
python manage.py collectstatic --noinput
python manage.py migrate --noinput
python manage.py runserverThen visit http://localhost:8000/
You may notice there is a blank page, due to no data. Proceed to the next step to populate the DB with some example data.
This will create some Users, Channels and Videos.
With Docker:
make docker-seedWithout Docker:
make seedRunning the background Celery workers
Optional: For advanced users only. (Workers are only required when env var CELERY_TASK_ALWAYS_EAGER is set to false)
./celeryworker-entrypoint.sh
./celeryworker-channel-syncs-entrypoint.sh
./celerybeat-entrypoint.sh- Channel -- a Channel containing many Videos.
- Upload -- a raw video file upload into the system
- Video -- a video, which you can view via the website
- Video Rendition -- a version of the Video file at a specific resolution, bitrate, etc. e.g. 1080p
- Video Rendition Segment -- a small chunk of the Video Rendition video file to be served to the video player
- Video Rendition Thumbnail -- a thumbnail at a certain timestamp within the Video Rendition video file
- Video Rendition -- a version of the Video file at a specific resolution, bitrate, etc. e.g. 1080p
- Video -- a video, which you can view via the website
- Upload -- a raw video file upload into the system
Start up the supporting docker containers (RabbitMQ, Postgres, Localstack). Then run the tests.
With Docker:
make docker-testWithout Docker:
make start-deps
make testmake format
make lint



