Skip to content

CaptainVee/veems

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


veems

An open-source platform for online video.

The code powering https://veems.com. A next generation video sharing platform, with freedom of speech values.

https://github.com/VeemsHQ/veems/workflows/Tests/badge.svg Maintainability

Stay in touch

Contributing

We're actively looking for help with both frontend and backend development.

Join us on Discord if you're interested in being involved.

https://i.imgur.com/Ujf8Ti8.png

Screenshots

A preview of what we're building.

Further design materials can be found here.

https://i.imgur.com/pkrQgzE.png

https://i.imgur.com/ZMJYNvl.png

https://i.imgur.com/VGC6FQj.png

Feature Roadmap

In order of priority.

Alpha Release

  • 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 (✅)

Beta Release

  • 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).
  • 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.

Future

  • 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.

Installation

Step 1. First install OS dependencies, ffmpeg and ffprobe. You will also need Docker.

Linux:

sudo apt update
sudo apt install ffmpeg
ffmpeg -version

Mac:

brew install ffmpeg

Windows: 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 install

Step 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).

Usage

Running the webserver

With Docker:

make run

Without 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 runserver

Then 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.

Importing seed data

This will create some Users, Channels and Videos.

With Docker:

make docker-seed

Without Docker:

make seed

Running 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

Architectural Concepts

  • 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

Running the tests

Start up the supporting docker containers (RabbitMQ, Postgres, Localstack). Then run the tests.

With Docker:

make docker-test

Without Docker:

make start-deps
make test

Running the code formatted and linter

make format
make lint

About

An open-source platform for online video.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •