{"id":20255304,"url":"https://github.com/projectm-visualizer/gst-projectm","last_synced_at":"2025-09-01T03:06:21.382Z","repository":{"id":224767585,"uuid":"753397184","full_name":"projectM-visualizer/gst-projectm","owner":"projectM-visualizer","description":"This is a plugin for GStreamer that allows you to utilize the ProjectM library to create visualizations from audio.","archived":false,"fork":false,"pushed_at":"2025-05-01T15:24:40.000Z","size":4883,"stargazers_count":7,"open_issues_count":5,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-17T10:41:37.565Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/projectM-visualizer.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}},"created_at":"2024-02-06T03:12:42.000Z","updated_at":"2025-05-11T02:12:34.000Z","dependencies_parsed_at":"2024-07-06T18:45:26.776Z","dependency_job_id":"1b4a5c14-9710-4f67-843d-d291edab9c73","html_url":"https://github.com/projectM-visualizer/gst-projectm","commit_stats":null,"previous_names":["projectm-visualizer/gst-projectm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/projectM-visualizer/gst-projectm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectM-visualizer%2Fgst-projectm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectM-visualizer%2Fgst-projectm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectM-visualizer%2Fgst-projectm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectM-visualizer%2Fgst-projectm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/projectM-visualizer","download_url":"https://codeload.github.com/projectM-visualizer/gst-projectm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectM-visualizer%2Fgst-projectm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273068847,"owners_count":25039911,"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-09-01T02:00:09.058Z","response_time":120,"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":"2024-11-14T10:38:03.093Z","updated_at":"2025-09-01T03:06:21.359Z","avatar_url":"https://github.com/projectM-visualizer.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca id=\"readme-top\"\u003e\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![LGPL-2.1][license-shield]][license-url]\n\n\u003cbr /\u003e\n\n\u003ch3 align=\"center\"\u003egst-projectm\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    GStreamer plugin utilizing the \u003ca href=\"https://github.com/projectM-visualizer/projectm\" target=\"_blank\"\u003eProjectM\u003c/a\u003e library.\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/projectM-visualizer/gst-projectm/issues\" target=\"_blank\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/projectM-visualizer/gst-projectm/issues\" target=\"_blank\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#easy-audio-to-video-conversion\"\u003eEasy Audio to Video Conversion\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#docker-container\"\u003eUsing Docker Container\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#conversion-examples\"\u003eConversion Examples\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#customizing-visualizations\"\u003eCustomizing Visualizations\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#manual-usage\"\u003eManual Usage\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#support\"\u003eSupport\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n\u003c!-- GETTING STARTED --\u003e\n\n## Getting Started\n\nThe documentation has been organized into distinct files, each dedicated to a specific platform. Within each file, you'll find detailed instructions covering the setup of prerequisites, the building process, installation steps, and guidance on utilizing the plugin on the respective platform.\n\n- **[Linux](docs/LINUX.md)**\n- **[OSX](docs/OSX.md)**\n- **[Windows](docs/WINDOWS.md)**\n\nOnce the plugin has been installed, you can use it something like this:\n\n```shell\ngst-launch pipewiresrc ! queue ! audioconvert ! projectm preset=/usr/local/share/projectM/presets preset-duration=5 ! video/x-raw,width=2048,height=1440,framerate=60/1 ! videoconvert ! xvimagesink sync=false\n```\n\nOr to convert an audio file to video:\n\n```shell\nfilesrc location=input.mp3 ! decodebin name=dec \\\n    decodebin ! tee name=t \\\n      t. ! queue ! audioconvert ! audioresample ! \\\n            capsfilter caps=\"audio/x-raw, format=F32LE, channels=2, rate=44100\" ! avenc_aac bitrate=256000 ! queue ! mux. \\\n      t. ! queue ! audioconvert ! projectm preset=/usr/local/share/projectM/presets preset-duration=3 mesh-size=1024,576 ! \\\n            identity sync=false ! videoconvert ! videorate ! video/x-raw,framerate=60/1,width=3840,height=2160 ! \\\n            x264enc bitrate=35000 key-int-max=300 speed-preset=veryslow ! video/x-h264,stream-format=avc,alignment=au ! queue ! mux. \\\n  mp4mux name=mux ! filesink location=render.mp4;\n```\n\nAvailable options\n\n```shell\ngst-inspect projectm\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## [Demo Videos (4K)](https://www.youtube.com/watch?v=fI3BMiVDQgU\u0026list=PLFLkbObX4o6TK1jGL6pm1wMwvq2FXnpYJ\u0026index=7)\n\nhttps://www.youtube.com/watch?v=fI3BMiVDQgU\u0026list=PLFLkbObX4o6TK1jGL6pm1wMwvq2FXnpYJ\u0026index=7\n\n\u003c!-- EASY AUDIO TO VIDEO CONVERSION --\u003e\n\n## Easy Audio to Video Conversion\n\nWe provide a simple way to convert audio files to video with ProjectM visualizations using Docker. This method requires no manual installation of dependencies, as everything is packaged in a Docker container.\n\n### Docker Container\n\nThe included Docker container has:\n\n- ProjectM library and presets\n- GStreamer with all necessary plugins\n- The gst-projectm plugin compiled and ready to use\n- GPU acceleration support (NVIDIA, AMD, or Intel)\n\n#### Prerequisites\n\n- [Docker](https://docs.docker.com/get-docker/) installed on your system\n- For GPU acceleration:\n  - NVIDIA GPUs: [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html)\n  - AMD/Intel GPUs: No additional installation required\n\n#### Quick Start\n\n1. Clone this repository:\n\n   ```bash\n   git clone https://github.com/projectM-visualizer/gst-projectm.git\n   cd gst-projectm\n   ```\n\n2. Convert an audio file to video:\n   ```bash\n   ./projectm-convert -i your-audio-file.mp3 -o output-video.mp4\n   ```\n\nThe first run will build the Docker container automatically. It will take a good while, so be patient. Once built, it will be cached for future runs.\n\nNote that running the conversion can take hours depending on the length of the audio file and the selected settings.\n\n### Conversion Examples\n\n#### Basic Conversion\n\nConvert an MP3 to a 1080p MP4 with default settings:\n\n```bash\n./projectm-convert -i my-song.mp3 -o my-visualization.mp4\n```\n\n#### 4K Resolution\n\nCreate a 4K video with higher bitrate:\n\n```bash\n./projectm-convert -i my-song.mp3 -o my-visualization-4k.mp4 --video-size 3840x2160 -b 16000\n```\n\n#### High Quality Render\n\nFor creating high quality videos (slower encoding):\n\n```bash\n./projectm-convert -i my-song.mp3 -o my-visualization-hq.mp4 --speed veryslow --mesh 2048x1152\n```\n\n#### Quick Test Run\n\nFor quick testing (lower quality but faster encoding):\n\n```bash\n./projectm-convert -i my-song.mp3 -o my-visualization-test.mp4 --speed ultrafast --video-size 1280x720\n```\n\n### Customizing Visualizations\n\nThe conversion script supports customizing various aspects of the visualization:\n\n| Option                | Description                                        | Default         |\n| --------------------- | -------------------------------------------------- | --------------- |\n| `-d, --duration SEC`  | Time in seconds between preset transitions         | 6               |\n| `--mesh WxH`          | Mesh size for visualization calculations           | 1024x576        |\n| `--video-size WxH`    | Output video resolution                            | 1920x1080       |\n| `-r, --framerate FPS` | Output video frame rate                            | 60              |\n| `-b, --bitrate KBPS`  | Output video bitrate in kbps                       | 8000            |\n| `--speed PRESET`      | x264 encoding speed preset (ultrafast to veryslow) | medium          |\n| `-p, --preset DIR`    | Path to custom presets directory                   | Default presets |\n\n#### Using Custom Presets\n\nIf you have your own ProjectM preset files:\n\n```bash\n./projectm-convert -i my-song.mp3 -o my-visualization.mp4 -p /path/to/your/presets\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- MANUAL USAGE --\u003e\n\n## Manual Usage\n\nOnce the plugin has been installed, you can use it something like this:\n\n```shell\ngst-launch pipewiresrc ! queue ! audioconvert ! projectm preset=/usr/local/share/projectM/presets preset-duration=5 ! video/x-raw,width=2048,height=1440,framerate=60/1 ! videoconvert ! xvimagesink sync=false\n```\n\nOr to convert an audio file to video:\n\n```shell\ngst-launch-1.0 -e \\\n  filesrc location=input.mp3  ! \\\n    decodebin ! tee name=t \\\n      t. ! queue ! audioconvert ! audioresample ! \\\n            capsfilter caps=\"audio/x-raw, format=F32LE, channels=2, rate=44100\" ! avenc_aac bitrate=320000 ! queue ! mux. \\\n      t. ! queue ! audioconvert ! projectm preset=/usr/local/share/projectM/presets texture-dir=/usr/local/share/projectM/textures preset-duration=6 mesh-size=1024,576 ! \\\n            identity sync=false ! videoconvert ! videorate ! video/x-raw,framerate=60/1,width=3840,height=2160 ! \\\n            x264enc bitrate=50000 key-int-max=200 speed-preset=veryslow ! video/x-h264,stream-format=avc,alignment=au ! queue ! mux. \\\n    mp4mux name=mux ! filesink location=output.mp4\n```\n\nYou may need to adjust some elements which may or may not be present in your GStreamer installation, such as x264enc, avenc_aac, etc.\n\nAvailable options:\n\n```shell\ngst-inspect projectm\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- CONTRIBUTING --\u003e\n\n## Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\nIf you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag \"enhancement\".\nDon't forget to give the project a star! Thanks again!\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- LICENSE --\u003e\n\n## License\n\nDistributed under the LGPL-2.1 license. See `LICENSE` for more information.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- SUPPORT --\u003e\n\n## Support\n\n[![Discord][discord-shield]][discord-url]\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- CONTACT --\u003e\n\n## Contact\n\nBlaquewithaq (Discord: SoFloppy#1289) - [@anomievision](https://twitter.com/anomievision) - anomievision@gmail.com\n\nMischa (Discord: mish) - [@revmischa](https://github.com/revmischa)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-----------------------------------------------------------------------\u003e\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n\n[contributors-shield]: https://img.shields.io/github/contributors/projectM-visualizer/gst-projectm.svg?style=for-the-badge\n[contributors-url]: https://github.com/projectM-visualizer/gst-projectm/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/projectM-visualizer/gst-projectm.svg?style=for-the-badge\n[forks-url]: https://github.com/projectM-visualizer/gst-projectm/network/members\n[stars-shield]: https://img.shields.io/github/stars/projectM-visualizer/gst-projectm.svg?style=for-the-badge\n[stars-url]: https://github.com/projectM-visualizer/gst-projectm/stargazers\n[issues-shield]: https://img.shields.io/github/issues/projectM-visualizer/gst-projectm.svg?style=for-the-badge\n[issues-url]: https://github.com/projectM-visualizer/gst-projectm/issues\n[license-shield]: https://img.shields.io/github/license/projectM-visualizer/gst-projectm.svg?style=for-the-badge\n[license-url]: https://github.com/projectM-visualizer/gst-projectm/blob/master/LICENSE\n[crates-shield]: https://img.shields.io/crates/v/gst-projectm?style=for-the-badge\n[crates-url]: https://crates.io/crates/gst-projectm\n[crates-dl-shield]: https://img.shields.io/crates/d/gst-projectm?style=for-the-badge\n[crates-dl-url]: https://crates.io/crates/gst-projectm\n[discord-shield]: https://img.shields.io/discord/737206408482914387?style=for-the-badge\n[discord-url]: https://discord.gg/7fQXN43n9W\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprojectm-visualizer%2Fgst-projectm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprojectm-visualizer%2Fgst-projectm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprojectm-visualizer%2Fgst-projectm/lists"}