{"id":33177974,"url":"https://github.com/MrExplode/ShowManager","last_synced_at":"2025-11-20T21:00:45.002Z","repository":{"id":47349312,"uuid":"234750937","full_name":"MrExplode/ShowManager","owner":"MrExplode","description":"ArtNet and LTC timecode generator.","archived":false,"fork":false,"pushed_at":"2025-11-15T02:16:41.000Z","size":2570,"stargazers_count":53,"open_issues_count":1,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-11-15T04:11:57.641Z","etag":null,"topics":["artnet","ltc","smpte","timecode","timecode-generator"],"latest_commit_sha":null,"homepage":null,"language":"Java","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/MrExplode.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-01-18T14:58:06.000Z","updated_at":"2025-11-15T02:14:58.000Z","dependencies_parsed_at":"2025-08-01T09:08:22.972Z","dependency_job_id":"713ee19f-5660-4bd7-b8ca-0ec1fde7215c","html_url":"https://github.com/MrExplode/ShowManager","commit_stats":null,"previous_names":["mrexplode/timecode"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MrExplode/ShowManager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrExplode%2FShowManager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrExplode%2FShowManager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrExplode%2FShowManager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrExplode%2FShowManager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MrExplode","download_url":"https://codeload.github.com/MrExplode/ShowManager/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrExplode%2FShowManager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":285511776,"owners_count":27184237,"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","status":"online","status_checked_at":"2025-11-20T02:00:05.334Z","response_time":54,"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":["artnet","ltc","smpte","timecode","timecode-generator"],"created_at":"2025-11-16T03:00:29.963Z","updated_at":"2025-11-20T21:00:44.994Z","avatar_url":"https://github.com/MrExplode.png","language":"Java","readme":"# ShowManager [![Build Status](https://github.com/MrExplode/ShowManager/actions/workflows/build.yml/badge.svg)](https://github.com/MrExplode/ShowManager/actions) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/06b58e31d1834512bc7016d8240cb6f8)](https://www.codacy.com/gh/MrExplode/ShowManager/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=MrExplode/ShowManager\u0026amp;utm_campaign=Badge_Grade) [![Codecov](https://img.shields.io/codecov/c/github/MrExplode/ShowManager)](https://app.codecov.io/gh/MrExplode/ShowManager)\r\nThis project aims to be the \"brain\" of a prerecorded show by playing Art-Net timecode, sending scheduled OSC messages and playing audio tracks synced to timecode.\r\n\r\n\u003cimg src=\"docs/ui_1.png\" width=\"927\" height=\"800\" alt=\"Web UI showcase\"\u003e\r\n\r\n## About\r\nPlease note that this is a hobby project of mine, and it is WIP. Only `wav` files are supported. Some options can be only changed from the configuration file, notably\r\n - Audio output\r\n - Audio tracks\r\n\r\n### Features\r\n- [x] Art-Net timecode generator\r\n- [ ] LTC timecode generator\r\n- [ ] MIDI timecode generator\r\n- [x] Timecode triggered OSC message sending\r\n- [x] Timecode triggered audio track player\r\n- [x] Web user interface\r\n- [ ] Selectable output destination (eg. client1 plays Art-Net, client2 plays audio, and so on)\r\n\r\n## Building\r\n\r\n### ShowManager\r\nYou can build the Java artifact with:\r\n```shell\r\n./gradlew build\r\n```\r\nthe artifact will be in `build/libs`  \r\n\r\n### UI\r\nShowManager uses a [web UI](webapp). In order to use you have to build it first, using standard [web tooling](https://pnpm.io).\r\n\r\n```bash\r\n# First setup\r\npnpm install\r\n```\r\n```bash\r\npnpm run build\r\n```\r\n\r\nAfter setting up the project with `pnpm install`, you can use the `build-webapp` gradle task for building. It runs the pnpm\r\nbuild command internally.\r\n```bash\r\n# example full clean build, without tests\r\n./gradlew clean build build-webapp -x test\r\n```\r\n\r\nSet the `build` folder's path to the environment value `showmanager.dist`\r\n\r\n# Usage\r\nRun the java artifact with:\r\n```shell\r\njava -jar ShowManager-\u003cversion\u003e.jar\r\n```\r\nOn the first run, ShowManager will create an empty config file. You may close ShowManager, as you probably want to configure some settings.\r\nThe project json file is located at `%APPDATA%/ShowManager/projects`.\r\nYou have to set the audio output, and add your tracks. Example:\r\n```json\r\n\"audio-player\": {\r\n  \"enabled\": false,\r\n    \"mixer\": \"Speakers (Realtek(R) Audio)\",\r\n    \"tracks\": [\r\n      {\r\n        \"startTime\": {\r\n          \"hour\": 0,\r\n          \"min\": 1,\r\n          \"sec\": 5,\r\n          \"frame\": 0\r\n        },\r\n        \"file\": {\r\n          \"path\": \"path/to/file.wav\"\r\n        },\r\n        \"volume\": 1.0,\r\n        \"markers\": []\r\n      },\r\n      {\r\n        \"startTime\": {\r\n          \"hour\": 0,\r\n          \"min\": 10,\r\n          \"sec\": 0,\r\n          \"frame\": 0\r\n        },\r\n        \"file\": {\r\n          \"path\": \"path/to/other_file.wav\"\r\n        },\r\n        \"volume\": 1.0,\r\n        \"markers\": []\r\n      },\r\n    ]\r\n  }\r\n```\r\n\r\nRun again, and open the web UI on the host+port that's specified in the project settings. It defaults to `http://127.0.0.1:7000`.\r\n\r\n","funding_links":[],"categories":["Tools"],"sub_categories":["Timecode"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMrExplode%2FShowManager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMrExplode%2FShowManager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMrExplode%2FShowManager/lists"}