{"id":42466222,"url":"https://github.com/bleugreen/phasefinder","last_synced_at":"2026-01-28T09:39:34.793Z","repository":{"id":251293531,"uuid":"834309079","full_name":"bleugreen/phasefinder","owner":"bleugreen","description":"fast, accurate beat estimation","archived":false,"fork":false,"pushed_at":"2026-01-15T20:34:52.000Z","size":2049,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-15T22:42:58.614Z","etag":null,"topics":["beat-estimation","mir","music-information-retrieval","tcn","tempo-estimation"],"latest_commit_sha":null,"homepage":"https://bleu.green/phasefinder","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bleugreen.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":"2024-07-26T22:51:04.000Z","updated_at":"2026-01-15T20:34:55.000Z","dependencies_parsed_at":"2024-08-02T02:59:59.579Z","dependency_job_id":null,"html_url":"https://github.com/bleugreen/phasefinder","commit_stats":null,"previous_names":["bleugreen/phasefinder"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bleugreen/phasefinder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bleugreen%2Fphasefinder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bleugreen%2Fphasefinder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bleugreen%2Fphasefinder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bleugreen%2Fphasefinder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bleugreen","download_url":"https://codeload.github.com/bleugreen/phasefinder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bleugreen%2Fphasefinder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28843988,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T07:39:25.367Z","status":"ssl_error","status_checked_at":"2026-01-28T07:39:24.487Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["beat-estimation","mir","music-information-retrieval","tcn","tempo-estimation"],"created_at":"2026-01-28T09:39:34.159Z","updated_at":"2026-01-28T09:39:34.785Z","avatar_url":"https://github.com/bleugreen.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"**phasefinder** is a beat estimation model that predicts metric position as rotational phase, heavily inspired by [this paper](https://archives.ismir.net/ismir2021/paper/000061.pdf).\n\n\n[full writeup here](https://bleu.green/phasefinder)\n\n\n# usage\n\n## python \n\n```python\nfrom phasefinder import Phasefinder\n\n# initialize model\npf = Phasefinder()\n\n# predict beats\naudio_path = \"path/to/your/audio/file.[wav/mp3/flac/etc]\"\nbeat_times = pf.predict(audio_path)\n\n# predict beats and BPM\nbeat_times, bpm = pf.predict(audio_path, include_bpm=True)\n\n# generate a click track\noutput_path = \"output_with_clicks.wav\"\npf.make_click_track(audio_path, output_path, beats=beat_times)\n```\n\n## cli\n\n### basic usage\n\n```bash\npython -m phasefinder.infer path/to/your/audio/file.wav\n```\n\nThis will print the estimated beat times to the console.\n\n### options\n\n- `--bpm`: Include BPM in the output\n- `--noclean`: Don't apply the cleaning function to the beat times\n- `--format {times,click_track}`: Choose the output format (default: times)\n  - `times`: Output beat times\n  - `click_track`: Generate an audio file with click track\n- `--audio_output PATH`: Specify the path for the output audio file with clicks (default: output_with_clicks.wav)\n- `--json_output PATH`: Save the results to a JSON file\n\n### examples\n\n1. Estimate beats and BPM:\n   ```bash\n   python -m phasefinder.infer path/to/audio.wav --bpm\n   ```\n\n2. Generate a click track:\n   ```bash\n   python -m phasefinder.infer path/to/audio.wav --format click_track --audio_output output.wav\n   ```\n\n3. Save results to a JSON file:\n   ```bash\n   python -m phasefinder.infer path/to/audio.wav --bpm --json_output results.json\n   ```\n\n4. Estimate beats without applying the cleaning function:\n   ```bash\n   python -m phasefinder.infer path/to/audio.wav --noclean\n   ```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbleugreen%2Fphasefinder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbleugreen%2Fphasefinder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbleugreen%2Fphasefinder/lists"}