{"id":19989911,"url":"https://github.com/tchaik/tchaik","last_synced_at":"2025-05-04T09:33:48.402Z","repository":{"id":29697936,"uuid":"33240667","full_name":"tchaik/tchaik","owner":"tchaik","description":"Music organisation and streaming system in Go","archived":false,"fork":false,"pushed_at":"2019-10-30T07:13:08.000Z","size":2050,"stargazers_count":343,"open_issues_count":19,"forks_count":32,"subscribers_count":21,"default_branch":"master","last_synced_at":"2024-06-21T21:06:14.346Z","etag":null,"topics":["go","music-library","music-organisation","react","streaming"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tchaik.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-01T10:07:28.000Z","updated_at":"2024-04-02T12:28:27.000Z","dependencies_parsed_at":"2022-08-12T23:40:09.277Z","dependency_job_id":null,"html_url":"https://github.com/tchaik/tchaik","commit_stats":null,"previous_names":["dhowden/tchaik"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tchaik%2Ftchaik","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tchaik%2Ftchaik/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tchaik%2Ftchaik/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tchaik%2Ftchaik/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tchaik","download_url":"https://codeload.github.com/tchaik/tchaik/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224391390,"owners_count":17303609,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","music-library","music-organisation","react","streaming"],"created_at":"2024-11-13T04:50:46.811Z","updated_at":"2024-11-13T04:50:50.559Z","avatar_url":"https://github.com/tchaik.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Music organisation and streaming system\n\nTchaik is an open source music organisation and streaming system.  The backend is written in [Go](http://golang.org), the frontend is built using [React](https://facebook.github.io/react/), [Flux](https://facebook.github.io/flux/) and [PostCSS](https://github.com/postcss/postcss).\n\n![Tchaik UI](https://storage.googleapis.com/tchaik-1.appspot.com/cover-view.png \"Tchaik UI\")\n![Tchaik UI (Classical Music)](https://storage.googleapis.com/tchaik-1.appspot.com/classical-org.png \"Tchaik UI (Classical Music)\")\n\n# Features\n\n* Automatic prefix grouping and enumeration detection (ideal for classical music: properly groups big works together).\n* Multiplatform web-based UI and REST-like API for controlling player.\n* Multiple storage and caching options: Amazon S3, Google Cloud Storage, local and remote file stores.\n* Import music library from iTunes or build from directory-tree of audio tracks.\n\n# Requirements\n\n* [Go 1.4+](http://golang.org/dl/) (recent changes have only been tested on 1.5).\n* [NodeJS](https://nodejs.org/), [NPM](https://www.npmjs.com/) and [Gulp](http://gulpjs.com/) installed globally (for building the UI).\n* Recent version of Chrome (Firefox may also work, though hasn't been fully tested).\n\n# Building\n\nIf you haven't setup Go before, you need to first set a `GOPATH` (see [https://golang.org/doc/code.html#GOPATH](https://golang.org/doc/code.html#GOPATH)).\n\nTo fetch and build the code for Tchaik:\n\n    $ go get tchaik.com/cmd/...\n\nThis will fetch the code and build the command line tools into `$GOPATH/bin` (assumed to be in your `PATH` already).\n\nBuilding the UI:\n\n    $ cd $GOPATH/src/tchaik.com/cmd/tchaik/ui\n    $ npm install\n    $ gulp\n\nAlternatively, if you want the JS and CSS to be recompiled and have the browser refreshed as you change the source files:\n\n    $ WS_URL=\"ws://localhost:8080/socket\" gulp serve\n\nThen browse to `http://localhost:3000/` to use tchaik.\n\n# Starting the UI\n\nTo start Tchaik you first need to move into the `cmd/tchaik` directory:\n\n    $ cd $GOPATH/src/tchaik.com/cmd/tchaik\n\n## Importing an iTunes Library\n\nThe easiest way to begin is to build a Tchaik library on-the-fly and start the UI in one command:\n\n    $ tchaik -itlXML ~/path/to/iTunesLibrary.xml\n\nYou can also convert the iTunes Library into a Tchaik library using the `tchimport` tool:\n\n    $ tchimport -itlXML ~/path/to/iTunesLibrary.xml -out lib.tch\n    $ tchaik -lib lib.tch\n\nNB: A Tchaik library will generally be smaller than its corresponding iTunes Library.  Tchaik libraries are stored as gzipped-JSON (rather than Apple plist) and contain a subset of the metadata used by iTunes.\n\n## Importing Audio Files\n\nAlternatively you can build a Tchaik library on-the-fly from a directory-tree of audio files. Only files with supported metadata (see [github.com/dhowden/tag](https://github.com/dhowden/tag)) will be included in the index:\n\n    $ tchaik -path /all/my/music\n\nTo avoid rescanning your entire collection every time you restart, you can build a Tchaik library using the `tchimport` tool:\n\n    $ tchimport -path /all/my/music -out lib.tch\n    $ tchaik -lib lib.tch\n\n# More Advanced Options\n\nA full list of command line options is available from the `--help` flag:\n\n    $ tchaik --help\n    Usage of tchaik:\n      -add-path-prefix prefix\n        \tadd prefix to every path\n      -artwork-cache path\n        \tpath to local artwork cache (content addressable)\n      -auth-password password\n        \tpassword to use for HTTP authentication\n      -auth-user user\n        \tuser to use for HTTP authentication (set to enable)\n      -checklist file\n        \tchecklist file (default \"checklist.json\")\n      -cursors file\n        \tcursors file (default \"cursors.json\")\n      -debug\n        \tprint debugging information\n      -favourites file\n        \tfavourites file (default \"favourites.json\")\n      -itlXML file\n        \tiTunes Library XML file\n      -lib file\n        \tTchaik library file\n      -listen address\n        \tbind address for main HTTP server (default \"localhost:8080\")\n      -local-store path\n        \tpath to local media store (prefixes all paths) (default \"/\")\n      -media-cache path\n        \tpath to local media cache\n      -path directory\n        \tdirectory containing music files\n      -play-history file\n        \tplay history file (default \"history.json\")\n      -playlists file\n        \tplaylists file (default \"playlists.json\")\n      -remote-store address\n        \taddress for remote media store: tchstore server \u003chost\u003e:\u003cport\u003e, s3://\u003cregion\u003e:\u003cbucket\u003e/path/to/root for S3, or gs://\u003cbucket\u003e/path/to/root for Google Cloud Storage\n      -tls-cert file\n        \tcertificate file, must also specify -tls-key\n      -tls-key file\n        \tcertificate key file, must also specify -tls-cert\n      -trace-listen address\n        \tbind address for trace HTTP server\n      -trim-path-prefix prefix\n        \tremove prefix from every path\n      -ui-dir directory\n        \tUI asset directory (default \"ui\")\n\n### -local-store\n\nSet `-local-store` to the local path that contains your media files.  You can use `trim-path-prefix` and `add-path-prefix` to rewrite paths used in the Tchaik library so that file locations can still be correctly resolved.\n\n### -remote-store\n\nSet `-remote-store` to the URI of a running [tchstore](http://godoc.org/tchaik.com/cmd/tchstore) server  (`hostname:port`).  Instead, S3 paths can be used: `s3://\u003cregion\u003e:\u003cbucket\u003e/path/to/root` (set the environment variables `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` to pass credentials to the S3 client), or Google Cloud Storage paths: `gs://\u003cbucket\u003e/path/to/root` (set environment variable `GOOGLE_APPLICATION_CREDENTIALS` to point to the JSON credentials file).\n\n### -media-cache\n\nSet `-media-cache` to cache all files loaded from `-remote-store` (or `-local-store` if set).\n\n### -artwork-cache\n\nSet `-artwork-cache` to create/use a content addressable filesystem for track artwork.  An index file will be created in the path on first use.  The folder should initially be empty to ensure that no other files interfere with the system.\n\n### -trace-listen\n\nSet `-trace-listen` to a suitable bind address (i.e. `localhost:4040`) to start an HTTP server which defines the `/debug/requests` endpoint used to inspect server requests.  Currently we only support tracing for media (track/artwork/icon) requests.  See [https://godoc.org/golang.org/x/net/trace](https://godoc.org/golang.org/x/net/trace) for more details. \n\n# Windows Support\n\nThe default value for parameter `-local-store` is `/` which does not work on Windows.  When all library music is organised under a common path you can set `-local-store` and `-trim-path-prefix` to get around this (for instance `-local-store C:\\Path\\To\\Music -trim-path-prefix C:\\Path\\To\\Music`).\n\n# Get Involved!\n\nDevelopment is on-going and the codebase is changing very quickly.  If you're interested in contributing then it's safest to jump into our gitter room and chat to people before getting started!\n\n[![Join the chat at https://gitter.im/tchaik/tchaik](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/tchaik/tchaik?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftchaik%2Ftchaik","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftchaik%2Ftchaik","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftchaik%2Ftchaik/lists"}