Giter VIP home page Giter VIP logo

blee's Introduction

Blee

Enjoy your Concert movies, Music Videos and DVD Extras, all in one place

Blee is a personal video server and application to enjoy your music videos, concerts and DVD Extra files anywhere, anytime you want. This project is made by and for music collectors. It is an alternative to Plex for handling music videos and concert films.

In Blee, movies can be grouped into packages. A package can have 0, 1 or more movies, along with an unlimited number of extras.

Features

  • Automatic Scan
  • For Concerts, access a song directly using its chapter
  • Customisable Regex-based file identification
  • Playback with Live Transcoding
  • Poster Download
    • Uses TMDB (Optional)
  • Automatically identify the types of Extras (Interview, Music Video, etc.), compatible with Plex's style (e.g. -interview)

Keep track of the upcoming features with the project's issues

Screenshots

Package

More screenshots here

blee's People

Contributors

arthi-chaud avatar

Watchers

 avatar

blee's Issues

Show Ratings

The Package page should show the rating from TMDB

Scanner: Handle File Rename

When the 'rename' event is reported by the FS Watcher, we should:

  • Fetch the File from the API using its path (using #24 or a dedicated route)
  • PUT the new path to the file

API: Include Related Entities

The Web API should allow including related entities/models to a resource.

Examples (non-exhaustive):

  • /extras/:id?include=package,file
  • /packages/:id?include=artist

Scanner: Handle File Deletion

When the 'deletion' event is reported by the FS Watcher, we should:

  • Fetch the File from the API using its path (using #24 or a dedicated route)
  • Delete the file (just like we would do in #32)

API: Update Extra/Movie

With #36, we need to be able to update a file's data.

  • The route would accept a NewExtra/NewMovie DTO
  • Delete the previous Extra/Movie related to the file
  • Create them back using the DTO
  • Run some housekeeping

API: Filtering Extras by type

We need to correctly implement here filter of extras based on their type.
It would only work if the extra only has one type.

  • Filtering extras should work if the extra has more than one type.

Sort Artists

We should be able to sort artists in the front app

Scanner: Watch inline posters

If a poster file is present in the same folder as an extra or move, and it triggers an event, it should be POSTed to the API

Favicon not set

The favicon is not set for the webapp. It is still the flutter icon. We should see blee's icon

Setup Database + Schema

  • Along with #2, a base schema for the database should be defined
  • The API should be able to connect with the Database

Studio App

There should be a simple web app we'll call the Studio.

The Studio should be very simple: it would be a single-page application which

  • Would take the ID of a movie/concert file
  • By default, have a text area with the ffmetadata output from the aforementioned file
  • The user should be able to edit the text area
  • We should be able to have a real-time status of the text validity (is it valid)
  • On save, the metadata should be applied to the file

API: Filter Items

For each of the following models, we should be able to filter them using these basic rules (equality):

  • Artist
    • Package (get artist by packages they appear in (movie or extra)
  • Package
    • Artist
  • Extra
    • Artist
    • Package
    • Type (see #42)
  • Movie
    • Type
    • Artist
    • Package
  • File
    • (Starts With or Eq) Path

INSTALL.md

There should be an INSTALL.md file at the root of the repository. It should:

  • Explain how to use the scanner.json file

  • Explain how to use the docker-compose.yml and nginx.* files

  • Explain how to use the .env file

    • Link back to Kyoo for Transcoder HW acceleration
  • Reference that INSTALL.md in the root README.md

Sort Packages

  • We should be able to sort packages in the front app
  • On the artist's page, packages should be sorted by date

API: Better Handling of Form Validation Errors

When a bad form is submitted (missing field, bad value, constraint fail, etc.), a typical error message should be returned. It should contain an error message related to the validation failure. Currently, it only says that the form is bad, without any further information.

A discussion about the topic: rwf2/Rocket#2110
A library to investigate: https://docs.rs/rocket-validation/latest/rocket_validation/

  • When a solution is found, it should be tested.

Basic Dockerisation

  • Following #1, there should be an action to build a Docker Image for each service
    • API
    • Front
    • Scanner
  • Each of these images, if built successfully, should be pushed to a docker image registry

  • There should be a functional docker-compose.yml file at the root of the repository
  • There should be a functional docker-compose.dev.yml file at the root of the repository, which would setup and run the app in a development environment

Setup Rocket Project

Setup the Rocket project, so that we can start working on the API.

  • It should come with a Swagger
  • There should be a Hello World Route
  • We should be able to connect to the database (See #4)

Fetch Metadata from TheMovieDB

For each package, we should fetch from TMDB:

  • A Poster

  • A Description (In English)

  • The ratings
    For each artist, we should fetch from TMDB:

  • A Poster

  • A Description

Settings File

The User should write a setting file, with the following information:

  • The Regex of the files to scan (2 list, each specific to extras and movies)
  • This file should be used by the Scanner

Filter Extras

In extra lists, we should be able to filter extras by type.

Needs #42

Metadata Refresh

Following #93, the scanner should have a new endpoint : /refresh

It would rely on some kind of hash to determine whether a file has changed or not.

Wrong encoding from Matcher

When a description from an External Id contains special characters (e.g. ö), the user sees weird characters.
It could be caused by the matcher or the API

Screenshot 2024-05-11 at 08 54 19

API: Delete File

For the scanner, we should be able to

  • Delete a File using its ID
  • Delete the related Extra/Movie/Image
  • Run some housekeeping (Delete 'empty' artist, packages, images, etc.)
  • The deletion endpoints should be protected by an auth guard

Package Banner

TMDB has banner for movies. We should get and use them.

  • API
    • Packages should have another relation to the images table for banners
    • Banner info should be included in package's response
    • There should be an endpoint to POST a package's banner
  • Matcher
    • We should GET the banner from TMDB
    • And POST it to the API

Scanner: On startup, delete the missing files

When the scanner starts, it should

  • Fetch all the files from the API
  • Look at the watched directory, and find the files that are missing (i.e. in the list but not in the file system)
  • For each file, delete them from the API (need #28)

Basic CI

For each of the following services, there should be an action

  • To Lint

  • To Check the code's format

  • To Build the service

  • To run tests (if any)

  • Front

  • API

  • Scanner

  • Matcher

Extract/Save Inline Poster

When an Extra or Movie is scanned, we should

  • check if there is a poster file in the same folder as the media file.

  • If there is one, we should POST it to the API

  • This should only be done if, and only if, no poster is already saved

Sort Extras

  • We should be able to sort extras in the front app
  • On the artist's page, packages should be sorted by name

API: External IDs

  • Define the External ID Table
  • Get an artist's External IDs
  • Get a package's External IDs
  • Submit an artist's external ID
  • Submit a package's external ID
  • Make the POST route only accessible to the Matcher

Use Events-sourcing for metadata matching

Upon artist/package creation in the API, an event should be emitted, so that a metadata matcher can do its thing

  • Events from the database should be registered
  • Such events should be sent to a message broker
  • The Matcher MS should receive/retrieve the event's message, and run

Scanner: Handle File Modification

When the 'changed' event is reported by the FS Watcher, we should:

  • Wait for the change to be done (make sure that the event was not triggered in the middle of an operation)
  • Get the File from the API
  • Rescan the file
  • PUT the new data

API: Sort Items

We should be able to sort items (asc and desc) using the following criteria

  • Artist
    • Name
    • Add Date
  • Package
    • Name
    • Artist Name
    • Release Year
    • Add Date
  • Movie
    • Name
    • Artist Name
    • Package Name
    • Release Year
    • Add Date
  • Extra
    • Name
    • Artist Name
    • Package Name (Then disc/track index)
    • Add Date
  • Files
    • Path
    • Size
    • Add Date

Setup Meilisearch

Upon file registration, an entry should be added to a Meilisearch database to allow searching

Scanner: On startup, identify the new files

When the scanner starts, it should

  • Fetch all the files from the API
  • Look at the watched directory, and find the files that are not in the previously fetched list
  • For each file, scan and push them to the API

Manual Scan Tasks

The automatic scan/clean actions of the scanner do not work :(
For now, we will move all automatic features to the backlog.

As a replacement, the scanner should become an HTTP server with 2 endpoints:

  • /scan

  • /clean

  • It should not be possible to run 2 tasks in parallel

API: Image Quality Presets

  • The API should accept quality preset for the /images endpoint, such as low, medium, high or original.
  • Upon request, the converted file should be created in the file system if it does not already exist.
  • The API should directly serve the converted file

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.