Holo's Project Stream
Features
- efficient: runs on servers with low specifications.
- smart: automatically parses your media to a compatible format.
- client support: supports multiple clients out of the box.
How It Works
- Project Stream scans your Google Drive through the use of a service account and a shared drive.
- The server boots up and is now proxying all traffic from Google Drive to your clients through an accessible WebDAV interface.
Limitations
Project Stream is still considered to be in alpha stage. Many features are not yet implemented or might be unstable. Currently known limitations:
- No support for TV Shows.
- Only 1080p and 2160p content is currently supported.
- No transcoded streams through the use of STRM.
- No multi-user support.
- No analytics platform.
- Only supports shared drives.
Getting started
Setting up the Google Cloud Project
- Head over to the Google Cloud Console and create a new Project.
- Enable the Drive API by visiting the APIs & Services tab, then selecting Library. In here you can search for
Google Drive
, to then enable this API. - With the API enabled, now visit the IAM & admin page, and select the Service Accounts tab. Here you should create a new service account, take note of the email address, and download the key as a JSON file.
Using an existing Shared Drive
Note: there is no visual indicator indicating the progress of the fetching of files. Thus, it is recommended to use Shared Drives with less than 10.000 files for the best results.
To use your existing media, in whatever format, it is crucial for you to tell Project Stream what your folder structure looks like.
Films Pattern
Default: /films/:film/:file
The films pattern requires two parameters: film
and file
. Parameters can be identified by the colon :
in front of the name of the parameter.
:film
is a folder with the title + year of the film as its name.:file
is the actual file of the film. This should be either a.mkv
or.mp4
file and should include the resolution2160p
or1080p
in its name.- Additional parameters can be supplied to act as wildcards, but are currently ignored by the code.
Some of the most used patterns include:
/Media/Movies/:film/:file
(CloudBox default)/Media/Movies/:resolution/:film/:file
/Media/Movies/:decade/:film/:file
/Movies/:resolution/:film/:file
/Movies/:film/:file
The films pattern can be set by supplying the CLI with the --filmsPattern <pattern>
flag.
Setting up a new Shared Drive
- Create a new Shared Drive within your Google Drive. (Requires a GSuite account)
- Invite the email address of the service account you just made to the Shared Drive. (Read-Only access advised)
- Create a new
films
folder at the root of your Shared Drive. - Within the
films
folder, you should add folders containing the name of the film + the year in any of these three formats:- my film (year)
- my-film (year)
- my-film-year
- In these individual film folders you can copy any
.mkv
file which at least includes the resolution in its name:- 2160p.mkv
- 1080p.mkv
- my.film.year.1080p.mkv
- my.film.year.2160p.mkv
The final file hierarchy should look like this:
Shared Drive
│
└───films
│
└───my film (year)
│ │ my.film.year.1080p.mkv
│ │ my.film.year.2160p.mkv
│
└───my-other-film-year
│ 1080p.mkv
Installing Project Stream
- Make sure you have NodeJS installed with at least version 12 or higher.
- Install Project Stream by running:
npm install -g @getholo/stream
.
Running Project Stream
Run project stream with: stream --account <account.json> --driveId <driveId> -p <password>
.
- In the placeholder of
<account.json>
you should fill in the path to the JSON file of the service account you just downloaded. - In the placeholder of
<driveId>
you should fill in the ID of your Shared Drive. You can find this ID at the end of the URL of your Shared Drive, ONLY when you're viewing it at the root level. (Should end with VA) - In the placeholder of
<password>
you should fill in the password you want to use for authentication. If the password is not given, it defaults toalpha.2
.
You should now see the message: Project Stream tuning in on port 4000
.
If this is not the case, something went wrong during the setup, and you should revisit the steps highlighted above.
Client support
So far two clients have been tested with Project Stream: Infuse and Kodi. Though in theory any client supporting the WebDAV standard should be compatible.
Connecting to your Project Stream server with Kodi
- Head over to settings (the cogwheel icon on your top left).
- Click on the media tab.
- Within Manage Sources, hit the
Videos...
button. - Select
Add videos...
- Within the pop-up window, click the
Browse
button. - Scroll down and click
Add network location...
- protocol: WebDAV server (HTTP) Please select HTTPS when running this behind a reverse-proxy.
- Server address: localhost
- Remote path: you can leave this empty
- Port: 4000
- Username: can be anything really, just not blank
- Password:
alpha.2
or the password you set with the -p param
- Now select the share as
dav://localhost:4000
- Pick the resolution you would like to add
- When in the films folder, click OK on the right
- Click OK again
- This directory contains: Movies
- Click OK again
- In the prompt, select
YES
Connecting to your Project Stream server with Infuse
It is recommended to use a reverse proxy like Caddy to connect to Project Stream from other devices, such as your Apple TV, iPhone or iPad.
- Head over to settings.
- Click the
Add Files
button. - Select
via Network Share
.
- Name: Project Stream
- Protocol: WebDAV HTTPS when using Caddy
- Address: Local IP of the machine running the Stream server, or subdomain when using Caddy.
- Username: can be anything really, just not blank
- Password:
alpha.2
or the password you set with the -p param
Note: When not using Caddy, fill in port 4000 in the Advanced options
- Select the resolution you'd like to add, then click the little star icon.
Reporting bugs
Please either leave an issue with somewhat detailed instructions on how to reproduce, how it occurred, etc. Or just shoot a message on the Discord server!