├── .gitignore ├── .streamlit └── config.toml ├── CITATION.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── Procfile ├── README.md ├── docs ├── Project Documentation.pdf ├── proj1rubric.md └── proj1rubricComments.pdf ├── media ├── demo.PNG ├── logo │ ├── logo.gif │ ├── simple_logo.gif │ ├── v1.PNG │ └── v2.PNG └── working_animation │ └── scrivener_working.gif ├── requirements.txt ├── setup.sh ├── source ├── .streamlit │ └── config.toml ├── README.md ├── helper │ ├── README.md │ ├── __init__.py │ ├── cleanup.py │ └── split_audio.py ├── main │ ├── README.md │ ├── __init__.py │ ├── summarize.py │ ├── transcribe.py │ └── transcribe_yt.py └── scrivener_user_interface.py └── test ├── David Cook - Hello.mp3 ├── Output1.PNG ├── Output2.PNG ├── Output3.PNG ├── Output4.PNG ├── README.md ├── sample.wmv ├── valid video 1.mp4 ├── valid video 2.mp4 └── valid video 3.mp4 /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /.streamlit/config.toml: -------------------------------------------------------------------------------- 1 | [theme] 2 | base="dark" 3 | primaryColor="#da4b58" 4 | backgroundColor="#000000" 5 | secondaryBackgroundColor="#127275" 6 | font="monospace" -------------------------------------------------------------------------------- /CITATION.md: -------------------------------------------------------------------------------- 1 | For the most up to date citation, click the following badge: 2 | [![DOI](https://zenodo.org/badge/409326011.svg)](https://zenodo.org/badge/latestdoi/409326011) 3 | 4 | # BibTeX 5 | ```text 6 | @software{anshul_patel_2021_5532972, 7 | author = {Anshul Patel and 8 | pragna98 and 9 | AgrawalBhavya}, 10 | title = {anshulp2912/scrivener: Pre-release v0.0}, 11 | month = sep, 12 | year = 2021, 13 | publisher = {Zenodo}, 14 | version = {prerelease}, 15 | doi = {10.5281/zenodo.5532972}, 16 | url = {https://doi.org/10.5281/zenodo.5532972} 17 | } 18 | ``` 19 | # CSL 20 | ```text 21 | { 22 | "publisher": "Zenodo", 23 | "DOI": "10.5281/zenodo.5532972", 24 | "title": "anshulp2912/scrivener: Pre-release v0.0", 25 | "issued": { 26 | "date-parts": [ 27 | [ 28 | 2021, 29 | 9, 30 | 27 31 | ] 32 | ] 33 | }, 34 | "abstract": "No description provided.", 35 | "author": [ 36 | { 37 | "family": "Anshul Patel" 38 | }, 39 | { 40 | "family": "pragna98" 41 | }, 42 | { 43 | "family": "AgrawalBhavya" 44 | } 45 | ], 46 | "version": "prerelease", 47 | "type": "article", 48 | "id": "5532972" 49 | } 50 | ``` 51 | # DataCite 52 | ```text 53 | 54 | 55 | 10.5281/zenodo.5532972 56 | 57 | 58 | Anshul Patel 59 | 60 | 61 | pragna98 62 | 63 | 64 | AgrawalBhavya 65 | 66 | 67 | 68 | anshulp2912/scrivener: Pre-release v0.0 69 | 70 | Zenodo 71 | 2021 72 | 73 | 2021-09-27 74 | 75 | 76 | 77 | https://zenodo.org/record/5532972 78 | 79 | 80 | https://github.com/anshulp2912/scrivener/tree/prerelease 81 | 10.5281/zenodo.5532971 82 | 83 | prerelease 84 | 85 | Open Access 86 | 87 | 88 | No description provided. 89 | 90 | 91 | ``` 92 | # Dublin Core 93 | ``` text 94 | 95 | 96 | Anshul Patel 97 | pragna98 98 | AgrawalBhavya 99 | 2021-09-27 100 | No description provided. 101 | https://zenodo.org/record/5532972 102 | 10.5281/zenodo.5532972 103 | oai:zenodo.org:5532972 104 | url:https://github.com/anshulp2912/scrivener/tree/prerelease 105 | doi:10.5281/zenodo.5532971 106 | info:eu-repo/semantics/openAccess 107 | anshulp2912/scrivener: Pre-release v0.0 108 | info:eu-repo/semantics/other 109 | software 110 | 111 | ``` 112 | # DCAT 113 | ``` text 114 | 115 | 116 | 117 | 118 | 119 | https://doi.org/10.5281/zenodo.5532972 120 | 121 | 122 | 123 | 124 | Anshul Patel 125 | 126 | 127 | 128 | 129 | 130 | pragna98 131 | 132 | 133 | 134 | 135 | 136 | AgrawalBhavya 137 | 138 | 139 | anshulp2912/scrivener: Pre-release v0.0 140 | 141 | 142 | Zenodo 143 | 144 | 145 | 2021 146 | 2021-09-27 147 | 148 | 149 | 150 | https://zenodo.org/record/5532972 151 | url 152 | 153 | 154 | 155 | 156 | prerelease 157 | No description provided. 158 | 159 | 160 | 161 | Open Access 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | https://doi.org/10.5281/zenodo.5532972 172 | 8384591 173 | https://zenodo.org/record/5532972/files/anshulp2912/scrivener-prerelease.zip 174 | application/zip 175 | 176 | 177 | 178 | 179 | ``` 180 | 181 | # JSON 182 | ``` text 183 | { 184 | "files": [ 185 | { 186 | "links": { 187 | "self": "https://zenodo.org/api/files/8f2a0202-6112-42d1-8c37-21e9dbeedc66/anshulp2912/scrivener-prerelease.zip" 188 | }, 189 | "checksum": "md5:4caf86c4b7f2ca061b0bbe84df61d074", 190 | "bucket": "8f2a0202-6112-42d1-8c37-21e9dbeedc66", 191 | "key": "anshulp2912/scrivener-prerelease.zip", 192 | "type": "zip", 193 | "size": 8384591 194 | } 195 | ], 196 | "owners": [ 197 | 251329 198 | ], 199 | "doi": "10.5281/zenodo.5532972", 200 | "stats": { 201 | "version_unique_downloads": 1.0, 202 | "unique_views": 0.0, 203 | "views": 0.0, 204 | "version_views": 0.0, 205 | "unique_downloads": 1.0, 206 | "version_unique_views": 0.0, 207 | "volume": 8384591.0, 208 | "version_downloads": 1.0, 209 | "downloads": 1.0, 210 | "version_volume": 8384591.0 211 | }, 212 | "links": { 213 | "doi": "https://doi.org/10.5281/zenodo.5532972", 214 | "conceptdoi": "https://doi.org/10.5281/zenodo.5532971", 215 | "bucket": "https://zenodo.org/api/files/8f2a0202-6112-42d1-8c37-21e9dbeedc66", 216 | "conceptbadge": "https://zenodo.org/badge/doi/10.5281/zenodo.5532971.svg", 217 | "html": "https://zenodo.org/record/5532972", 218 | "latest_html": "https://zenodo.org/record/5532972", 219 | "badge": "https://zenodo.org/badge/doi/10.5281/zenodo.5532972.svg", 220 | "latest": "https://zenodo.org/api/records/5532972" 221 | }, 222 | "conceptdoi": "10.5281/zenodo.5532971", 223 | "created": "2021-09-27T22:30:39.058642+00:00", 224 | "updated": "2021-09-28T01:48:26.903846+00:00", 225 | "conceptrecid": "5532971", 226 | "revision": 3, 227 | "id": 5532972, 228 | "metadata": { 229 | "access_right_category": "success", 230 | "doi": "10.5281/zenodo.5532972", 231 | "description": "No description provided.", 232 | "license": { 233 | "id": "other-open" 234 | }, 235 | "title": "anshulp2912/scrivener: Pre-release v0.0", 236 | "relations": { 237 | "version": [ 238 | { 239 | "count": 1, 240 | "index": 0, 241 | "parent": { 242 | "pid_type": "recid", 243 | "pid_value": "5532971" 244 | }, 245 | "is_last": true, 246 | "last_child": { 247 | "pid_type": "recid", 248 | "pid_value": "5532972" 249 | } 250 | } 251 | ] 252 | }, 253 | "version": "prerelease", 254 | "publication_date": "2021-09-27", 255 | "creators": [ 256 | { 257 | "name": "Anshul Patel" 258 | }, 259 | { 260 | "name": "pragna98" 261 | }, 262 | { 263 | "name": "AgrawalBhavya" 264 | } 265 | ], 266 | "access_right": "open", 267 | "resource_type": { 268 | "type": "software", 269 | "title": "Software" 270 | }, 271 | "related_identifiers": [ 272 | { 273 | "scheme": "url", 274 | "identifier": "https://github.com/anshulp2912/scrivener/tree/prerelease", 275 | "relation": "isSupplementTo" 276 | }, 277 | { 278 | "scheme": "doi", 279 | "identifier": "10.5281/zenodo.5532971", 280 | "relation": "isVersionOf" 281 | } 282 | ] 283 | } 284 | } 285 | 286 | ``` 287 | # MARKCXML 288 | ``` text 289 | 290 | 291 | 00000nmm##2200000uu#4500 292 | 20210928014826.0 293 | 5532972 294 | 295 | pragna98 296 | 297 | 298 | AgrawalBhavya 299 | 300 | 301 | 8384591 302 | md5:4caf86c4b7f2ca061b0bbe84df61d074 303 | https://zenodo.org/record/5532972/files/anshulp2912/scrivener-prerelease.zip 304 | 305 | 306 | open 307 | 308 | 309 | 2021-09-27 310 | 311 | 312 | software 313 | oai:zenodo.org:5532972 314 | 315 | 316 | Anshul Patel 317 | 318 | 319 | anshulp2912/scrivener: Pre-release v0.0 320 | 321 | 322 | Other (Open) 323 | 324 | 325 | cc-by 326 | opendefinition.org 327 | 328 | 329 | No description provided. 330 | 331 | 332 | url 333 | isSupplementTo 334 | https://github.com/anshulp2912/scrivener/tree/prerelease 335 | 336 | 337 | doi 338 | isVersionOf 339 | 10.5281/zenodo.5532971 340 | 341 | 342 | 10.5281/zenodo.5532972 343 | doi 344 | 345 | 346 | software 347 | 348 | 349 | ``` 350 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | Anshul Patel anshulp2912@gmail.com. 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # HELLO!! WELCOME TO CONTRIBUTING TO SCRIVENER :) 2 | ## Thanks for being here and taking your time to contribute.
3 | The following is a set of guidelines for contributing to "SCRIVENER" and its packages, which are hosted in the [Scrivener](https://github.com/anshulp2912/scrivener) on GitHub. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request.
4 | 5 | ## Table of Contents 6 | [Code of Conduct](https://github.com/anshulp2912/SE_Fall2021_G13_HW2b/blob/main/CODE_OF_CONDUCT.md)
7 | [How can I Contribute](https://github.com/anshulp2912/SE_Fall2021_G13_HW2b/blob/main/CONTRIBUTING.md#how-can-i-contribute)
8 | [Suggesting Enhancements](https://github.com/anshulp2912/SE_Fall2021_G13_HW2b/blob/main/CONTRIBUTING.md#suggesting-enhancements)
9 | [Style Guide](https://github.com/anshulp2912/SE_Fall2021_G13_HW2b/blob/main/CONTRIBUTING.md#styleguides)
10 | [References](https://github.com/anshulp2912/SE_Fall2021_G13_HW2b/blob/main/CONTRIBUTING.md#references) 11 | 12 | ## Code of Conduct 13 | This project and everyone participating in it is governed by the [Code of Conduct](https://github.com/anshulp2912/SE_Fall2021_G13_HW2b/blob/main/CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to anshulp2912@gmail.com. 14 | 15 | ## How can I Contribute 16 | ### Reporting Bugs 17 | This section gives detailed information on how to report bugs. Reporting a bug will help the community and maintainers of the repository.
18 | Before reporting any bug, make sure it is correct and you have all the details with you. Fot creating any bug report, please fill out [the required template](https://github.com/atom/.github/blob/master/.github/ISSUE_TEMPLATE/bug_report.md). This template will give us necessary information to help solve a bug faster. 19 | 20 | #### Before Submitting A Bug Report 21 | The following is a list of items you need to check before submitting a bug report.
22 | 23 | [debugging guide](https://flight-manual.atom.io/hacking-atom/sections/debugging/). Check out this debugging guide, which helps you to find the cause of the problem and you may fix it by yourself manually.
24 | [cursory search](https://github.com/search?q=+is%3Aissue+user%3Aatom) A cursory search is necessary to check if the reported bug is already mentioned before or not. You can add to the existing bug report if the issue is still open. 25 | 26 | #### To Submit A Good Bug Report 27 | [GitHub issues](https://guides.github.com/features/issues/) You can track the bugs from this. For the repository that has bug, create an issue and fill out [the template](https://github.com/atom/.github/blob/master/.github/ISSUE_TEMPLATE/bug_report.md) to give details of the bug. 28 | 29 | 30 | * To identify the problem, give the issue a clear and informative term.
31 | * Describe in as much detail as possible to duplicate the problem. Explain the problem and explain about the exact command sused in the terminal which caus ethe bug to occur. 32 | * To demonstrate the steps, give specific examples. Include links to files or GitHub projects, or copy/pasteable snippets, which you use in those examples. If you're providing snippets in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). 33 | * Specify what is the problem beavior and what you expected to see and why 34 | * If possible, include screenshots and animated GIFs that clearly demonstrate the problem. [this tool](https://www.cockos.com/licecap/)- to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. 35 | * To include a crash report, add a stack trace from the operating system. For macOS, `Console.app` under "Diagnostic and usage information" > "User diagnostic reports" has crash report. Include the crash report in the issue in a [code block](https://help.github.com/articles/markdown-basics/#multiple-lines), a [file attachment](https://help.github.com/articles/file-attachments-on-issues-and-pull-requests/), or put it in a [gist](https://gist.github.com/) and provide link to that gist. 36 | * For performance or memory issues, include a [CPU profile capture](https://flight-manual.atom.io/hacking-atom/sections/debugging/#diagnose-runtime-performance) with your report. 37 | 38 | Provide more context by answering these questions:
39 | * If the problem started happening recently then try downloading the old version of the packages and the code. 40 | * Include details about your configuration and environment. 41 | * What is the name and version of the OS you're using? 42 | * Are you running the project in a virtual environment? 43 | * Which packages have installed in your system? You can get a list of packages installed by running 'apm list --installed' 44 | 45 | ## Suggesting Enhancements 46 | 47 | Any suggesting enhancements like adding new features or imporving existing functionalities, etc can done by following the below guidelines. They help maintainers understand your improvement.
48 | [the template](https://github.com/atom/.github/blob/master/.github/ISSUE_TEMPLATE/feature_request.md)- this template is to be filled to add suggestions. These can include the steps that you imagine you would take if the feature you're requesting existed. 49 | 50 | ##### Before Submitting An Enhancement Suggestion 51 | 52 | [debugging guide](https://flight-manual.atom.io/hacking-atom/sections/debugging/). Check out this debugging guide, which helps you to find the cause of the problem and you may fix it by yourself manually.
53 | [cursory search](https://github.com/search?q=+is%3Aissue+user%3Aatom) A cursory search is necessary to check if the reported bug is already mentioned before or not. You can add to the existing bug report if the issue is still open. 54 | 55 | #### To Submit A Good Enhancement Suggestion 56 | 57 | [GitHub issues](https://guides.github.com/features/issues/) You can track the bugs from this. For the repository that has bug, create an issue and fill out [the template](https://github.com/atom/.github/blob/master/.github/ISSUE_TEMPLATE/bug_report.md) to give details of the bug. 58 | 59 | * To identify the problem, give the issue a clear and informative term.
60 | * Describe in as much detail as possible to duplicate the problem. Explain the problem and explain about the exact command sused in the terminal which caus ethe bug to occur. 61 | * To demonstrate the steps, give specific examples. Include links to files or GitHub projects, or copy/pasteable snippets, which you use in those examples. If you're providing snippets in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). 62 | * Specify what is the problem beavior and what you expected to see and why 63 | * If possible, include screenshots and animated GIFs that clearly demonstrate the problem. [this tool](https://www.cockos.com/licecap/)- to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. 64 | * To include a crash report, add a stack trace from the operating system. For macOS, `Console.app` under "Diagnostic and usage information" > "User diagnostic reports" has crash report. Include the crash report in the issue in a [code block](https://help.github.com/articles/markdown-basics/#multiple-lines), a [file attachment](https://help.github.com/articles/file-attachments-on-issues-and-pull-requests/), or put it in a [gist](https://gist.github.com/) and provide link to that gist. 65 | * For performance or memory issues, include a [CPU profile capture](https://flight-manual.atom.io/hacking-atom/sections/debugging/#diagnose-runtime-performance) with your report. 66 | 67 | #### Start Your Contribution 68 | 69 | `beginner` and `help-wanted` issues can help you getting started to contribute your first contribution: 70 | 71 | * [Beginner issues][beginner] - issues which should only require a few lines of code, and a test or two. 72 | * [Help wanted issues][help-wanted] - issues which should be a bit more involved than `beginner` issues. 73 | 74 | #### Local development 75 | 76 | For developing the project, each section is done locally. 77 | * [Contributing to Calculator](https://github.com/anshulp2912/SE_Fall2021_G13_HW2b/blob/main/CONTRIBUTING.md) 78 | 79 | #### Pull Requests 80 | 81 | The goals to be considered are: 82 | - Focus of problems that are more valuable to users of the platform 83 | - Engage the community in working toward the best possible solution 84 | - To review contributions, enable a sustainable system for the maintainers 85 | 86 | Please follow these steps to have your contribution considered by the maintainers: 87 | 88 | 1. Follow the [styleguides](#styleguides) 89 | 2. Verify that all [status checks](https://help.github.com/articles/about-status-checks/) are passing once the pull request is submitted.
What if the status checks are failing?If a status check is failing, and you believe that the failure is unrelated to your change, please leave a comment on the pull request explaining why you believe the failure is unrelated. A maintainer will re-run the status check for you. If we conclude that the failure was a false positive, then we will open an issue to track that problem with our status check suite.
90 | 91 | While the prerequisites above must be satisfied prior to having your pull request reviewed, the reviewer(s) may ask you to complete additional design work, tests, or other changes before your pull request can be ultimately accepted. 92 | 93 | ## Styleguides 94 | 95 | #### Git Commit Messages 96 | 97 | * Use the present tense ("Add feature" not "Added feature") 98 | * Use the imperative mood ("Move cursor to..." not "Moves cursor to...") 99 | * Limit the first line to 72 characters or less 100 | * Reference issues and pull requests liberally after the first line 101 | * When only changing documentation, include `[ci skip]` in the commit title 102 | * Consider starting the commit message with an applicable emoji: 103 | * :art: `:art:` when improving the format/structure of the code 104 | * :racehorse: `:racehorse:` when improving performance 105 | * :non-potable_water: `:non-potable_water:` when plugging memory leaks 106 | * :memo: `:memo:` when writing docs 107 | * :penguin: `:penguin:` when fixing something on Linux 108 | * :apple: `:apple:` when fixing something on macOS 109 | * :checkered_flag: `:checkered_flag:` when fixing something on Windows 110 | * :bug: `:bug:` when fixing a bug 111 | * :fire: `:fire:` when removing code or files 112 | * :green_heart: `:green_heart:` when fixing the CI build 113 | * :white_check_mark: `:white_check_mark:` when adding tests 114 | * :lock: `:lock:` when dealing with security 115 | * :arrow_up: `:arrow_up:` when upgrading dependencies 116 | * :arrow_down: `:arrow_down:` when downgrading dependencies 117 | * :shirt: `:shirt:` when removing linter warnings 118 | 119 | 120 | ``` 121 | 122 | #### CoffeeScript Styleguide 123 | 124 | * Set parameter defaults without spaces around the equal sign 125 | * `clear = (count=1) ->` instead of `clear = (count = 1) ->` 126 | * Use spaces around operators 127 | * `count + 1` instead of `count+1` 128 | * Use spaces after commas (unless separated by newlines) 129 | * Use parentheses if it improves code clarity. 130 | * Prefer alphabetic keywords to symbolic keywords: 131 | * `a is b` instead of `a == b` 132 | * Avoid spaces inside the curly-braces of hash literals: 133 | * `{a: 1, b: 2}` instead of `{ a: 1, b: 2 }` 134 | * Include a single line of whitespace between methods. 135 | * Capitalize initialisms and acronyms in names, except for the first word, which 136 | should be lower-case: 137 | * `getURI` instead of `getUri` 138 | * `uriToOpen` instead of `URIToOpen` 139 | * Use `slice()` to copy an array 140 | * Add an explicit `return` when your function ends with a `for`/`while` loop and 141 | you don't want it to return a collected array. 142 | * Use `this` instead of a standalone `@` 143 | * `return this` instead of `return @` 144 | * Place requires in the following order: 145 | * Built in Node Modules (such as `path`) 146 | * Local Modules (using relative paths) 147 | * Place class properties in the following order: 148 | * Class methods and properties (methods starting with a `@`) 149 | * Instance methods and properties 150 | 151 | 152 | #### Documentation Styleguide 153 | 154 | * Use [Markdown](https://daringfireball.net/projects/markdown). 155 | * Reference methods and classes in markdown with the custom `{}` notation: 156 | * Reference classes with `{ClassName}` 157 | * Reference instance methods with `{ClassName::methodName}` 158 | * Reference class methods with `{ClassName.methodName}` 159 | 160 | 161 | 162 | ## References 163 | [Contributing.md](https://github.com/atom/atom/blob/master/CONTRIBUTING.md#specs-styleguide) 164 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Anshul Patel 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: sh setup.sh && streamlit run source/scrivener_user_interface.py -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | # SCRIVENER 6 | 7 | ![Python](https://img.shields.io/badge/python-3670A0?style=flat&logo=python&logoColor=ffdd54) 8 | [![GitHub issues](https://img.shields.io/github/issues/anshulp2912/scrivener)](https://github.com/anshulp2912/scrivener/issues) 9 | [![GitHub forks](https://img.shields.io/github/forks/anshulp2912/scrivener)](https://github.com/anshulp2912/scrivener/network) 10 | [![DOI](https://zenodo.org/badge/409326011.svg)](https://zenodo.org/badge/latestdoi/409326011) 11 | [![GitHub license](https://img.shields.io/github/license/anshulp2912/scrivener)](https://github.com/anshulp2912/scrivener/blob/main/LICENSE) 12 | ![Lines of code](https://img.shields.io/badge/Lines%20of%20Code-1K-blue) 13 | ![Coverage](https://img.shields.io/badge/Coverage-97%25-red) 14 | ![Contributors](https://img.shields.io/badge/Contributors-5-yellowgreen) 15 | [![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=for-the-badge&logo=youtube&logoColor=white)](https://www.youtube.com/watch?v=_pg9M32LiG8&ab_channel=AnshulPatel) 16 | 17 | ## Table of Contents 18 | - [Introduction](#Introduction) 19 | - [Demo](#Demo) 20 | - [Steps for Execution](#ExecutionSteps) 21 | - [License](#License) 22 | - [Contributions](#Contributions) 23 | - [Future Scope](#FutureScope) 24 | - [Team Members](#TeamMember) 25 | - [Acknowledgements](#Acknowledgement) 26 | 27 | ## Introduction 28 | 29 | Scrivener is a video transcript summarizer for Youtube videos. Youtube is one of the most used website. A lot of people use the captions to understand the language of the video. In our project we aim to create a transcript summarizer which accepts a youtube URL link, collects the caption at every sentence and then provides the summary of the complete video. Our goal is to make the summarizer as accurate as possible and to add various other features. Our second goal of the project is to create a summarizer which can summarize the youtube videos which have captions disabled. Our project can be further expanded for numerous applications. This document provides a major perspective for the users to understand and take up the project as an Open source software and add on multiple features. Also, the document aids the developers in understanding the code and acts as a reference point for starting the project. 30 | 31 |

32 | 33 |

34 | 35 | The complete development was achieved using the Python3 technology and it is recommended that the next set of developers who take up this project have these technologies installed and keep them running before proceeding further. 36 | 37 | ## Demo 38 | The project is deployed on both Streamlit cloud and Heroku. 39 | - [Streamlit](https://share.streamlit.io/anshulp2912/scrivener/main/source/scrivener_user_interface.py) 40 | - [Heroku](https://scrivener-heroku.herokuapp.com/) 41 | 42 | ## Steps for Execution 43 | 1. Clone the Git repository. 44 | 2. Run `pip install -r requirements.txt` 45 | 3. Open Command Prompt and change the directory to the location of cloned repository. 46 | 4. Run the command `streamlit run user_interface.py` 47 | 5. Next, open your browser and type in `localhost:8501` in the search bar to open the webUI of the application. 48 | 6. The UI typically looks as shown below and here you have a choice between URL, file or normal text input. 49 | 50 | 51 | 52 | ## License 53 | This project is licensed under the terms of the MIT license. Please check [License](https://github.com/anshulp2912/scrivener/blob/main/LICENSE) for more details. 54 | 55 | ## Contributions 56 | Please see our [CONTRIBUTING.md](https://github.com/anshulp2912/scrivener/blob/main/CONTRIBUTING.md) for instructions on how to contribute to the project by completing some of the issues. 57 | 58 | ## Future Scope 59 | For enhancement of this project following functionalities can be implemented 60 | - Currently our application supports youtube videos and videos with .mp4 extension. Provide support for other video formats 61 | - Perform summarization for videos in languages other than English 62 | - Generate summary of Podcasts or other audiofiles 63 | - Provide summary in form of video 64 | - Generate summary of videos for specific time frames 65 | - Compare various Summarization models and provide optimal summary 66 | - UI Enhancement 67 | - Provide summary in form of audio 68 | - Generate summary of audio for specific time frames 69 | - Adding Chrome extension for SCRIVENER 70 | - Provide Sentiment Analysis of the generated summary 71 | - Develop a Discord BOT for SCRIVENER 72 | 73 | ## Team Members 74 | 75 | - Anshul Navinbhai Patel 76 | - Bhavya Omprakash Agrawal 77 | - Darshan Manharbhai Patel 78 | - Pragna Bollam 79 | - Rohan Jigarbhai Shah 80 | 81 | ## Acknowledgements 82 | We would like to thank Professor Dr Timothy Menzies for helping us understand the process of building a good Software Engineering project. We would also like to thank the teaching assistants Xiao Ling, Andre Lustosa, Kewen Peng, Weichen Shi for their support throughout the project. 83 | - [https://streamlit.io/](https://streamlit.io/) 84 | - [https://huggingface.co/](https://huggingface.co/) 85 | - [https://shields.io/](https://shields.io/) 86 | - [https://www.powtoon.com/](https://www.powtoon.com/) 87 | - [https://www.heroku.com/](https://www.heroku.com/) 88 | -------------------------------------------------------------------------------- /docs/Project Documentation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/docs/Project Documentation.pdf -------------------------------------------------------------------------------- /docs/proj1rubric.md: -------------------------------------------------------------------------------- 1 | Sum = 219/270 2 |
3 | 4 | | Notes|Self Assessment zero (none), one (a litte), two (somewhat), three (a lot)| Evidence| 5 | |-----|--------|---------| 6 | |workload is spread over the whole team (one team member is often Xtimes more productive than the others... |3| Evidence in [Road Map](https://github.com/anshulp2912/scrivener/projects)| 7 | but nevertheless, here is a track record that everyone is contributing a lot)|3|Evidence in [Road Map](https://github.com/anshulp2912/scrivener/projects)| 8 | | Number of commits|3|Evidence in [Github](https://github.com/anshulp2912/scrivener)| 9 | | Number of commits: by different people|3|Evidence in [Github](https://github.com/anshulp2912/scrivener)| 10 | | Issues reports: there are **many**|3| Evidence in [Road Map](https://github.com/anshulp2912/scrivener/projects)| 11 | | Issues are being closed|3| Evidence in [Road Map](https://github.com/anshulp2912/scrivener/projects)| 12 | | DOI badge: exists |3|Evidence in [Github](https://github.com/anshulp2912/scrivener)| 13 | |Docs: doco generated , format not ugly |3|Evidence in [Docs](https://github.com/anshulp2912/scrivener/tree/main/docs)| 14 | |Docs: what: point descriptions of each class/function (in isolation) |3 |Evidence in [Software Document] (https://github.com/anshulp2912/scrivener/blob/main/docs/Project%20Documentation.pdf)| 15 | |Docs: how: for common use cases X,Y,Z mini-tutorials showing worked examples on how to do X,Y,Z| 3|Evidence in [Software Document](https://github.com/anshulp2912/scrivener/blob/main/docs/Project%20Documentation.pdf)| 16 | |Docs: why: docs tell a story, motivate the whole thing, deliver a punchline that makes you want to rush out and use the thing|3 | Evidence in [Software Document](https://github.com/anshulp2912/scrivener/blob/main/docs/Project%20Documentation.pdf)| 17 | |Docs: short video, animated, hosted on your repo. That convinces people why they want to work on your code.|3 |Evidence in [Youtube](https://www.youtube.com/watch?v=_pg9M32LiG8&ab_channel=AnshulPatel)| 18 | | Use of version control tools|3 | Evidence in [Requirements](https://github.com/anshulp2912/scrivener/blob/main/requirements.txt)| 19 | |Use of style checkers |0 || 20 | | Use of code formatters. | 0|| 21 | | Use of syntax checkers| 0 || 22 | | Use of code coverage |3 |[Evidence](https://camo.githubusercontent.com/c3bc1993cf3b44ab682ccb30db2b4186eb8f61ffcdcca5bfc00ae7df0a918e29/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f7665726167652d39372532352d726564)| 23 | | other automated analysis tools|0 || 24 | | test cases exist|3 |Evidence in [Test](https://github.com/anshulp2912/scrivener/tree/main/test)| 25 | | test cases are routinely executed| 3|Test cases are manually executed before every commit| 26 | | the files CONTRIBUTING.md lists coding standards and lots of tips on how to extend the system without screwing things up|3 |Evidence in [Contributing](https://github.com/anshulp2912/scrivener/blob/main/CONTRIBUTING.md) | 27 | | issues are discussed before they are closed| 3| Discussed on Discord Channel| 28 | | Chat channel: exists|3 |Evidence in [Discord](https://discord.gg/HuY426EF) | 29 | | test cases:.a large proportion of the issues related to handling failing cases.|3 |Each test case handles the failing tests itself| 30 | | evidence that the whole team is using the same tools: everyone can get to all tools and files|3 |Evidence in [Requirements](https://github.com/anshulp2912/scrivener/blob/main/requirements.txt) | 31 | | evidence that the whole team is using the same tools (e.g. config files in the repo, updated by lots of different people)|3 |Evidence in [Requirements](https://github.com/anshulp2912/scrivener/blob/main/requirements.txt) | 32 | | evidence that the whole team is using the same tools (e.g. tutor can ask anyone to share screen, they demonstrate the system running on their computer)|3 | | 33 | | evidence that the members of the team are working across multiple places in the code base| 3|Evidence in [Commit](https://github.com/anshulp2912/scrivener/commits/main) | 34 | |short release cycles | 3 |Evidence in [Commit](https://github.com/anshulp2912/scrivener/commits/main)| 35 | |Software: Does your website and documentation provide a clear, high-level overview of your software?|3 | In Documentation| 36 | |Software: Does your website and documentation clearly describe the type of user who should use your software?| 2|Documentation does, website does not | 37 | |Software: Do you publish case studies to show how your software has been used by yourself and others?|0 | | 38 | |Project's and software's identity: Is the name of your project/software unique?|3|| 39 | |Project's and software's identity: Is your project/software name free from trademark violations?| 3| | 40 | |Availability of your software: Is your software available as a package that can be deployed without building it?|3 |[website](https://share.streamlit.io/anshulp2912/scrivener/main/source/scrivener_user_interface.py)| 41 | |Availability of your software:Is your software available for free?|3 | | 42 | |Availability of your software: Is your source code publicly available to download, either as a downloadable bundle or via access to a source code repository?|3 | | 43 | |Availability of your software: Is your software hosted in an established, third-party repository likeGitHub (https://github.com), BitBucket (https://bitbucket.org),LaunchPad (https://launchpad.net) orSourceForge (https://sourceforge.net)? |3 | | 44 | |software's documentation: Is your documentation clearly available on your website or within your software? |3 | | 45 | |software's documentation: Does your documentation include a "quick start" guide, that provides a short overview of how to use your software with some basic examples of use?| 3| [Readme](https://github.com/anshulp2912/scrivener/blob/main/README.md)| 46 | |software's documentation: If you provide more extensive documentation, does this provide clear, step-by-step instructions on how to deploy and use your software?|3 | | 47 | |software's documentation: Do you provide a comprehensive guide to all your software’s commands, functions and options? | 3| Check Evidence in [Software Document] | 48 | |software's documentation: Do you provide troubleshooting information that describes the symptoms and step-by-step solutions for problems and error messages? |0 | | 49 | |software's documentation: Do you store your documentation under revision control with your source code?|3|| 50 | |software's documentation: Do you publish your release history e.g. release data, version numbers, key features of each release etc. on your web site or in your documentation?|0|Not applicable| 51 | |Support your software: Does your software describe how a user can get help with using your software? | 3| | 52 | |Support your software: Does your website and documentation describe what support, if any, you provide to users and developers?|3 | Evidence in [Contributing](https://github.com/anshulp2912/scrivener/blob/main/CONTRIBUTING.md)| 53 | |Support your software: Does your project have an e-mail address or forum that is solely for supporting users?|3 | | 54 | |Support your software: Are e-mails to your support e-mail address received by more than one person? |0 | | 55 | |software's maintainability: Is your software’s architecture and design modular?| 3| | 56 | |software's maintainability: Does your software use an accepted coding standard or convention? |3 | | 57 | |Open standards and your software: Does your software allow data to be imported and exported using open data formats?|3 | | 58 | |Open standards and your software: Does your software allow communications using open communications protocols?|3 |It can run on localhost | 59 | |Software's portability: Is your software cross-platform compatible?|3 | | 60 | |Software and accessibility: Does your software adhere to appropriate accessibility conventions or standards?|3 | | 61 | |Software and accessibility: Does your documentation adhere to appropriate accessibility conventions or standards?|3 |Yes it is accessible to anyone | 62 | |Manage source code: Is your source code stored in a repository under revision control? |3 | | 63 | |Manage source code: Are releases tagged in the repository? |0 |Not applicable| 64 | |Manage source code:Is there a branch of the repository that is always stable? (i.e. tests always pass, code always builds successfully) | 2| main | 65 | |Manage source code:Do you back-up your repository? |3 | | 66 | |Building and installing your software: Do you provide publicly-available instructions for building your software from the source code? |3 | | 67 | |Building and installing your software: Do you provide publicly-available instructions for deploying your software? |3|| 68 | |Building and installing your software:Does your documentation list all third-party dependencies? |3 | | 69 | |Building and installing your software:Does your documentation list the version number for all third-party dependencies? | 3| | 70 | |Building and installing your software: Do you have tests that can be run after your software has been built or deployed to show whether the build or deployment has been successful? |3 | Evidence in [Test](https://github.com/anshulp2912/scrivener/tree/main/test) | 71 | |Test your software: Do you have an automated test suite for your software? |0 | | 72 | |Test your software: Do you have a framework to periodically (e.g. nightly) run your tests on the latest version of the source code?|2 |Manual tests | 73 | |Test your software: Do you use continuous integration, automatically running tests whenever changes are made to your source code? |0|| 74 | |Test your software: Are your test results publicly visible?|3|| 75 | |Test your software: Are all manually-run tests documented?|3|Check Evidence in [Software Document]| 76 | |Engage with your community: Does your website state how many projects and users are associated with your project?|2|Github-Yes, Website- No| 77 | |Engage with your community: Do you provide success stories on your website? |0|| 78 | |Engage with your community: Do you list your important partners and collaborators on your website?|0|| 79 | |Engage with your community: Do you list your project's publications on your website or link to a resource where these are available?|3|Evidence in [Readme](https://github.com/anshulp2912/scrivener/blob/main/README.md)| 80 | |Engage with your community: Do you list third-party publications that refer to your software on your website or link to a resource where these are available? |3|| 81 | |Engage with your community: Can users subscribe to notifications to changes to your source code repository?|2|Added to Roadmap| 82 | |Engage with your community: If your software is developed as an open source project (and, not just a project developing open source software), do you have a governance model?|0|| 83 | |Manage contributions: Do you accept contributions (e.g. bug fixes, enhancements, documentation updates, tutorials) from people who are not part of your project?|3|Evidence in [Contributing](https://github.com/anshulp2912/scrivener/blob/main/CONTRIBUTING.md)| 84 | |Manage contributions: Do you have a contributions policy?|3|Evidence in [Contributing](https://github.com/anshulp2912/scrivener/blob/main/CONTRIBUTING.md)| 85 | |Manage contributions: Is your contributions' policy publicly available?|3|Evidence in [Contributing](https://github.com/anshulp2912/scrivener/blob/main/CONTRIBUTING.md)| 86 | |Manage contributions: Do contributors keep the copyright/IP of their contributions?|3|Evidence in [License](https://github.com/anshulp2912/scrivener/blob/main/LICENSE)| 87 | |Software's copyright and licensing: Does your website and documentation clearly state the copyright owners of your software and documentation? |3|Evidence in [License](https://github.com/anshulp2912/scrivener/blob/main/LICENSE)| 88 | |Software's copyright and licensing: Does each of your source code files include a copyright statement? |3|| 89 | |Software's copyright and licensing: Does your website and documentation clearly state the licence of your software? |2|Yes for documentation, No- Website| 90 | |Software's copyright and licensing: Is your software released under an open source licence?|3|Evidence in [License](https://github.com/anshulp2912/scrivener/blob/main/LICENSE)| 91 | |Software's copyright and licensing: Is your software released under an OSI-approved open-source licence? |3|Evidence in [License](https://github.com/anshulp2912/scrivener/blob/main/LICENSE)| 92 | |Software's copyright and licensing: Does each of your source code files include a licence header?|3|| 93 | |Software's copyright and licensing: Do you have a recommended citation for your software?|3|Evidence in [Citation](https://github.com/anshulp2912/scrivener/blob/main/CITATION.md)| 94 | |Plans for the future: Does your website or documentation include a project roadmap (a list of project and development milestones for the next 3, 6 and 12 months)? |3|Evidence in [Road Map](https://github.com/anshulp2912/scrivener/projects)| 95 | |Plans for the future: Do you make timely announcements of the deprecation of components, APIs, etc.? |0|Not applicable| 96 | -------------------------------------------------------------------------------- /docs/proj1rubricComments.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/docs/proj1rubricComments.pdf -------------------------------------------------------------------------------- /media/demo.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/media/demo.PNG -------------------------------------------------------------------------------- /media/logo/logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/media/logo/logo.gif -------------------------------------------------------------------------------- /media/logo/simple_logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/media/logo/simple_logo.gif -------------------------------------------------------------------------------- /media/logo/v1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/media/logo/v1.PNG -------------------------------------------------------------------------------- /media/logo/v2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/media/logo/v2.PNG -------------------------------------------------------------------------------- /media/working_animation/scrivener_working.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/media/working_animation/scrivener_working.gif -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | moviepy==1.0.3 2 | pydub==0.25.1 3 | transformers[tf-cpu]==4.11.0 4 | youtube_transcript_api==0.4.1 5 | pytube==11.0.1 6 | SpeechRecognition==3.8.1 7 | streamlit==0.89.0 -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | mkdir -p ~/.streamlit/ 2 | echo "\ 3 | [server]\n\ 4 | headless = true\n\ 5 | port = $PORT\n\ 6 | enableCORS = false\n\ 7 | \n\ 8 | " > ~/.streamlit/config.toml -------------------------------------------------------------------------------- /source/.streamlit/config.toml: -------------------------------------------------------------------------------- 1 | [theme] 2 | base="dark" 3 | primaryColor="#da4b58" 4 | backgroundColor="#000000" 5 | secondaryBackgroundColor="#127275" 6 | font="monospace" -------------------------------------------------------------------------------- /source/README.md: -------------------------------------------------------------------------------- 1 | ## Functionality 2 | 1. scrivener_user_interface.py: Build a web-based user interface and allows the user to input a youtube url, upload a video and displays the generated summary. 3 | -------------------------------------------------------------------------------- /source/helper/README.md: -------------------------------------------------------------------------------- 1 | ## Functionality 2 | 1. split_audio.py: Split a large audio file (that has been extracted from video) into smaller files that can be processed independently. 3 | 2. cleanup.py: Delete temporary files created during summary generation. 4 | -------------------------------------------------------------------------------- /source/helper/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | @author: Scrivener 3 | """ 4 | 5 | 6 | -------------------------------------------------------------------------------- /source/helper/cleanup.py: -------------------------------------------------------------------------------- 1 | """ 2 | Copyright (c) 2021 Anshul Patel 3 | This code is licensed under MIT license (see LICENSE.MD for details) 4 | 5 | @author: Scrivener 6 | """ 7 | 8 | # Import Libraries 9 | import os 10 | import shutil 11 | 12 | class Cleanup: 13 | """ 14 | A class used to clean temporary files generated 15 | ... 16 | 17 | Methods 18 | ------- 19 | delete_temp_files: 20 | function to delete temporary files that were created while generating 21 | summary of youtube videos with closed captions. 22 | """ 23 | 24 | def __init__(self): 25 | pass 26 | 27 | def delete_temp_files(self): 28 | """ 29 | function to delete temporary files that were created while generating 30 | summary. 31 | """ 32 | try: 33 | shutil.rmtree(os.getcwd() + "/" + 'temp') 34 | except OSError as e: 35 | print(e.strerror) 36 | -------------------------------------------------------------------------------- /source/helper/split_audio.py: -------------------------------------------------------------------------------- 1 | """ 2 | Copyright (c) 2021 Anshul Patel 3 | This code is licensed under MIT license (see LICENSE.MD for details) 4 | 5 | @author: Scrivener 6 | """ 7 | 8 | # Import Libraries 9 | from pydub import AudioSegment 10 | import math 11 | 12 | class splitwavaudio(): 13 | """ 14 | A class used to split audio into segment for text extraction 15 | ... 16 | 17 | Attributes 18 | ---------- 19 | folder: str 20 | folder name of downloaded video 21 | filename: str 22 | filename of downloaded video 23 | filepath: str 24 | filepath of downloaded video 25 | audio: AudioSegment object 26 | 27 | 28 | Methods 29 | ------- 30 | get_duration: 31 | Returns time of audio 32 | single_split(from_min, to_min, split_filename): 33 | Create files for every split 34 | multiple_split(min_per_split): 35 | Create splits of audio files 36 | """ 37 | def __init__(self, folder, filename): 38 | """ 39 | Parameters 40 | ---------- 41 | folder : str 42 | name of downloaded video 43 | filename: str 44 | filename of downloaded video 45 | """ 46 | self.folder = folder 47 | self.filename = filename 48 | self.filepath = folder + '/' + filename 49 | self.audio = AudioSegment.from_wav(self.filepath) 50 | 51 | def get_duration(self): 52 | """ 53 | Returns time of audio 54 | """ 55 | return self.audio.duration_seconds 56 | 57 | def single_split(self, from_min, to_min, split_filename): 58 | """ 59 | Create files for every split 60 | 61 | Parameters 62 | ---------- 63 | from_min : float 64 | start time of audio file 65 | to_min: float 66 | end time of audio file 67 | """ 68 | # t1 - start time in milliseconds 69 | # t2 - end time in milliseconds 70 | t1 = from_min * 60 * 1000 71 | t2 = to_min * 60 * 1000 72 | # split audio 73 | split_audio = self.audio[t1:t2] 74 | # export each split to audio file 75 | split_audio.export(self.folder + '/' + split_filename, format="wav") 76 | 77 | def multiple_split(self, min_per_split): 78 | """ 79 | Create splits of audio files 80 | 81 | Parameters 82 | ---------- 83 | min_per_split : float 84 | split duration in mins 85 | """ 86 | total_mins = math.ceil(self.get_duration() / 60) 87 | num_of_splits = total_mins / min_per_split 88 | # Call single_split to create multiple wav files 89 | for i in range(0, total_mins, min_per_split): 90 | split_fn = str(i) + '_' + self.filename 91 | self.single_split(i, i+min_per_split, split_fn) 92 | return int(num_of_splits) 93 | 94 | -------------------------------------------------------------------------------- /source/main/README.md: -------------------------------------------------------------------------------- 1 | ## Functionality 2 | 1. transcribe_yt.py: Process youtube videos for summarization 3 | 2. transcribe.py: Process uploaded videos for summarization 4 | 3. summarize.py: Generate summary 5 | -------------------------------------------------------------------------------- /source/main/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | @author: Scrivener 3 | """ 4 | -------------------------------------------------------------------------------- /source/main/summarize.py: -------------------------------------------------------------------------------- 1 | """ 2 | Copyright (c) 2021 Anshul Patel 3 | This code is licensed under MIT license (see LICENSE.MD for details) 4 | 5 | @author: Scrivener 6 | """ 7 | 8 | # Import Libraries 9 | from transformers import pipeline 10 | 11 | class Summary: 12 | """ 13 | A class used to generate summary text from the transcribed text provided. 14 | 15 | ... 16 | 17 | Attributes 18 | ---------- 19 | transcribed_text : str 20 | text extracted from video 21 | 22 | Methods 23 | ------- 24 | summarize_text: 25 | Generate the summary using Hugging Face. 26 | """ 27 | 28 | 29 | def __init__(self,transcribed_text): 30 | """ 31 | Parameters 32 | ---------- 33 | transcribed_text : str 34 | text extracted from video 35 | """ 36 | self.transcribed_text = transcribed_text 37 | 38 | def summarize_text(self): 39 | """ 40 | Generate summary for Youtube videos with Closed Captions 41 | """ 42 | 43 | #use summarization model from pipeline object from transformers 44 | summarizer = pipeline('summarization', model="t5-base", tokenizer="t5-base") 45 | 46 | #initializing empty list 47 | summary_text = [] 48 | 49 | itrs = len(self.transcribed_text) // 1000 50 | for i in range(itrs+1): 51 | start = 1000 * i 52 | end = 1000 * (i + 1) 53 | #splitting text into chunks of 1000 characters 54 | output = summarizer(self.transcribed_text[start:end])[0]['summary_text'] 55 | #appending summary output of each chunk to summary_text list 56 | summary_text.append(output) 57 | #return summary_text to calling function 58 | return summary_text -------------------------------------------------------------------------------- /source/main/transcribe.py: -------------------------------------------------------------------------------- 1 | """ 2 | Copyright (c) 2021 Anshul Patel 3 | This code is licensed under MIT license (see LICENSE.MD for details) 4 | 5 | @author: Scrivener 6 | """ 7 | 8 | # Import Libraries 9 | from main.summarize import Summary 10 | import speech_recognition as sr 11 | import moviepy.editor as mp 12 | from helper.split_audio import splitwavaudio 13 | import os 14 | from helper.cleanup import Cleanup 15 | 16 | 17 | class TranscribeVideo: 18 | 19 | """ 20 | A class used to summarize video without Closed Captions 21 | 22 | ... 23 | 24 | Attributes 25 | ---------- 26 | summary: str 27 | Summary of the video 28 | 29 | Methods 30 | ------- 31 | transcribe_video: 32 | Generate summary from video 33 | split_init: 34 | Split audio file into multiple small chunks 35 | 36 | """ 37 | def __init(self): 38 | self.summary = '' 39 | 40 | def transcribe_video(self,ip_path): 41 | """ 42 | Generate summary from video without Closed Captions 43 | """ 44 | #Read video input 45 | video = mp.VideoFileClip(ip_path) 46 | #Check if temp directory available 47 | if not os.path.exists(os.getcwd()+"/temp"): 48 | #Create temp directory 49 | os.mkdir('temp') 50 | #Generate audio file for the input video 51 | video.audio.write_audiofile(os.getcwd() + '/temp/temp_audio.wav') 52 | #Call split_init to generate small chunks of audio files 53 | num_of_files = self.split_init() 54 | transcript_text = '' 55 | 56 | #Read through all chunks of audio files 57 | for i in range(num_of_files): 58 | recognizer = sr.Recognizer() 59 | #Read single audio file chunk 60 | audio = sr.AudioFile("temp/"+str(i*2) +"_temp_audio.wav") 61 | #Get audio data 62 | with audio as src: 63 | audio_data = recognizer.record(src) 64 | #Perform speech to text and store the text 65 | transcript_text += recognizer.recognize_google(audio_data) 66 | 67 | #Call the summarization script 68 | transcript_summary = Summary(transcript_text) 69 | summary = transcript_summary.summarize_text() 70 | for lines in summary: 71 | print(lines) 72 | #Join summary list with ' ' 73 | self.summary = '\n'.join(summary) 74 | #Perform clean up to remove temporary files 75 | clean_up = Cleanup() 76 | clean_up.delete_temp_files() 77 | #Return summary 78 | return self.summary 79 | 80 | def split_init(self): 81 | """ 82 | Split audio file into multiple small chunks 83 | """ 84 | #Get current working directory 85 | folder = os.getcwd() + "/" + 'temp' 86 | file = 'temp_audio.wav' 87 | #Call the script to split audio files into smaller files 88 | split_wav = splitwavaudio(folder, file) 89 | num_of_files = split_wav.multiple_split(min_per_split=2) 90 | #Return number of small files created 91 | return num_of_files -------------------------------------------------------------------------------- /source/main/transcribe_yt.py: -------------------------------------------------------------------------------- 1 | """ 2 | Copyright (c) 2021 Anshul Patel 3 | This code is licensed under MIT license (see LICENSE.MD for details) 4 | 5 | @author: Scrivener 6 | """ 7 | 8 | # Import Libraries 9 | from main.summarize import Summary 10 | import pytube 11 | import os 12 | from youtube_transcript_api import YouTubeTranscriptApi 13 | from main.transcribe import TranscribeVideo 14 | 15 | class TranscribeYtVideo: 16 | """ 17 | A class used to summarize video link from Youtube 18 | 19 | ... 20 | 21 | Attributes 22 | ---------- 23 | youtube_url: str 24 | a valid youtube video link 25 | yt_id: str 26 | youtube id of the youtube video link 27 | summary: str 28 | summary of the video 29 | 30 | Methods 31 | ------- 32 | check_yt_cc: 33 | Checks if the youtube video has captions or not 34 | transcribe_yt_video: 35 | Caller function for methods in the class 36 | transcribe_yt_video_w_cc: 37 | Generate summary for Youtube videos with Closed Captions 38 | transcribe_yt_video_wo_cc: 39 | Generate summary for Youtube videos without Closed Captions 40 | """ 41 | 42 | def __init__(self,youtube_url): 43 | """ 44 | Parameters 45 | ---------- 46 | youtube_url : str 47 | link of youtube video 48 | """ 49 | self.youtube_url = youtube_url 50 | self.yt_id = self.youtube_url.split('=')[1] 51 | self.summary = '' 52 | 53 | def check_yt_cc(self): 54 | """Checks if the youtube video has captions or not 55 | 56 | Raises 57 | ------ 58 | Exception 59 | If transcript cannot be extracted. 60 | """ 61 | transcript = None 62 | try: 63 | transcript_list = YouTubeTranscriptApi.list_transcripts(self.yt_id) 64 | transcript = transcript_list.find_transcript(['en']) 65 | except Exception as e: 66 | print(e) 67 | return transcript 68 | 69 | 70 | def transcribe_yt_video(self): 71 | """ 72 | Caller function for methods in the class 73 | """ 74 | check_cc = self.check_yt_cc() 75 | # If captions are not present 76 | if check_cc is None: 77 | self.transcribe_yt_video_wo_cc() 78 | # Captions are present 79 | else: 80 | self.transcribe_yt_video_w_cc() 81 | # return summary 82 | return self.summary 83 | 84 | def transcribe_yt_video_w_cc(self): 85 | """ 86 | Generate summary for Youtube videos with Closed Captions 87 | """ 88 | # Get transcript from youtube video 89 | transcript_json = YouTubeTranscriptApi.get_transcript(self.yt_id) 90 | transcript_text = '' 91 | # Extract the captions 92 | for rec in transcript_json: 93 | transcript_text += ' ' + rec['text'] 94 | # Call the summarization script 95 | transcript_summary = Summary(transcript_text) 96 | summary = transcript_summary.summarize_text() 97 | for lines in summary: 98 | print(lines) 99 | # Join list with ' ' 100 | self.summary = '\n'.join(summary) 101 | 102 | def transcribe_yt_video_wo_cc(self): 103 | """ 104 | Generate summary for Youtube videos without Closed Captions 105 | """ 106 | # Download the youtube video 107 | youtube = pytube.YouTube(self.youtube_url) 108 | dwnld_video = youtube.streams.get_lowest_resolution() 109 | #Check if temp directory available 110 | if not os.path.exists(os.getcwd()+"/temp"): 111 | #Create temp directory 112 | os.mkdir('temp') 113 | dwnld_video.download(filename='temp.mp4',output_path=os.getcwd()) 114 | # Get transcript of videos without caption 115 | transcribed_video = TranscribeVideo() 116 | # Call the summarization script 117 | self.summary = transcribed_video.transcribe_video(os.path.join(os.getcwd(), 'temp.mp4')) 118 | -------------------------------------------------------------------------------- /source/scrivener_user_interface.py: -------------------------------------------------------------------------------- 1 | """ 2 | Copyright (c) 2021 Anshul Patel 3 | This code is licensed under MIT license (see LICENSE.MD for details) 4 | 5 | @author: Scrivener 6 | """ 7 | 8 | # Import Libraries 9 | import streamlit as st 10 | import re 11 | import os 12 | from main.transcribe import TranscribeVideo 13 | from main.transcribe_yt import TranscribeYtVideo 14 | import secrets 15 | from glob import glob 16 | 17 | # Hide Footer in Streamlit 18 | hide_menu_style = """ 19 | 22 | """ 23 | st.markdown(hide_menu_style, unsafe_allow_html=True) 24 | 25 | # Add footer to UI 26 | footer=""" 49 | 54 | """ 55 | st.markdown(footer,unsafe_allow_html=True) 56 | 57 | # Download the uploaded video file 58 | def save_file(file): 59 | with open(os.path.join(os.getcwd(), file.name), 'wb') as f: 60 | f.write(file.getbuffer()) 61 | return 62 | 63 | # Display Image 64 | st.image("media/logo/logo.gif") 65 | 66 | # Display Radio options 67 | input_format = st.radio('Choose your input format', ['Youtube Link', 'Upload a Video']) 68 | 69 | # If user provides a Youtube Link 70 | if input_format=='Youtube Link': 71 | # Text input box 72 | youtube_link = st.text_input('Enter Youtube Link') 73 | # Check if its a valid youtube link 74 | if re.findall('(www\.youtube\.com\/watch\?v=)',youtube_link): 75 | st.video(youtube_link) 76 | # Make a progress bar 77 | progress_bar = st.progress(0) 78 | # Decorative material 79 | progress_lines = secrets.choice(['Hired Shakespeare to summarize your video', 'Taking advice from Charles Dickens to help you', 80 | 'Shakespeare is completing the assignment', 'Do not worry, Mark Twain is on it', 81 | 'Robert Frost is taking the right road to summarize your video']) 82 | progress_bar.progress(10) 83 | 84 | # Wait till we run the summarization 85 | with st.spinner(progress_lines+' . . .'): 86 | progress_bar.progress(25) 87 | # Call TranscribeYtVideo class 88 | transcribe_video = TranscribeYtVideo(youtube_link) 89 | progress_bar.progress(40) 90 | # Get summary 91 | summary = transcribe_video.transcribe_yt_video() 92 | progress_bar.progress(80) 93 | # Complete progress bar to 100 94 | progress_bar.progress(100) 95 | # Display Summary 96 | st.header('Summary') 97 | st.write(summary) 98 | 99 | 100 | # If user inputs an invalid Youtube link 101 | elif youtube_link!='': 102 | st.error('Please enter a valid Youtube Link!') 103 | 104 | # If user uploads a local video 105 | elif input_format=='Upload a Video': 106 | # Browse button for uploading .mp4 files 107 | file = st.file_uploader('Upload a video',type=['mp4'],accept_multiple_files=False) 108 | if file is not None: 109 | st.video(file) 110 | # Make a progress bar 111 | progress_bar = st.progress(0) 112 | progress_bar.progress(10) 113 | # Decorative material 114 | progress_lines = secrets.choice(['Hired Shakespeare to summarize your video', 'Taking advice from Charles Dickens to help you', 115 | 'Shakespeare is completing the assignment', 'Do not worry, Mark Twain is on it', 116 | 'Robert Frost is taking the right road to summarize your video']) 117 | # Wait till we run the summarization 118 | with st.spinner(progress_lines+' . . .'): 119 | progress_bar.progress(25) 120 | # Download the uploaded video file 121 | save_file(file) 122 | progress_bar.progress(40) 123 | # Call TranscribeVideo class 124 | transcribe_video = TranscribeVideo() 125 | progress_bar.progress(60) 126 | # Get summary 127 | summary = transcribe_video.transcribe_video(os.path.join(os.getcwd(), file.name)) 128 | # Complete progress bar to 100 129 | progress_bar.progress(100) 130 | # Display Summary 131 | st.header('Summary') 132 | st.write(summary) 133 | else: 134 | for name in glob('*.mp4'): 135 | os.remove(name) 136 | -------------------------------------------------------------------------------- /test/David Cook - Hello.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/test/David Cook - Hello.mp3 -------------------------------------------------------------------------------- /test/Output1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/test/Output1.PNG -------------------------------------------------------------------------------- /test/Output2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/test/Output2.PNG -------------------------------------------------------------------------------- /test/Output3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/test/Output3.PNG -------------------------------------------------------------------------------- /test/Output4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/test/Output4.PNG -------------------------------------------------------------------------------- /test/README.md: -------------------------------------------------------------------------------- 1 | # Test Cases:
2 | Test Case 1:
3 | Input: Youtube video with cc in English Language. ([link](https://www.youtube.com/watch?v=7vZmOF11P9A))
4 | Output:
5 |

6 | 7 |

8 | 9 | 10 | Test Case 2:
11 | Input: video without cc in English Language ([link](https://www.youtube.com/watch?v=hhAJV5D353w))
12 | Output:
13 |

14 | 15 |

16 | 17 | Test Case 3:
18 | Input: Youtube video in different Language( [link](https://www.youtube.com/watch?v=zmn3OYYqXvQ))
19 | Output:
20 |

21 | 22 |

23 | 24 | Test Case 4:
25 | Input: Video in .mp4 format (I Was Almost A School Shooter _ Aaron Stark _ TEDxBoulder_144p.mp4)
26 | Output:
27 |

28 | 29 |

30 | 31 | -------------------------------------------------------------------------------- /test/sample.wmv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/test/sample.wmv -------------------------------------------------------------------------------- /test/valid video 1.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/test/valid video 1.mp4 -------------------------------------------------------------------------------- /test/valid video 2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/test/valid video 2.mp4 -------------------------------------------------------------------------------- /test/valid video 3.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anshulp2912/scrivener/44de34caaea38215e017d069ba685a2d07b55f1e/test/valid video 3.mp4 --------------------------------------------------------------------------------