├── .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 | [](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 | 
8 | [](https://github.com/anshulp2912/scrivener/issues)
9 | [](https://github.com/anshulp2912/scrivener/network)
10 | [](https://zenodo.org/badge/latestdoi/409326011)
11 | [](https://github.com/anshulp2912/scrivener/blob/main/LICENSE)
12 | 
13 | 
14 | 
15 | [](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
--------------------------------------------------------------------------------