{"id":13727366,"url":"https://github.com/maxwellito/hexabeat","last_synced_at":"2025-07-29T10:33:58.463Z","repository":{"id":35940410,"uuid":"170779028","full_name":"maxwellito/hexabeat","owner":"maxwellito","description":"A music sequencer using commits","archived":false,"fork":false,"pushed_at":"2023-01-05T23:54:35.000Z","size":1736,"stargazers_count":45,"open_issues_count":15,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-04T04:35:05.920Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://maxwellito.github.io/hexabeat","language":"TypeScript","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/maxwellito.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-02-15T00:45:09.000Z","updated_at":"2025-01-10T16:54:27.000Z","dependencies_parsed_at":"2023-01-16T09:32:05.430Z","dependency_job_id":null,"html_url":"https://github.com/maxwellito/hexabeat","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maxwellito/hexabeat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxwellito%2Fhexabeat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxwellito%2Fhexabeat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxwellito%2Fhexabeat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxwellito%2Fhexabeat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxwellito","download_url":"https://codeload.github.com/maxwellito/hexabeat/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxwellito%2Fhexabeat/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265464614,"owners_count":23770326,"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":[],"created_at":"2024-08-03T01:03:52.109Z","updated_at":"2025-07-15T22:21:32.752Z","avatar_url":"https://github.com/maxwellito.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# HexaBeat\n\n**Express the beats from hidden commits.**\n\nHexaBeat is a sequencer using commits from GitHub to make beats.\nIt takes a config file as input (also called liveset file) defining groups of sounds and repositories to extract commits from.\nThen mix and match commits and algorithms to make an infinite combinaisons of sequences.\nThe app can be fully controlled via Akai MPK Mini device.\n\n[Start HexaBeat](//maxwellito.github.io/hexabeat)\n\n\u003ca href=\"https://www.youtube.com/watch?v=XbCedvCfd-Y\"\u003e\n  \u003cimg alt=\"HexaBeat introduction\" src=\"https://raw.githubusercontent.com/maxwellito/hexabeat/master/public/img/video-link.jpg\" width=\"480\"\u003e\n\u003c/a\u003e\n\n## Usage\n\nThe app should work on all devices, as long as the screen is large enough.\nOn different parts of the user interface you will notice your cursor changing. If you get a multidirectional cross, you should be able to scroll or click and drag to update the value.\n\nHowever, if you're the lucky owner of a Akai MPK Mini you will be able to control the app from the pads and nobs of the device.\n\n```\n .----. .----. .----. .----.    .--.   .--.   .--.   .--.\n | P1 | | P2 | | P3 | | P4 |   | N1 | | N2 | | N3 | | N4 |\n '----' '----' '----' '----'    '--'   '--'   '--'   '--'\n .----. .----. .----. .----.    .--.   .--.   .--.   .--.\n | P5 | | P6 | | P7 | | P8 |   | N5 | | N6 | | N7 | | N8 |\n '----' '----' '----' '----'    '--'   '--'   '--'   '--'\n '---------- PADS ---------'   '--------- NOBS ----------'\n```\n\n_MPK Mini setup_\n\nThe `P8` pad is a special pad thay will have the same function across the workflow. When the P8 pad is pressed, all nobs are disabled to let you reset them and help will be displayed to give you hints at the midi mapping. Then release to get back on playing.\n\nNobs are the perfect tool to go through a list. However there's a physical limitiation. The nobs aren't infinite, they got a minimum and a maximum. This create a problem when you reach the maximum of your nob but not the end of the list you're scrolling into. So it will be necessary to reset the nobs with the P8 pad like described above.\n\n# FAQ\n\n### Why this stuff?\n\nI wanted to build something to discover React and Redux beyond a simple TO DO list app. It was fun. It probably contain a lot of misconception and missing optimisations.\n\n### Is there a way to record this inaudible stuff?\n\nNothing is built in. It's your problem now.\n\n### Does this work with other MIDI keyboards than the Akai MPK Mini?\n\nNo.\n\n### Is it planned to control it with other devices?\n\nNo.\n\n### Why the demo video looks cool and the product produce crappy stuff?\n\nMarketing got a high power of persuasion. It's reminder that you shouldn't trust everything you see on YouTube or social medias en general.\n\n### Why the default sample are in a separate repo?\n\nI'm not entirely sure about the rights to use them, so in case it get striked, it won't take down the code. But shhhhhh.\nAlso, I don't wanted to mess up the main repo with them.\n\n### Can I build my own liveset file?\n\nYes you can! [Follow these instruction to build your own liveset](#build-your-own-liveset-file)\n\n### Can I build my own algorithm to process commits?\n\nNot for now, but I can imagine adding them as part of the liveset config and load them via ES6 modules. But for now I just wanted to release the project and move on.\n\n# Build your own liveset file\n\nThe Liveset file is a JSON encoded file that define the different audio sets and repositories sources. Here is an example below:\n\n```json\n{\n  \"name\": \"minimal kit\",\n  \"version\": \"1.1\",\n  \"description\": \"Audio deck for minimal kit\",\n  \"author\": \"Sancho Gomez aka Wurst Offendr\",\n  \"repositories\": [\n    \"maxwellito/vivus\",\n    \"maxwellito/triangulart\",\n    \"maxwellito/commitbeat\",\n    \"maxwellito/breaklock\"\n  ],\n  \"pathBase\": \"/public/livesets/\",\n  \"sampleGroups\": [\n    {\n      \"name\": \"hightomtom\",\n      \"icon\": \"HT\",\n      \"samples\": [\n        { \"name\": \"HT10\", \"url\": \"TR808WAV/HT/HT10.WAV\" },\n        { \"name\": \"HT25\", \"url\": \"TR808WAV/HT/HT25.WAV\" }\n      ]\n    },\n    {\n      \"name\": \"midtomtom\",\n      \"icon\": \"MT\",\n      \"samples\": [\n        { \"name\": \"MT10\", \"url\": \"TR808WAV/MT/MT10.WAV\" },\n        { \"name\": \"MT25\", \"url\": \"TR808WAV/MT/MT25.WAV\" }\n      ]\n    }\n  ],\n  \"theme\": {\n    \"shade-base\": \"#000\",\n    \"shade-dark\": \"#011\",\n    \"shade\": \"#044\",\n    \"shade-light\": \"#0ff\",\n    \"shade-active-on\": \"#f0f\"\n  }\n}\n```\n\n### 1. Metadata\n\nThe first properties are basic metadata : `name`, `version`, `description`, `author`. There's no specific restrictions, feel free to provide few details.\n\n### 2. GitHub repositories list\n\nThe property `repositories`is a simple array of repositories to load which will be used as commit sources. The list provided must be valid and contain a minimum of one repository.\n\n### 3. Sample groups\n\nThis is where tracks are defined. The property `sampleGroups` is an array of sample group. Each group, is defined by a `name`, an `icon` (string of maximum 3 letters) and links to audio samples (minimum 1, maximum 4). Each sample object got 2 properties: `url` (link to the audio file) and a `name` (unique string of maximum 8 chars).\n\nIn case you have a common path to all the audio files, you can use the property `pathBase` to set a URL base. In the example above, the sample `TR808WAV/MT/MT25.WAV` will be loaded via `/public/livesets/TR808WAV/MT/MT25.WAV`.\n\n### 4. Theme\n\nLiveset config allow to provide a custom theme. These will override the CSS variables of the app. Please find the default values above.\n\n- **shade-base**: `#000`\n- **shade-dark**: `#111`\n- **shade**: `#444`\n- **shade-light**: `#fff`\n- **shade-active-on**: `#f6c408`\n\n\u003e #### WARNING: In order to let HexaBeat app load your liveset + samples they must be accessible from the app domain. Thankfully all request across \\*.github.io domains are possible. So if you host your files on GitHub pages you will be able to load your assets without fears of cross-domain issues.\n\nThen to share your creation with the rest of the world, provide the link to your liveset file on a hash. Like this URL : https://maxwellito.github.io/hexabeat/#//you.github.io/my-hexabeat/my-little-pony.json\nThis link will open HexaBeat and load `//you.github.io/my-hexabeat/my-little-pony.json` and boot it. If the magic doesn't happen, maybe check the web console, you might have an error somewhere.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxwellito%2Fhexabeat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxwellito%2Fhexabeat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxwellito%2Fhexabeat/lists"}