{"id":30698824,"url":"https://github.com/wsand02/waveemapi3","last_synced_at":"2026-05-14T20:33:28.264Z","repository":{"id":311677911,"uuid":"990108776","full_name":"wsand02/waveemapi3","owner":"wsand02","description":"yet another wav to mp3 api","archived":false,"fork":false,"pushed_at":"2025-09-15T14:54:40.000Z","size":12715,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-15T15:24:48.473Z","etag":null,"topics":["mp3","rest-api","rocket","rust","wav"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wsand02.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":"2025-05-25T14:21:19.000Z","updated_at":"2025-09-15T14:52:17.000Z","dependencies_parsed_at":"2025-08-26T00:08:45.035Z","dependency_job_id":null,"html_url":"https://github.com/wsand02/waveemapi3","commit_stats":null,"previous_names":["wsand02/waveemapi3"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/wsand02/waveemapi3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wsand02%2Fwaveemapi3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wsand02%2Fwaveemapi3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wsand02%2Fwaveemapi3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wsand02%2Fwaveemapi3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wsand02","download_url":"https://codeload.github.com/wsand02/waveemapi3/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wsand02%2Fwaveemapi3/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33042221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"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":["mp3","rest-api","rocket","rust","wav"],"created_at":"2025-09-02T11:01:04.400Z","updated_at":"2026-05-14T20:33:28.259Z","avatar_url":"https://github.com/wsand02.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# waveemapi3\n![GitHub Release](https://img.shields.io/github/v/release/wsand02/waveemapi3)\n[![Rust](https://github.com/wsand02/waveemapi3/actions/workflows/rust.yml/badge.svg)](https://github.com/wsand02/waveemapi3/actions/workflows/rust.yml)\n[![Clippy check](https://github.com/wsand02/waveemapi3/actions/workflows/clippy.yml/badge.svg)](https://github.com/wsand02/waveemapi3/actions/workflows/clippy.yml)\n[![Publish Docker image](https://github.com/wsand02/waveemapi3/actions/workflows/docker-publish.yml/badge.svg)](https://hub.docker.com/r/wsand02/waveemapi3)\n![GitHub repo size](https://img.shields.io/github/repo-size/wsand02/waveemapi3)\n![GitHub License](https://img.shields.io/github/license/wsand02/waveemapi3)\n\n**waveemapi3** is yet another WAV-to-MP3 API, but at least it's not an FFmpeg wrapper. (I wish it was at this point 😭😭).\n\nThis service is intended for internal API-to-API communication with simple API authentication. It only really exists because LAME is licensed with the LGPL license.\n\n## Installation\n\n### Building from Source\n\n```bash\ngit clone https://github.com/wsand02/waveemapi3.git\ncd waveemapi3\ncargo build --release\n```\n\nCreate the data directory. Ensure the user running waveemapi has the correct permissions for the directory.\n\n```bash\nmkdir data\n```\n\nCopy `waveemapi.toml.example` into `waveemapi.toml`.\n\nIf your data folder is not in the same directory as `Cargo.toml`, or is called anything other than `data`, please declare it under `data_path` in the configuration file. Alternatively as an environment variable, see the [environment variable](#environment-variables) section for more info.\n\n### Docker Compose\n\nCopy `docker-compose.yml.example` into `docker-compose.yml`.\n\nEdit the tokens and other environment variables to your liking.\n\nRun Docker Compose:\n\n```bash\ndocker-compose up -d\n```\n\nVerify the service is running:\n\n```bash\ndocker-compose ps\n```\n\n## API Routes\n\n### `(GET) /api/status`\n\nReturns a simple JSON status response.\n\n#### Example Response:\n\n```json\n{\n  \"status\": \"Online\"\n}\n```\n\n### `(POST) /api/upload`\n\nAccepts a multipart form upload:\n- `wav`: The WAV file to convert.\n- Requires a bearer token, if authentication is enabled.\n\n#### Example Request:\n\n```bash\ncurl -X POST \\\n  -H \"Authorization: Bearer your_token\" \\\n  -F \"wav=@path/to/file.wav\" \\\n  http://localhost:8000/api/upload\n```\n\nReturns a raw MP3 file, or a multitude of errors.\n\n## Configuration\n\n**waveemapi** uses a configuration file named `waveemapi.toml` and supports environment variable overrides.\n\n**Note:** waveemapi inherits all of Rocket's [available settings](https://rocket.rs/guide/v0.5/configuration/#configuration).\n\n### `waveemapi.toml`\n\n```toml\n[default]\n# Limits for form uploads\nlimits = { form = \"1 GiB\", data-form = \"1 GB\", file = \"500 MB\" }\n\n# API authentication tokens. Add tokens to enable bearer token authentication.\nauth_tokens = [\n  \"your_secret_token\"\n]\n\n# Enable or disable authentication. Set to `false` to bypass authentication.\nauth_enabled = true\n\n# How often the data folder should be cleaned.\ncleanup_interval_minutes = 5\n\n# Only delete files older than this during cleanup.\nfile_expiry_minutes = 10\n```\n\n### Environment Variables\n\nYou can override the configuration using environment variables. The following variables are supported:\n\n+ `WAVEEMAPI_DATA_PATH`: Path to the directory where data files are stored.\n+ `WAVEEMAPI_AUTH_ENABLED`: Set to `true` or `false` to enable or disable authentication.\n+ `WAVEEMAPI_PROFILE`: Specify the configuration profile to use (e.g., `default`).\n+ `WAVEEMAPI_AUTH_TOKENS`: A list of API tokens.\n+ `WAVEEMAPI_CLEANUP_INTERVAL_MINUTES`: How often the data folder should be cleaned.\n+ `WAVEEMAPI_FILE_EXPIRY_MINUTES`: How old the files deleted during cleanup have to be.\n\n#### Example:\n\n```bash\nexport WAVEEMAPI_DATA_PATH=\"/path/to/data\"\nexport WAVEEMAPI_AUTH_ENABLED=true\n```\n\n## License\n\nAs stated earlier, this project is licensed under the LGPL license, see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwsand02%2Fwaveemapi3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwsand02%2Fwaveemapi3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwsand02%2Fwaveemapi3/lists"}