Giter VIP home page Giter VIP logo

listmate's Introduction


Listmate

Next generation knowledge suite for your music library, bookmarks, RSS feeds and more.




Project Homepage  |  Docs


Long gone are the days of the personal media library. Streaming services and SaaS dominate the market. Once subscriptions end, access to your data is lost until more payments have been made. Your playlists, bookmarks, and movies are trapped in silos that are hard to move away from.

Listmate was created to take back control of your personal knowledge by integrating external data APIs directly into the local media library.


Features

  •  📝   Organize your music library, your bookmarks, movies and more
  •  ⚡️   Flexible data model – everything is a resource
  •  🎶   Import playlists etc. from Spotify, YouTube, Pocket and more
  •  🔗   Link resources to each other and to external services
  •  🔮   Automatic matching by finding and identifying resources from different services
  •  🔊   Built-in player combines the playback of local, Spotify and YouTube files into a single interface
  •  📻   Unified player queue – add videos and songs from different playback sources into a single joint queue
  •  🤖   (Mostly1) works without JavaScript – built with Remix and on top HTTP & HTML
  •  💾   Keep all your data in a single SQLite database file2
  •  🔌   Direct integration with Spotify Data API and Playback SDK
  •  📆   Scheduled data imports – daily RSS feeds, weekly playlist updates...
  •  💿   Easy data exports – JSON, XML, CSV, RDF exports and symlinked FS "views"



Concepts

Everything is a DataObject / Resource

Every list item and associated data is represented as a DataObject in the database, and as a Resource in application logic.

The reason for this separation is a DataObject is very much tied to database restrictions (and column types, as we use the Prisma ORM). On the other hand, a Resource doesn't care how the data is stored. This enables us to provide different database providers (like PostgreSQL) in the future, without having to change any application logic. Also, it is much easier to build custom typings for the different ResourceType types when that code is not auto-generated (as Prisma does).

DataObjects can be linked together using a ValueRef. These always have a .value and may contain a .ref, which contains the DataObject ID to link to. E.g. a Song resource has a resource.values.artist property, that is a ValueRef to a Artist resource.

Using this system makes it really easy to build resource types, that link to each other with automatic UI support.


Resource explainer image


A DataObject can be linked to items on external services

For example a Song resource may have an equivalent in the Spotify database. To link them, a DataObjectRemote is created, that contains the SourceType.SPOTIFY and the respective URI.

By linking them, these two items become the logical "same".

A DataObject may contain multiple different DataObjectRemote entries.


Lists can be created locally, or imported from external services

You can create lists locally, which can contain anything you want. You can also import lists from external services, but these can only contain types that the given API supports.

For example, you can import your Spotify playlists, and set the interval in which they should be synced.

List content limitations:

  • Custom lists can contain any ResourceType
  • Synced Spotify lists may only contain songs
    • Exception: Synced favourites (albums, artists, songs)
  • Synced Pocket list may only contain bookmarks

In the future, we may provide two-way syncing with selected providers, as not all of them provide appropiate APIs.



Development

  • Start dev server:

    npm run dev

This starts your app in development mode, rebuilding assets on file changes.



Supported resource types

  • Collection
  • Song
  • Album
  • Artist
  • Playlist [Collection]
  • Bookmark
  • Video
  • Channel
Coming up
  • Webpage
  • RSS Feed [Collection]

Supported APIs

  • Spotify API
  • YouTube API
Coming up
  • Pocket API
  • youtube-dl API
  • Internet Archive API
  • Archive API

Architecture & Todo

Footnotes

  1. Playback requires JS enabled

  2. As of right now, files are still in a seperate folder, but I plan on saving files as BLOB data inside the database as well.

listmate's People

Contributors

capevace avatar

Stargazers

uvacoder avatar  avatar

Watchers

James Cloos avatar  avatar

Forkers

uvacoder

listmate's Issues

Query performance is slow when >200 items are returned

As of right now, the query performance to the DB is quite abysmal...

As a result, I have to SQL LIMIT queries like findResourcesByType as it appears to get exponentially slower.

There's a bunch of optimizations that can still be done though

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.