README ¶
TakeoutFM
TakeoutFM is a copyleft, secure, and private media system that allows you to manage and stream your media on your own terms. It has a small and fast server, with mobile, watch, tv, and console apps for media streaming on your devices. Support for storing media in the cloud using S3 is a primary design goal and local media files are supported as well. See takeoutfm.com for further details.
Takeout
The TakeoutFM server, known as Takeout, indexes organized media files in S3 (or local) using MusicBrainz, Last.fm, Fanart.tv, and TMDB. Media is browsed using Takeout and securely streamed directly from S3 or local storage. Music, movies, podcasts, and radio are supported. Takeout is built as a single binary that includes all server functionality including media syncing, streaming, REST APIs, and a builtin web UI.
Features
- Free and open source with AGPLv3 license
- Written in Go, with SQLite3, Bleve, Viper, and Cobra
- Music metadata from MusicBrainz and Last.fm
- Album covers from the Cover Art Archive
- Artist artwork from Fanart.tv
- Powerful search and playlists
- Movie metadata and artwork from The Movie Database (TMDB)
- Podcasts with series and episode metadata
- Internet radio stations (pls)
- Media streaming directly from S3 using pre-signed time-based URLs
- Media streaming for local files using JWT tokens
- User-based access control using cookies, JWT tokens, and 2FA using TOTP
- Server-based playlist API using jsonpatch
- XSPF ("spiff") and JSPF playlists
- Supports caching of API metadata for faster (re)syncing
- REST APIs are available to build custom interfaces
Documentation
More details are available in the doc directory, including quick start, setup documentation, security design, and media naming conventions.
Visit the GitHub organization page for all project source code repositories.
Documentation ¶
Directories ¶
Path | Synopsis |
---|---|
Package client provides an (partial) implementation of Takeout API with support for authentication and tokens.
|
Package client provides an (partial) implementation of Takeout API with support for authentication and tokens. |
cmd
|
|
internal
|
|
lib
|
|
actions
This package works with Google Assistant Actions SDK and provides bindings to support json encoding and decoding for some data types.
|
This package works with Google Assistant Actions SDK and provides bindings to support json encoding and decoding for some data types. |
client
Package client provides an http client used extensively by Takeout for syncing media.
|
Package client provides an http client used extensively by Takeout for syncing media. |
fanart
Package fanart provides an interface to obtain artist artwork from Fanart.tv.
|
Package fanart provides an interface to obtain artist artwork from Fanart.tv. |
gorm
Package gorm provides an alternative gorm.Model that excludes the time fields from serialization, reducing some API bandwidth usage.
|
Package gorm provides an alternative gorm.Model that excludes the time fields from serialization, reducing some API bandwidth usage. |
musicbrainz
Package musicbrainz provides fairly good support for the MusicBrainz API with focus on the TakeoutFM needs for media syncing and building search metadata.
|
Package musicbrainz provides fairly good support for the MusicBrainz API with focus on the TakeoutFM needs for media syncing and building search metadata. |
pls
Package pls provide support for pls files as used in Internet radio streams.
|
Package pls provide support for pls files as used in Internet radio streams. |
rss
Package rss provide support for parsing RSS files as used in podcast feeds.
|
Package rss provide support for parsing RSS files as used in podcast feeds. |
search
Package search provides a wrapper for bleve search, building a search database for an index of fields.
|
Package search provides a wrapper for bleve search, building a search database for an index of fields. |
tmdb
Package tmdb provides a good coverage for the TMDB API, supporting movies, shows, people and images.
|
Package tmdb provides a good coverage for the TMDB API, supporting movies, shows, people and images. |
Package player provides a simple audio player based on Takeout server-based playlists.
|
Package player provides a simple audio player based on Takeout server-based playlists. |
Package spiff provides the model for all playlists used within TakeoutFM.
|
Package spiff provides the model for all playlists used within TakeoutFM. |
tools
|
|
Package view is the TakeoutFM API viewmodel.
|
Package view is the TakeoutFM API viewmodel. |