{"id":28513734,"url":"https://github.com/livepeer/labrador","last_synced_at":"2026-06-23T21:32:22.453Z","repository":{"id":39263968,"uuid":"228448120","full_name":"livepeer/labrador","owner":"livepeer","description":"Test suite for running automated stream reliability testing in on-chain mode","archived":false,"fork":false,"pushed_at":"2023-01-05T05:16:57.000Z","size":1706,"stargazers_count":0,"open_issues_count":33,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-29T20:20:51.965Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/livepeer.png","metadata":{"files":{"readme":"readme.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-12-16T18:18:44.000Z","updated_at":"2020-05-18T19:55:16.000Z","dependencies_parsed_at":"2023-02-03T12:46:06.000Z","dependency_job_id":null,"html_url":"https://github.com/livepeer/labrador","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/livepeer/labrador","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Flabrador","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Flabrador/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Flabrador/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Flabrador/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/livepeer","download_url":"https://codeload.github.com/livepeer/labrador/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Flabrador/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34708272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2025-06-09T01:07:52.780Z","updated_at":"2026-06-23T21:32:22.448Z","avatar_url":"https://github.com/livepeer.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LABRADOR :dog:\n\nLabrador is an automated broadcast testing and monitoring tool.\n\n## Services\n* stream-tester `:3001`\n* stream-sender `:3002`\n* dashboard `:3003` \n* grafana `:3004`\n\n## Running Labrador\n\n```\ndocker-compose up\n```\n\nEnvironment variables can be set by prepending them to the command above or editing the `.env`file in the project root\n\n```\n# Default Config\nKEYSTORE_DIR=~/.lpData/rinkeby/keystore\nDASHBOARD_EXTERNAL_URL=localhost:3002\n```\n\n- `KEYSTORE_DIR` - Labrador will preload the broadcaster container with a keystore directory, as a non-interactive terminal does not support ethereum account creation for `go-livepeer`. For ease of setup it is advisable to have an account pre-funded with test ETH for the test network you're using available here.\n\n- `STREAMSENDER_EXTERNAL_URL` - The dashboard are static files served on an HTTP server. This means the javascript is executed in the user's browser and therefore the `stream-sender` API URL needs to be configured to be the external URL (or localhost when running locally). A reference to a container name/IP will try to lookup the running container on the user's host system, which wouldn't exist when the setup is ran from a cloud VM. \n\n- `ETHEREUM_NETWORK` - Ethereum network to use, currently only `rinkeby` is supported.\n\n- `ETHEREUM_PASSPHRASE` - Password to unlock the ethereum account in `KEYSTORE_DIR`. This value can be either a path to file or a password. For security reasons it is advisable to use a file path.\n\n- `BROADCASTER_CFG` - Additional startup options for the broadcaster node.\n\n- `STREAMING_INTERVAL` - The interval on which to send streams.\n\n- `CONCURRENT_STREAMS` - The amount of concurrent streams to send into the broadcaster node.\n\n### Enabling Experimental Verification\n\nVerification is done by a pre-trained [machine learning classifier](https://github.com/livepeer/verification-classifier) model and is ran as an addition service in the docker network.\n\nTo enable verification add `-verifierAddr http://verifier:5000/verify -verifierPath /root/stream` to `BROADCASTER_CFG` in `.env`.\n\n## Stream-sender\n\n### API\n\n#### GET /stats/select\n\nRetrieves the statistics for a specific stream \n\n```\ncurl \u003chost\u003e:3002/stats/select -X GET -H \"Content-Type: application/json\" -d '{\"base_manifest_id\": \"\u003cmanifest id\u003e\"}'\n```\n\n#### GET /stats/all\n\nRetrieves the statistics for all streams\n\n```\ncurl \u003chost\u003e:3002/stats/all\n```\n\n#### POST /stream/start\n\nStart a stream, takes in following parameters:\n\n```\n{\n    \"host\": \"localhost\", // broadcaster HTTP address\n    \"file_name\": \"official_test_source_2s_keys_24pfs.mp4\", // must be present in stream-tester root dir\n    \"rtmp\": 1935, // broadcaster RTMP port\n    \"media\": 8935, // broadcaster HTTP port\n    \"repeat\": 1, // number of times to repeat the stream\n    \"simultaneous\": 1, // concurrent streams\n    \"profiles_num\": 2, // number of requested renditions\n    \"do_not_clear_stats\": false // will be overwritten to 'false' by the server\n}\n```\n\nOn a succesful request returns \n\n```\n{\n    \"success\": true,\n    \"base_manifest_id\": \u003cbase_manifest_id\"\u003e\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flivepeer%2Flabrador","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flivepeer%2Flabrador","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flivepeer%2Flabrador/lists"}