{"id":15490179,"url":"https://github.com/oliboy50/blindtester","last_synced_at":"2025-04-22T19:08:32.369Z","repository":{"id":38271128,"uuid":"171013616","full_name":"Oliboy50/blindtester","owner":"Oliboy50","description":"Make blind tests a breeze!","archived":false,"fork":false,"pushed_at":"2025-03-31T23:08:49.000Z","size":5458,"stargazers_count":3,"open_issues_count":12,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-22T19:08:30.785Z","etag":null,"topics":["blind-test","blindtest","music","slack","sound","youtube"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Oliboy50.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-02-16T14:39:02.000Z","updated_at":"2024-08-06T06:55:59.000Z","dependencies_parsed_at":"2023-10-15T05:04:57.983Z","dependency_job_id":"b314141f-11c1-4237-bfdb-f36038631d75","html_url":"https://github.com/Oliboy50/blindtester","commit_stats":{"total_commits":131,"total_committers":4,"mean_commits":32.75,"dds":"0.48091603053435117","last_synced_commit":"4037494d624f6e8027ba121afc4b0884d7436f8d"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Oliboy50%2Fblindtester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Oliboy50%2Fblindtester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Oliboy50%2Fblindtester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Oliboy50%2Fblindtester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Oliboy50","download_url":"https://codeload.github.com/Oliboy50/blindtester/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250306639,"owners_count":21408926,"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":["blind-test","blindtest","music","slack","sound","youtube"],"created_at":"2024-10-02T07:09:43.886Z","updated_at":"2025-04-22T19:08:32.328Z","avatar_url":"https://github.com/Oliboy50.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# blindtester\n\n\u003e Send a video URL (e.g. YouTube) =\u003e Get a blindtest\n\n[![CircleCI](https://circleci.com/gh/Oliboy50/blindtester.svg?style=svg)](https://circleci.com/gh/Oliboy50/blindtester)\n\n## User documentation\n\n### Install\n\n#### Local\n\n1. `cp docker-compose.dev.yaml docker-compose.override.yaml`\n1. Edit `docker-compose.override.yaml` file to setup your environment variables\n1. `docker-compose up`\n1. Go to http://localhost:3030 to make sure blindtester is up and running\n\n#### Heroku\n\n1. Create a new app with a pipeline on heroku (e.g. `MY_APP`)\n1. `heroku login`\n1. `heroku stack:set container --app MY_APP`\n1. `heroku git:remote --app MY_APP`\n1. `git push heroku master`\n1. Go to https://dashboard.heroku.com/apps/MY_APP/settings to setup your environment variables\n1. Go to https://MY_APP.herokuapp.com to make sure blindtester is up and running\n\n### Usage\n\n#### GET `/save?url=YOUR_VIDEO_URL`\n\nProduce a new blind test using the `url` query param, then redirect to the blind test.\n\n#### GET `/stream/BLIND_TEST_ID`\n\nListen to the given blind test id.\n\n### Configuration\n\nConfiguration is done using environment variables (some good defaults can be found in [docker-compose.dev.yaml](docker-compose.dev.yaml)) which are listed below:\n\n| Variable    | Description |\n|:-----------:|-------------|\n| PORT | Port on which the web server will listen (default value is `3030`) |\n| API_BASE_URL | Your blindtester installation base URL used to programmatically build links (example: `http://localhost:3030`) |\n| ENDPOINT_SAVE_ENABLED | If equals to `true`, the API will expose the `save` endpoint |\n| ENDPOINT_STREAM_ENABLED | If equals to `true`, the API will expose the `stream` endpoint |\n| ENDPOINT_SLACK_ENABLED | If equals to `true`, the API will expose special endpoints to be compatible with Slack. |\n| VALIDATE_MAX_FILE_DURATION_IN_SECONDS | If set, blindtester will make sure the file duration is less than this limit before downloading it. |\n| DATABASE_TYPE | Database type. Could be one of `json` (will store application data in a JSON object). |\n| DATABASE_JSON_TYPE | Used if `DATABASE_TYPE` is `json`. Could be one of `filesystem` |\n| DATABASE_JSON_FILESYSTEM_PATH | Used if `DATABASE_JSON_TYPE` is `filesystem`. Path to a readable/writable file which will be created (if it does not already exist) and used as database. |\n| DATABASE_JSON_BACKBLAZEB2_KEY_ID | Used if `DATABASE_JSON_TYPE` is `backblazeb2`. Backblaze B2 key ID used to access the bucket containing the database. More information: [b2_authorize_account](https://www.backblaze.com/b2/docs/b2_authorize_account.html) |\n| DATABASE_JSON_BACKBLAZEB2_APPLICATION_KEY | Used if `DATABASE_JSON_TYPE` is `backblazeb2`. Backblaze B2 application key used to access the bucket containing the database. More information: [b2_authorize_account](https://www.backblaze.com/b2/docs/b2_authorize_account.html) |\n| DATABASE_JSON_BACKBLAZEB2_BUCKET_ID | Used if `DATABASE_JSON_TYPE` is `backblazeb2`. Backblaze B2 bucket ID where database will be stored. More information: [b2_update_bucket](https://www.backblaze.com/b2/docs/b2_update_bucket.html) |\n| DATABASE_JSON_BACKBLAZEB2_BUCKET_NAME | Used if `DATABASE_JSON_TYPE` is `backblazeb2`. Backblaze B2 bucket name where database will be stored. More information: [b2_download_file_by_name](https://www.backblaze.com/b2/docs/b2_download_file_by_name.html) |\n| DATABASE_JSON_BACKBLAZEB2_FILE_NAME | Used if `DATABASE_JSON_TYPE` is `backblazeb2`. Name of the file containing the JSON database in the bucket. More information: [b2_download_file_by_name](https://www.backblaze.com/b2/docs/b2_download_file_by_name.html) |\n| FILES_STORAGE_TYPE | Files storage type. Could be one of `filesystem`, `backblazeb2` |\n| FILES_STORAGE_FILESYSTEM_PATH | Path to a readable/writable directory which will be created (if it does not already exist) and used to store extracted audio files |\n| FILES_STORAGE_BACKBLAZEB2_KEY_ID | Used if `FILES_STORAGE_TYPE` is `backblazeb2`. Backblaze B2 key ID used to access the bucket containing the audio files. More information: [b2_authorize_account](https://www.backblaze.com/b2/docs/b2_authorize_account.html) |\n| FILES_STORAGE_BACKBLAZEB2_APPLICATION_KEY | Used if `FILES_STORAGE_TYPE` is `backblazeb2`. Backblaze B2 application key used to access the bucket containing the audio files. More information: [b2_authorize_account](https://www.backblaze.com/b2/docs/b2_authorize_account.html) |\n| FILES_STORAGE_BACKBLAZEB2_BUCKET_ID | Used if `FILES_STORAGE_TYPE` is `backblazeb2`. Backblaze B2 bucket ID where audio files will be stored. More information: [b2_update_bucket](https://www.backblaze.com/b2/docs/b2_update_bucket.html) |\n| SLACK_CLIENT_ID | Used if `ENDPOINT_SLACK_ENABLED` is `true`. Your Slack application \"Client ID\". |\n| SLACK_CLIENT_SECRET | Used if `ENDPOINT_SLACK_ENABLED` is `true`. Your Slack application \"Client Secret\". |\n| SLACK_VERIFICATION_TOKEN | Used if `ENDPOINT_SLACK_ENABLED` is `true`. If defined, this value must match your Slack application \"Verification Token\" to make sure incoming requests come from your Slack application. More information: [Slack verification token](https://api.slack.com/docs/token-types#verification) |\n| SLACK_SLACK_BUTTON_STATE | Used if `ENDPOINT_SLACK_ENABLED` is `true`. If defined, this value must be the same as the `state` query param used in the request used to distribute your Slack application in a Slack workspace (e.g. `https://slack.com/oauth/authorize?client_id=YOUR_SLACK_CLIENT_ID\u0026scope=commands\u0026state=YOUR_SLACK_SLACK_BUTTON_STATE`). More information: [Slack button](https://api.slack.com/docs/slack-button) |\n\n### Third party integrations\n\n#### Slack\n\nIn order to be easily used in Slack, blindtester provides special endpoints.\n\nHere's how to create a blindtester Slack application:\n\n1. Configure `ENDPOINT_SLACK_ENABLED` blindtester variable to expose Slack endpoints\n1. [Create a Slack App](https://api.slack.com/apps) from your workspace\n1. Create a `Slash Command` for your app where `Request URL` will point to the `API_BASE_URL/slack-command` endpoint of your blindtester installation and `Escape channels, users, and links sent to your app` will be checked\n1. `Install App` to your workspace\n\nIf you want to distribute your application to other workspaces:\n\n1. Configure `SLACK_CLIENT_ID` and `SLACK_CLIENT_SECRET` blindtester variables using your Slack application credentials\n1. Add a `Redirect URL` which will point to the `API_BASE_URL/slack-oauth-slack-button` endpoint of your blindtester installation\n1. `Activate Public Distribution`\n1. Use your `Add to Slack` button to install the app to other workspaces\n\n## Developer documentation\n\n### Start hacking\n\n```shell\ncp docker-compose.dev.yaml docker-compose.override.yaml\n\n# edit docker-compose.override.yaml file to setup your environment variables and uncomment the last lines of the file to run in \"development\" environment\n\n# download \"node_modules\" locally for a better developer experience (smarter IDE, fix lint on commit, etc.)\ncd api \u0026\u0026 npm install \u0026\u0026 cd -\n\ndocker-compose up\n```\n\n### Lint\n\nIf you've run `npm install` locally (outside of the container running the app), you should already have the \"fix lint on commit\" feature available.\n\nIf you want to lint your code manually:\n\n```shell\n# while docker-compose is up\n\ndocker-compose exec api npm run lint:fix\n```\n\n### Test\n\n```shell\n# while docker-compose is up\n\ndocker-compose exec api npm run test\n```\n\n## License\n\nGPLv3 - See [LICENSE.md](LICENSE.md) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foliboy50%2Fblindtester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foliboy50%2Fblindtester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foliboy50%2Fblindtester/lists"}