{"id":13701081,"url":"https://github.com/Langhalsdino/StageMate","last_synced_at":"2025-05-04T20:32:05.278Z","repository":{"id":88313742,"uuid":"106699472","full_name":"Langhalsdino/StageMate","owner":"Langhalsdino","description":"StageMate is the smart assistant for your presentation. It will cover all aspects of your pitch from skipping slides to reminding you if you miss some major point.","archived":false,"fork":false,"pushed_at":"2017-10-24T07:19:14.000Z","size":2012,"stargazers_count":58,"open_issues_count":0,"forks_count":2,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-11-13T07:35:21.903Z","etag":null,"topics":["assistant","hackathon","nodejs","presentation","python","reveal-js","slides","speech-recognition","stagemate"],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Langhalsdino.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}},"created_at":"2017-10-12T13:54:30.000Z","updated_at":"2023-01-10T03:18:29.000Z","dependencies_parsed_at":"2023-03-12T08:45:20.592Z","dependency_job_id":null,"html_url":"https://github.com/Langhalsdino/StageMate","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Langhalsdino%2FStageMate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Langhalsdino%2FStageMate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Langhalsdino%2FStageMate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Langhalsdino%2FStageMate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Langhalsdino","download_url":"https://codeload.github.com/Langhalsdino/StageMate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252395426,"owners_count":21741034,"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":["assistant","hackathon","nodejs","presentation","python","reveal-js","slides","speech-recognition","stagemate"],"created_at":"2024-08-02T20:01:16.784Z","updated_at":"2025-05-04T20:32:00.258Z","avatar_url":"https://github.com/Langhalsdino.png","language":"HTML","funding_links":[],"categories":["HTML"],"sub_categories":[],"readme":"![](./assets/StageMate.jpg)\n\nThe main idea and motivation behind StageMate is to assist you while pitching your idea. It covers all aspects of your pitch from skipping slides to reminding you if you miss some major point.\u003cbr\u003e\nFurthermore, **it will keep an eye on you so that you stay in time**.\n\n**Our Inspiration**\u003cbr\u003e\nWe live in a time where you can have reasonable conversations with your computer, but you still need to ask a friend to sit in the audience to give you feedback on your presentation. Why can’t your computer do this too?\n\n**StageMate solves this issue and is your smart pitch-assistant.**\n\n## Table of Contents\n\n  * [What can your StageMate do?](#what-can-your-stagemate-do)\n  * [How we built it](#how-we-built-it)\n  * [Setup](#setup)\n    - [Setup the presentation with node.js](#setup-the-presentation-with-nodejs)\n    - [Setup audio transcription with python](#setup-audio-transcription-with-python)\n    - [Connect the audio transcription to node.js](#connect-the-audio-transcription-to-nodejs)\n  * [How to use StageMate](#how-to-use-stagemate)\n    - [Change target presentation](#change-target-presentation)\n    - [Change transcription configuration](#change-transcription-configuration)\n  * [What we learned](#what-we-learned)\n  * [Common issues](#common-issues)\n  * [Authors](#authors)\n\n## What can your StageMate do?\n![](./assets/WhatIsStageMate.png)\u003cbr\u003e\nStageMate listens to your speech and tries to match your speech to your notes and slides.\u003cbr\u003e\nTherefore, it can **proceed to the next slide**, **track your time** and **tell you whether you missed the point or not**.\n\nIf you do not believe us, check out this YouTube video of one of our first tests. We played some Buzzword Bingo with StageMate without manual interventions. **It's fully autonomous!**\n\n[![Demo](http://img.youtube.com/vi/ndpWiEG0GqM/0.jpg)](https://youtu.be/ndpWiEG0GqM)\u003cbr\u003e\n\nLeave a star if you like the idea :\n\n## How we built it\n![Our journey of building StageMate](./assets/StructureOfStageMate.png)\n\nStageMate consists of 3 modules. The first is an **audio processing and transcription module** that uses a sliding window approach in order to accomplish real-time transcription with the speech to text APIs by Microsoft Azure. \u003cbr\u003e\nThe second module contains the logic for **matching transcribed text to speaker notes** and emits events to the **presenter view**, the third module. It is a custom implementation of the presenter view for the presentation tool reveal.js.\n\nThe following gif animation shows all three parts in action:\n\n![](./assets/StageMateDemo.gif)\n\n\n## Setup\nIn order to setup StageMate, you will need to setup the node.js server and start the python script that transcribes your audio.\n\n### Setup the presentation with node.js\nNavigate into the `node-js` directory and install all node dependencies.\n```\ncd node-js\nnpm install\n```\nStart the StageMate Node.js server and checkout our default presentation with the special presenter view.\n```\nnpm start\n```\nThe **presentation** can be found here [localhost:3000/presentation](http://localhost:3000/presentation) and the **presenter view** here [localhost:3000/](http://localhost:3000/).\n\nYou can navigate through the slides and use the backup method of clicking on points to check them in the presenter view.\n\n### Setup audio transcription with python\nFirst of all, you need to make sure that you installed python ([download here](https://www.python.org/downloads/)) and pip ([How to install pip](https://pip.pypa.io/en/stable/installing/)). \u003cbr\u003e\nAfterwards, we install all the needed dependencies of the python script with pip.\n```\npip install requests\npip install pyaudio\npip install SpeechRecognition\n```\n\nNow you need to add some Bing Speech API keys to the Key Array ([audioTranscription.py](./AudioTranscription/audioTransciption.py) `line 20`). The needed amount varies depending on the selected `DELTA` value, in order to get no `to many request` response. A recommendation might be around `4/DELTA`.\u003cbr\u003e\nYou can get two keys with your GitHub account to try the [Bing Speech API](https://azure.microsoft.com/en-us/try/cognitive-services/) service.\n\nAfter the installation, you can try the script by simply starting it from the command line.\n```\npython ./AudioTranscription/audioTransciption.py\n```\nYou can see the results of the transcription of each sliding window in the command line.\n\nIf you want to tune the amount of sliding windows and their length, check out the comments in the [audioTranscription.py](./AudioTranscription/audioTransciption.py) script.\nFurthermore, you can change the microphone by its `AUDIO_DEVICE_INDEX` ([audioTranscription.py](./AudioTranscription/audioTransciption.py) `line 38`) according to the PyAudio definition.\n\n### Connect the audio transcription to node.js\nIn order to **enable the python script to send the transcription to the node.js server**, we need to expose the [localhost:3000/speech](http://localhost:3000/speech) API to the python script.\n\nIf you are using the **same computer** for the node.js server and the python script you do not need to change anything. \u003cbr\u003e\nIf you run them on **different computers**, you will need to change the `IP` of the server in the python script according to their new value ([audioTranscription.py](./AudioTranscription/audioTransciption.py) `line 44`).\n\nCongratulation 🎉 you **completed the setup process** of StageMate and can try it with our demo slides.\nWhen you mention the keywords as described by the bullet points on the **presenter view** it will proceed in the presentation.\nWe loved to play Buzzword Bingo, even though there was some latency in the system.\n\n## How to use StageMate\nLet's start with the interesting section. I imaging, after setting up the system and trying our demo, you want to **use your own slides and bullet points**.\u003cbr\u003e\nThere are two configurations you need to make. **Design your Reveal.js slides** and **configure the keywords and their actions** in the presentation.\n\n### Change target presentation\nSince StageMate is build on top of Reveal.js you can use any Reveal.js presentation.\nYou only need to replace the `node-js/presentation.html` file with your Reveal.js presentation.\n\nReveal.js presentations are written using HTML or Markdown but there's also an online editor for those of you who prefer a graphical interface (e.g. [slides.com](https://slides.com)).\n\n### Change transcription configuration\nThe transcription configuration contains the **information about each point on the slides and their following actions**. \u003cbr\u003e\nThe JSON file `node-js/processing/sample_data.json` contains this configuration and can be adjusted to your needs.\n\nThe structure of the file can be created according to the following template and should be straight forward to adapt.\n```json\n[{\n        \"slide\": 0,\n        \"notes\": [{\n            \"type\": \"buzzword\",\n            \"order\": 0,\n            \"text\": \"This is the description of the first point\",\n            \"data\": [\n                \"first keyword\",\n                \"second keyword\",\n                \"third keyword\"\n            ],\n            \"postactions\": [\n                \"triggerAnimation\"\n            ]\n            },{\n                \"type\": \"buzzword\",\n                \"order\": 1,\n                \"text\": \"This is the description of the second point\",\n                \"data\": [\n                    \"keyword\"\n                ],\n                \"postactions\": [\n                    \"hideBlock\"\n                ]\n            },\n            {\n                \"type\": \"buzzword\",\n                \"order\": 2,\n                \"text\": \"This is the description of the third point\",\n                \"data\": [\n                    \"keyword\"\n                ],\n                \"postactions\": [\n                    \"nextSlide\"\n                ]\n        }]\n    },\n    {\n        ...\n}]\n```\n\nNow you know everything that is needed to use StageMate for your own presentations.\nEnjoy our small tool that we coded during the 24h InnoHack 2017 Hackathon.\n\n## What we learned\n**StageMate is a Hackathon project** and was build in **\u003c 24h** since we managed to get some sleep (I know this is not the real Hackathon experience 😨). \u003cbr\u003e\nBesides the knowledge progress in the used technologies, we have learned to work in a team and to face and overcome the challenges.\n\n## Common issues\nHere are some of the **common issues** we encountered while setting up StageMate.\nIf you find an issue, we hope this might be helpful for you. Otherwise, please create a new issue.\n\n### Bing API - to many requests\nThe Bing speech API has a **limit for API requests**, therefore it might be helpful to generate more than one Bing API key to get a better performance out of the system.\n\n## Authors\n\n- **Frederic Tausch** @[Langhalsdino](https://github.com/Langhalsdino)\n- **Timo Schneider** @[tschneid](https://github.com/tschneid)\n- **Enrico Kaack** @[enrico-kaack](https://github.com/enrico-kaack)\n- **Jonas Fuchs** @[Jonasfuchs](https://github.com/Jonasfuchs)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLanghalsdino%2FStageMate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FLanghalsdino%2FStageMate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLanghalsdino%2FStageMate/lists"}