{"id":28319130,"url":"https://github.com/stavrosmachinima/audiorate-app","last_synced_at":"2025-06-15T02:04:05.099Z","repository":{"id":285820927,"uuid":"959138469","full_name":"stavrosmachinima/audiorate-app","owner":"stavrosmachinima","description":"Audio Rating Survey to gather Mean Opinion Score data for university thesis","archived":false,"fork":false,"pushed_at":"2025-05-08T17:09:30.000Z","size":25484,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-01T16:49:56.258Z","etag":null,"topics":["ai","cookiecutter-template","flask","tts","tunneling"],"latest_commit_sha":null,"homepage":"https://audiorate.stavroslogbook.eu","language":"Python","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/stavrosmachinima.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":"2025-04-02T10:27:20.000Z","updated_at":"2025-05-08T17:09:34.000Z","dependencies_parsed_at":"2025-04-02T21:31:47.433Z","dependency_job_id":"8f771edc-549e-481b-8387-2294a0fe1ec1","html_url":"https://github.com/stavrosmachinima/audiorate-app","commit_stats":null,"previous_names":["stavrosmachinima/audiorate-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stavrosmachinima/audiorate-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stavrosmachinima%2Faudiorate-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stavrosmachinima%2Faudiorate-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stavrosmachinima%2Faudiorate-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stavrosmachinima%2Faudiorate-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stavrosmachinima","download_url":"https://codeload.github.com/stavrosmachinima/audiorate-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stavrosmachinima%2Faudiorate-app/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259910672,"owners_count":22930703,"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":["ai","cookiecutter-template","flask","tts","tunneling"],"created_at":"2025-05-25T09:10:15.722Z","updated_at":"2025-06-15T02:04:05.094Z","avatar_url":"https://github.com/stavrosmachinima.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🎧 Audio Rating Survey for Voice Cloning Evaluation\n\n![AudioRate](https://github.com/user-attachments/assets/8f87907c-29a4-4971-8095-97b3b89cc6cd)\n\nThis project presents a web-based **Mean Opinion Score (MOS) survey** designed to collect subjective evaluations of voice cloning systems. Developed as part of my thesis research on speech synthesis, the survey invites participants to listen to a ground truth voice line followed by several AI-generated samples, and rate how closely each sample resembles the original speaker.\n\nEach sample set is randomized — Model A does not always correspond to the same model across sets — so please evaluate each clip independently based on your first impression.\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to view evaluation scale\u003c/summary\u003e\n\n\n**🔍 Evaluation Scale:**\n\n- 1 - Bad: Sounds nothing like the original speaker  \n- 2 - Poor: Barely resembles the original speaker  \n- 3 - Fair: Somewhat similar but with noticeable differences  \n- 4 - Good: Very similar with minor differences  \n- 5 - Excellent: Virtually indistinguishable from the original\n  No technical expertise is needed. Your instinctive, honest reactions are most valuable.\n\u003c/details\u003e\n\n## Docker Quickstart\n\nThis app can be run completely using `Docker` and `docker compose`. **Using Docker is recommended, as it guarantees the application is run using compatible versions of Python and Node**.\n\nThere are three main services:\n\nTo run the development version of the app\n\n```bash\ndocker compose up flask-dev\n```\n\nTo run the production version of the app\n\n```bash\ndocker compose up flask-prod\n```\n\nThe list of `environment:` variables in the `docker compose.yml` file takes precedence over any variables specified in `.env`.\n\nTo run any commands using the `Flask CLI`\n\n```bash\ndocker compose run --rm manage \u003c\u003cCOMMAND\u003e\u003e\n```\n\nTherefore, to initialize a database you would run\n\n```bash\ndocker compose run --rm manage db init\ndocker compose run --rm manage db migrate\ndocker compose run --rm manage db upgrade\n```\n\nA docker volume `node-modules` is created to store NPM packages and is reused across the dev and prod versions of the application. For the purposes of DB testing with `sqlite`, the file `dev.db` is mounted to all containers. This volume mount should be removed from `docker compose.yml` if a production DB server is used.\n\nGo to `http://localhost:8080`. You will see a pretty welcome screen.\n\n### Running locally\n\nRun the following commands to bootstrap your environment if you are unable to run the application using Docker\n\n```bash\ncd audiorate\npip install -r requirements/dev.txt\nnpm install\nnpm run-script build\nnpm start  # run the webpack dev server and flask server using concurrently\n```\n\nGo to `http://localhost:5000`. You will see a pretty welcome screen.\n\n#### Database Initialization (locally)\n\nOnce you have installed your DBMS, run the following to create your app's\ndatabase tables and perform the initial migration\n\n```bash\nflask db init\nflask db migrate\nflask db upgrade\n```\n\n## Deployment\n\nWhen using Docker, reasonable production defaults are set in `docker compose.yml`\n\n```text\nFLASK_ENV=production\nFLASK_DEBUG=0\n```\n\nTherefore, starting the app in \"production\" mode is as simple as\n\n```bash\ndocker compose up flask-prod\n```\n\nIf running without Docker\n\n```bash\nexport FLASK_ENV=production\nexport FLASK_DEBUG=0\nexport DATABASE_URL=\"\u003cYOUR DATABASE URL\u003e\"\nnpm run build   # build assets with webpack\nflask run       # start the flask server\n```\n\n## Shell\n\nTo open the interactive shell, run\n\n```bash\ndocker compose run --rm manage shell\nflask shell # If running locally without Docker\n```\n\nBy default, you will have access to the flask `app`.\n\n## Running Tests/Linter\n\nTo run all tests, run\n\n```bash\ndocker compose run --rm manage test\nflask test # If running locally without Docker\n```\n\nTo run the linter, run\n\n```bash\ndocker compose run --rm manage lint\nflask lint # If running locally without Docker\n```\n\nThe `lint` command will attempt to fix any linting/style errors in the code. If you only want to know if the code will pass CI and do not wish for the linter to make changes, add the `--check` argument.\n\n## Migrations\n\nWhenever a database migration needs to be made. Run the following commands\n\n```bash\ndocker compose run --rm manage db migrate\nflask db migrate # If running locally without Docker\n```\n\nThis will generate a new migration script. Then run\n\n```bash\ndocker compose run --rm manage db upgrade\nflask db upgrade # If running locally without Docker\n```\n\nTo apply the migration.\n\nFor a full migration command reference, run `docker compose run --rm manage db --help`.\n\nIf you will deploy your application remotely (e.g on Heroku) you should add the `migrations` folder to version control.\nYou can do this after `flask db migrate` by running the following commands\n\n```bash\ngit add migrations/*\ngit commit -m \"Add migrations\"\n```\n\nMake sure folder `migrations/versions` is not empty.\n\n## Asset Management\n\nFiles placed inside the `assets` directory and its subdirectories\n(excluding `js` and `css`) will be copied by webpack's\n`file-loader` into the `static/build` directory. In production, the plugin\n`Flask-Static-Digest` zips the webpack content and tags them with a MD5 hash.\nAs a result, you must use the `static_url_for` function when including static content,\nas it resolves the correct file name, including the MD5 hash.\nFor example\n\n```html\n\u003clink rel=\"shortcut icon\" href=\"{{static_url_for('static', filename='build/favicon.ico') }}\"\u003e\n```\n\nIf all of your static files are managed this way, then their filenames will change whenever their\ncontents do, and you can ask Flask to tell web browsers that they\nshould cache all your assets forever by including the following line\nin ``.env``:\n\n```text\nSEND_FILE_MAX_AGE_DEFAULT=31556926  # one year\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstavrosmachinima%2Faudiorate-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstavrosmachinima%2Faudiorate-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstavrosmachinima%2Faudiorate-app/lists"}