{"id":22877116,"url":"https://github.com/michaelheckmann/media-processor","last_synced_at":"2026-02-03T18:02:31.767Z","repository":{"id":185710275,"uuid":"666573424","full_name":"michaelheckmann/media-processor","owner":"michaelheckmann","description":"Transform, transcribe and anonymize your audio and video files.","archived":false,"fork":false,"pushed_at":"2024-08-26T11:48:30.000Z","size":3609,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-27T20:58:56.772Z","etag":null,"topics":["deepgram","electron","ffmpeg"],"latest_commit_sha":null,"homepage":"","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/michaelheckmann.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,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-07-14T21:59:58.000Z","updated_at":"2024-08-26T18:49:29.000Z","dependencies_parsed_at":"2023-12-21T12:37:01.173Z","dependency_job_id":"3f045970-291f-4f26-b3c4-9a3844130e2d","html_url":"https://github.com/michaelheckmann/media-processor","commit_stats":null,"previous_names":["michaelheckmann/media-processor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/michaelheckmann/media-processor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelheckmann%2Fmedia-processor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelheckmann%2Fmedia-processor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelheckmann%2Fmedia-processor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelheckmann%2Fmedia-processor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michaelheckmann","download_url":"https://codeload.github.com/michaelheckmann/media-processor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelheckmann%2Fmedia-processor/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262788708,"owners_count":23364396,"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":["deepgram","electron","ffmpeg"],"created_at":"2024-12-13T15:29:54.615Z","updated_at":"2026-02-03T18:02:26.737Z","avatar_url":"https://github.com/michaelheckmann.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"./media-processor.png\"\u003e\n\u003c/p\u003e\n\n# Media Processor 📼\n\nThis is a MacOS desktop app that allows you to process media in various ways. It's built with [Electron](https://www.electronjs.org/) and [React](https://reactjs.org/). The project was created to streamline the user research operations at [Amay Health](https://www.amayhealth.com). It's currently supporting these transformations:\n\n- [x] Compress video and audio files\n- [x] Transcribe video and audio files using [Deepgram](https://www.deepgram.com/)\n- [x] Anonymize video and audio files by blurring the video and pitch shifting the audio\n- [x] Run Named Entity Recognition (NER) on the transcript to identify people, places, and organizations\n- [x] Redact video files, audio files as well as transcripts\n- [x] Export the transcript to Notion-friendly markdown format\n\n## Getting Started\n\nTo get started using the app, just clone the repo, install the dependencies and build the app.\n\n### Package Manager\n\nThe repository uses `yarn` as the package manager. To check whether `yarn` is already installed, run this command in your terminal:\n\n```bash\nyarn --version\n```\n\nIf it is not yet installed, you can install it with this command:\n\n```bash\nnpm install --global yarn\n```\n\n[Learn more here about yarn.](https://classic.yarnpkg.com/lang/en/docs/install/#mac-stable)\n\n### Dependencies\n\nInstall all the required dependencies by running this command in the project directory:\n\n```bash\nyarn\n```\n\n### Build\n\nTo build the app, run this command in the project directory:\n\n```bash\nyarn make\n```\n\nThis will create a `out` folder in the project directory. Inside the `out` folder, you will find the `Media Processor.app` file. You can now run the app by double clicking on the `Media Processor.app` file.\n\n## Development\n\nTo start the app in development mode, run this command in the project directory:\n\n```bash\nyarn start\n```\n\nThis will open the app in a new window. You can now make changes to the front-end code and the app will automatically reload. Note that you will have to restart the app if you make changes to the back-end code.\n\n## Feature Deep Dive\n\n### Media Transformations\n\nThe app contains all the necessary dependencies for `ffmpeg`, so no need to install it separately. The app uses the `ffmpeg` command line tool to perform the media transformations. The `ffmpeg` command line tool is a powerful tool that can do a lot of things. You can learn more about it [here](https://ffmpeg.org/).\n\n### Transcription\n\nThe app uses [Deepgram](https://www.deepgram.com/) to transcribe video and audio files. You will need to create a Deepgram account and get an API key to use the transcription feature. You can create a Deepgram account [here](https://console.deepgram.com/signup). Once you have created an account, you can get your API key on the console's dashboard screen. Copy the API key and paste it in the `DEEPGRAM API KEY` input in the app's settings. Note that this value will be stored in plain text in the app's settings file.\n\n### Named Entity Recognition (NER)\n\nThe app uses [flair](https://github.com/flairNLP/flair) to perform NER on the transcript. Flair is a powerful NLP library that is used to identify people, places, and organizations in text. Since the models are quite large, I have decided not to bundle the script code in the app. Instead, the app will prompt you to drag and drop an `NER` folder that points to directory containing the `NER` script.\n\nThe project contains the `ner` folder in the root of the repository. Since the script is written in Python, make sure that you have Python installed on your machine. You can download Python [here](https://www.python.org/downloads/). Python should come pre-installed on MacOS. You can check whether Python is installed by running this command in your terminal:\n\n```bash\npython3 --version\n```\n\nThe transcription process produces a `sentences.txt` file which is optimized for the NER script. The NER script will read the `sentences.txt` file and the `ner` folder and produce a `ner-analysis.txt` file which contains the identified entities.\n\n### Redaction\n\nThe app makes it very easy to anonymize audio and transcript files. To redact a piece of information, load the media file into the app, press the `Edit Redaction Config` command from the `Redaction` task option and drop the generated `transcription` folder into the new editor window.\n\nTo redact a piece of information, you will need to surround the piece of text with square brackets and provide an alternative text in round brackets after the square brackets. The editor is built from [Monaco](https://github.com/microsoft/monaco-editor), so you will get most of its features like find and replace, syntax highlighting, etc.\n\nExample:\n\n```markdown\nI went shopping today with [Michael](a friend) at [Target](a Grocery Store).\n```\n\nThis will redact the names `Michael` and `Target` from the transcript and replace them with `a friend` and `Grocery Store` respectively.\n\n```\nI went shopping today with a friend at Grocery Store.\n```\n\nThe corresponding audio file will also be redacted.\n\nPlease not that any changes to the text content outside of these changes will not be respected. So if you want to edit the transcript, please do so using the general text editor from the main app window.\n\n### Export\n\nCurrently, the script is only exporting files to a folder on your machine. In the future, I would like to add the ability to export media files and transcripts straight to Notion or AWS.\n\n## Trouble Shooting\n\nIf you encounter this error when starting the app using `yarn start`:\n\n```\n\n...\nconst stringWidth = require('string-width');\n...\n\n```\n\nthen you just have to delete the `node_modules` folder and install the dependencies again. You can use the command below to do that:\n\n```bash\nyarn nuke\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelheckmann%2Fmedia-processor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichaelheckmann%2Fmedia-processor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelheckmann%2Fmedia-processor/lists"}