Sign inSign up

paveyry/mediaserver-clipper

By paveyry

•Updated over 1 year ago

Web app to generate video clips from videos on their media server (Plex, Jellyfin, Kodi, etc.)

Image
Networking
Web servers
Content management system
0

1.4K

paveyry/mediaserver-clipper repository overview

See README.md at https://github.com/paveyry/mediaserver-clipper⁠ for more information

⁠MediaServer Clipper

⁠Description

This application written in Rust serves a web application that allows users to extract clips from videos in their media server (Plex, Jellyfin, etc.).

⁠Environment Variables

All environment variables have a default and are optional, but setting these allows you to customize the behaviour of the app.

  • APP_NAME: defines the name of the app on the webpage. Default is Media Server Clipper.
  • OUTPUT_PATH: defines the directory in which the app will store the clips. Default is the output directory where the app is started from (/app/output in docker container).
  • PUBLIC_LINK_PREFIX: defines a different base URL to the clips directory that will be used when clicking the Share button for a clip. This is especially useful if you want to protect the MediaServer Clipper instance behind a htpassword but wish to have a public static file server to share the clips with people without giving your credentials (see docker-compose example below). Default is to link to the clip hosted by the Media Server Clipper (so the share and link buttons will do the same thing).
  • MAX_CLIP_DURATION: defines the maximum allowed duration (in seconds) of the clips. Default is 600 (10 minutes).
  • MAX_QUEUE_SIZE: number of jobs in queue after which the Clipper will reject new clip jobs. This does not count finished clips, only pending ones. Default is 4.
  • SEARCH_DIRS: list (comma-separated) of paths in which the search engine should be indexing files. If empty or not set, the search engine is disabled and the search field does not appear in the app. Default is empty. Example: SEARCH_DIRS=/media,/personal/videos,/jellyfin/media
  • SEARCH_FILE_EXTS: list (comma-separated) of file extensions (without including the dot) that should be indexed by the search engine. If empty or not set, all files will be indexed. Default is empty (no filtering). Example: SEARCH_FILE_EXT=mp4,mkv,avi,mov

⁠Docker

Docker is the recommended approach to run this application. Use this command to run the image (this exposes it on port 9987):

docker run -d --name clipper -p 9987:8000 -v ./media:/media -v ./clips:/app/output paveyry/mediaserver-clipper:latest

⁠Docker-compose examples

plex:
#[...]
volumes:
    - ./media:/media

clipper:
    image: paveyry/mediaserver-clipper:latest
    ports:
        - 9987:8000
    environment:
        - SEARCH_DIRS=/media
    volumes:
        - ./media:/media # mount it the same way as in plex/jellyfin
        - ./clips:/app/output
plex:
#[...]
volumes:
    - ./media:/media

clipper: # This can be protected by a htpassword
    image: paveyry/mediaserver-clipper:latest
    ports:
        - 9987:8000
    environment:
        - SEARCH_DIRS=/media
        - PUBLIC_LINK_PREFIX=https://yourdomain.tld:9988 # Share links wil link to static_clips
    volumes:
        - ./media:/media
        - ./clips:/app/output

public_clips: # This has read-only access so it can be safely exposed without auth
    image: nginx
    ports:
        - 9988:80 # this is https://yourdomain.tld:9988 linked in PUBLIC_LINK_PREFIX
    volumes:
        - ./clips:/usr/share/nginx/html:ro

Note that the download and link buttons will still link to the mediaserverclipper url, only the share button use the URL from PUBLIC_LINK_PREFIX (the static_clips nginx instance here)

Tag summary

Content type

Image

Digest

sha256:4458e6e15…

Size

57.2 MB

Last updated

over 1 year ago

docker pull paveyry/mediaserver-clipper