Spaces:
Build error
Build error
HashScripts
commited on
Commit
•
b293d47
1
Parent(s):
cb2634e
Upload 167 files
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .database/template_asset_db.json +47 -0
- .gitattributes +1 -0
- .github/CHANGE_LOG.md +34 -0
- .github/CODEOWNERS +6 -0
- .github/CODE_OF_CONDUCT.md +127 -0
- .github/CONTRIBUTING.md +21 -0
- .github/FUNDING.yml +13 -0
- .github/ISSUE_TEMPLATE/bug_report.yaml +99 -0
- .github/ISSUE_TEMPLATE/feature_request.yaml +36 -0
- .github/ISSUE_TEMPLATE/question.yaml +17 -0
- .github/SECURITY.md +28 -0
- .github/config.yml +21 -0
- .github/issue_label_bot.yaml +4 -0
- .github/pull_request_template.md +30 -0
- .github/settings.yml +190 -0
- .github/workflows/generate_release-changelog.yaml +33 -0
- .gitignore +28 -0
- CHANGES.txt +20 -0
- Dockerfile +38 -0
- LICENSE +35 -0
- README-Docker.md +21 -0
- README.md +131 -12
- assets/img/logo.png +0 -0
- docs/.gitignore +20 -0
- docs/README.md +10 -0
- docs/babel.config.js +3 -0
- docs/docs/api-key-manager.mdx +52 -0
- docs/docs/asset-database.mdx +88 -0
- docs/docs/content-translation-engine.mdx +69 -0
- docs/docs/content-video-engine.mdx +77 -0
- docs/docs/facts-short-engine.mdx +84 -0
- docs/docs/getting-started.mdx +59 -0
- docs/docs/how-to-install.mdx +121 -0
- docs/docusaurus.config.js +135 -0
- docs/package.json +51 -0
- docs/plugins/my-loaders/index.js +18 -0
- docs/plugins/tailwind-loader/index.js +19 -0
- docs/sidebars.js +33 -0
- docs/src/components/Home.js +356 -0
- docs/src/css/custom.css +198 -0
- docs/src/css/fragments.css +2275 -0
- docs/src/pages/index.js +17 -0
- docs/static/img/assets/configuration.svg +0 -0
- docs/static/img/assets/implementation.svg +1 -0
- docs/static/img/assets/scraping.svg +1 -0
- docs/static/img/favicon.ico +0 -0
- docs/static/img/logo.png +0 -0
- docs/tailwind.config.js +12 -0
- docs/yarn.lock +0 -0
- gui/__pycache__/content_automation_ui.cpython-39.pyc.1849492106672 +0 -0
.database/template_asset_db.json
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"asset_collection": {
|
3 |
+
"1": {
|
4 |
+
"_id": "local_assets",
|
5 |
+
"white_reddit_template": {
|
6 |
+
"path": "public/white_reddit_template.png",
|
7 |
+
"type": "image",
|
8 |
+
"ts": "2023-07-03 19:41:55",
|
9 |
+
"required": true
|
10 |
+
},
|
11 |
+
"subscribe-animation": {
|
12 |
+
"path": "public/subscribe-animation.mp4",
|
13 |
+
"type": "video",
|
14 |
+
"ts": "2023-07-03 21:37:53",
|
15 |
+
"required": true
|
16 |
+
}
|
17 |
+
},
|
18 |
+
"2": {
|
19 |
+
"_id": "remote_assets",
|
20 |
+
"Music joakim karud dreams": {
|
21 |
+
"type": "background music",
|
22 |
+
"url": "https://www.youtube.com/watch?v=p56gqDhUYbU",
|
23 |
+
"ts": "2023-07-05 04:35:03"
|
24 |
+
},
|
25 |
+
"Music dj quads": {
|
26 |
+
"type": "background music",
|
27 |
+
"url": "https://www.youtube.com/watch?v=uUu1NcSHg2E",
|
28 |
+
"ts": "2023-07-05 05:03:44"
|
29 |
+
},
|
30 |
+
"Car race gameplay": {
|
31 |
+
"type": "background video",
|
32 |
+
"url": "https://www.youtube.com/watch?v=gBsJA8tCeyc",
|
33 |
+
"ts": "2023-07-04 23:07:44"
|
34 |
+
},
|
35 |
+
"Minecraft jumping circuit": {
|
36 |
+
"url": "https://www.youtube.com/watch?v=Pt5_GSKIWQM",
|
37 |
+
"type": "background video",
|
38 |
+
"ts": "2023-07-07 04:13:36"
|
39 |
+
},
|
40 |
+
"Ski gameplay": {
|
41 |
+
"url": "https://www.youtube.com/watch?v=8ao1NAOVKTU",
|
42 |
+
"type": "background video",
|
43 |
+
"ts": "2023-07-07 04:54:16"
|
44 |
+
}
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
.gitattributes
CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
+
public/subscribe-animation.mp4 filter=lfs diff=lfs merge=lfs -text
|
.github/CHANGE_LOG.md
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Changelog
|
2 |
+
|
3 |
+
All notable changes to this project will be documented in this file.
|
4 |
+
|
5 |
+
## [Unreleased]
|
6 |
+
|
7 |
+
<!--
|
8 |
+
Notes for any unreleased changes do here. When a new release is cut, move these from
|
9 |
+
the unreleased section to the section for the new release.
|
10 |
+
-->
|
11 |
+
|
12 |
+
Upcoming changes.
|
13 |
+
|
14 |
+
### Added
|
15 |
+
|
16 |
+
### Changed
|
17 |
+
|
18 |
+
### Removed
|
19 |
+
|
20 |
+
## [0.0.1] - YYYY-MM-DD
|
21 |
+
|
22 |
+
Initial Release.
|
23 |
+
|
24 |
+
### Added
|
25 |
+
|
26 |
+
- What was added.
|
27 |
+
|
28 |
+
|
29 |
+
<!--
|
30 |
+
These Markdown anchors provide a link to the diff for each release. They should be
|
31 |
+
updated any time a new release is cut.
|
32 |
+
-->
|
33 |
+
[Unreleased]: /
|
34 |
+
[0.0.1]: /v0.0.1
|
.github/CODEOWNERS
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# These owners will be the default owners for everything in
|
2 |
+
# the repo. Unless a later match takes precedence,
|
3 |
+
# @USER will be requested for
|
4 |
+
# review when someone opens a pull request.
|
5 |
+
# if you want to add more owners just write it after the demo user @DemoUser
|
6 |
+
* @RayVentura
|
.github/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
63 |
+
All complaints will be reviewed and investigated promptly and fairly.
|
64 |
+
|
65 |
+
All community leaders are obligated to respect the privacy and security of the
|
66 |
+
reporter of any incident.
|
67 |
+
|
68 |
+
## Enforcement Guidelines
|
69 |
+
|
70 |
+
Community leaders will follow these Community Impact Guidelines in determining
|
71 |
+
the consequences for any action they deem in violation of this Code of Conduct:
|
72 |
+
|
73 |
+
### 1. Correction
|
74 |
+
|
75 |
+
**Community Impact**: Use of inappropriate language or other behavior deemed
|
76 |
+
unprofessional or unwelcome in the community.
|
77 |
+
|
78 |
+
**Consequence**: A private, written warning from community leaders, providing
|
79 |
+
clarity around the nature of the violation and an explanation of why the
|
80 |
+
behavior was inappropriate. A public apology may be requested.
|
81 |
+
|
82 |
+
### 2. Warning
|
83 |
+
|
84 |
+
**Community Impact**: A violation through a single incident or series
|
85 |
+
of actions.
|
86 |
+
|
87 |
+
**Consequence**: A warning with consequences for continued behavior. No
|
88 |
+
interaction with the people involved, including unsolicited interaction with
|
89 |
+
those enforcing the Code of Conduct, for a specified period of time. This
|
90 |
+
includes avoiding interactions in community spaces as well as external channels
|
91 |
+
like social media. Violating these terms may lead to a temporary or
|
92 |
+
permanent ban.
|
93 |
+
|
94 |
+
### 3. Temporary Ban
|
95 |
+
|
96 |
+
**Community Impact**: A serious violation of community standards, including
|
97 |
+
sustained inappropriate behavior.
|
98 |
+
|
99 |
+
**Consequence**: A temporary ban from any sort of interaction or public
|
100 |
+
communication with the community for a specified period of time. No public or
|
101 |
+
private interaction with the people involved, including unsolicited interaction
|
102 |
+
with those enforcing the Code of Conduct, is allowed during this period.
|
103 |
+
Violating these terms may lead to a permanent ban.
|
104 |
+
|
105 |
+
### 4. Permanent Ban
|
106 |
+
|
107 |
+
**Community Impact**: Demonstrating a pattern of violation of community
|
108 |
+
standards, including sustained inappropriate behavior, harassment of an
|
109 |
+
individual, or aggression toward or disparagement of classes of individuals.
|
110 |
+
|
111 |
+
**Consequence**: A permanent ban from any sort of public interaction within
|
112 |
+
the community.
|
113 |
+
|
114 |
+
## Attribution
|
115 |
+
|
116 |
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
117 |
+
version 2.0, available at
|
118 |
+
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
119 |
+
|
120 |
+
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
121 |
+
enforcement ladder](https://github.com/mozilla/diversity).
|
122 |
+
|
123 |
+
[homepage]: https://www.contributor-covenant.org
|
124 |
+
|
125 |
+
For answers to common questions about this code of conduct, see the FAQ at
|
126 |
+
https://www.contributor-covenant.org/faq. Translations are available at
|
127 |
+
https://www.contributor-covenant.org/translations.
|
.github/CONTRIBUTING.md
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
🌟💻📚
|
2 |
+
|
3 |
+
## Contributing
|
4 |
+
|
5 |
+
There are many exciting ways to contribute to ShortGPT, our AI automated content creation framework. 👏
|
6 |
+
|
7 |
+
See below for everything you can do and the processes to follow for each contribution method. Note that no matter how you contribute, your participation is governed by our ✨[Code of Conduct](CODE_OF_CONDUCT.md)✨.
|
8 |
+
|
9 |
+
## 🛠️ Make changes to the code or docs
|
10 |
+
|
11 |
+
- 🍴 Fork the project,
|
12 |
+
- 💡 make your changes,
|
13 |
+
- 🔀 and send a pull request! 🙌
|
14 |
+
|
15 |
+
Make sure you read and follow the instructions in the [pull request template](pull_request_template.md). And note that all participation in this project (including code submissions) is governed by our ✨[Code of Conduct](CODE_OF_CONDUCT.md)✨.
|
16 |
+
|
17 |
+
## 🐞📝 Submit bug reports or feature requests
|
18 |
+
|
19 |
+
Just use the GitHub issue tracker to submit your bug reports and feature requests. We appreciate your feedback! 🐛🔧
|
20 |
+
|
21 |
+
Let's make ShortGPT even better together! 🚀❤️
|
.github/FUNDING.yml
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# These are supported funding model platforms
|
2 |
+
|
3 |
+
github: rayventura
|
4 |
+
patreon: # Replace with a single Patreon username
|
5 |
+
open_collective: # Replace with a single Open Collective username
|
6 |
+
ko_fi: rayventura
|
7 |
+
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
8 |
+
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
9 |
+
liberapay: # Replace with a single Liberapay username
|
10 |
+
issuehunt: # Replace with a single IssueHunt username
|
11 |
+
otechie: # Replace with a single Otechie username
|
12 |
+
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
13 |
+
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
.github/ISSUE_TEMPLATE/bug_report.yaml
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: 🐛 Bug Report
|
2 |
+
description: File a bug report
|
3 |
+
title: '🐛 [Bug]: '
|
4 |
+
labels: ['bug']
|
5 |
+
|
6 |
+
body:
|
7 |
+
- type: markdown
|
8 |
+
attributes:
|
9 |
+
value: |
|
10 |
+
Thanks for taking the time to fill out this bug report!
|
11 |
+
|
12 |
+
- type: textarea
|
13 |
+
id: what-happened
|
14 |
+
attributes:
|
15 |
+
label: What happened?
|
16 |
+
description: Describe the issue here.
|
17 |
+
placeholder: Tell us what you see!
|
18 |
+
validations:
|
19 |
+
required: true
|
20 |
+
|
21 |
+
- type: dropdown
|
22 |
+
id: browsers
|
23 |
+
attributes:
|
24 |
+
label: What type of browser are you seeing the problem on?
|
25 |
+
multiple: true
|
26 |
+
options:
|
27 |
+
- Firefox
|
28 |
+
- Chrome
|
29 |
+
- Safari
|
30 |
+
- Microsoft Edge
|
31 |
+
validations:
|
32 |
+
required: true
|
33 |
+
|
34 |
+
- type: dropdown
|
35 |
+
id: operating-systems
|
36 |
+
attributes:
|
37 |
+
label: What type of Operating System are you seeing the problem on?
|
38 |
+
multiple: true
|
39 |
+
options:
|
40 |
+
- Linux
|
41 |
+
- Windows
|
42 |
+
- Mac
|
43 |
+
- Google Colab
|
44 |
+
- Other
|
45 |
+
validations:
|
46 |
+
required: true
|
47 |
+
|
48 |
+
- type: input
|
49 |
+
id: python-version
|
50 |
+
attributes:
|
51 |
+
label: Python Version
|
52 |
+
description: What version of Python are you using?
|
53 |
+
placeholder: e.g. Python 3.9.0
|
54 |
+
validations:
|
55 |
+
required: true
|
56 |
+
|
57 |
+
- type: input
|
58 |
+
id: application-version
|
59 |
+
attributes:
|
60 |
+
label: Application Version
|
61 |
+
description: What version of the application are you using?
|
62 |
+
placeholder: e.g. v1.2.3
|
63 |
+
validations:
|
64 |
+
required: true
|
65 |
+
|
66 |
+
- type: textarea
|
67 |
+
id: expected-behavior
|
68 |
+
attributes:
|
69 |
+
label: Expected Behavior
|
70 |
+
description: What did you expect to happen?
|
71 |
+
placeholder: What did you expect?
|
72 |
+
validations:
|
73 |
+
required: true
|
74 |
+
|
75 |
+
- type: textarea
|
76 |
+
id: error-message
|
77 |
+
attributes:
|
78 |
+
label: Error Message
|
79 |
+
description: What error message did you receive?
|
80 |
+
placeholder:
|
81 |
+
render: shell
|
82 |
+
validations:
|
83 |
+
required: false
|
84 |
+
|
85 |
+
- type: textarea
|
86 |
+
id: logs
|
87 |
+
attributes:
|
88 |
+
label: Code to produce this issue.
|
89 |
+
description: Please copy and paste any relevant code to re-produce this issue.
|
90 |
+
render: shell
|
91 |
+
|
92 |
+
- type: textarea
|
93 |
+
id: screenshots-assets
|
94 |
+
attributes:
|
95 |
+
label: Screenshots/Assets/Relevant links
|
96 |
+
description: If applicable, add screenshots, assets or any relevant links that can help understand the issue.
|
97 |
+
placeholder: Provide any relevant material here
|
98 |
+
validations:
|
99 |
+
required: false
|
.github/ISSUE_TEMPLATE/feature_request.yaml
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: ✨ Feature request
|
2 |
+
description: Suggest an feature / idea for this project
|
3 |
+
title: '✨ [Feature Request / Suggestion]: '
|
4 |
+
labels: ['feature']
|
5 |
+
body:
|
6 |
+
- type: markdown
|
7 |
+
attributes:
|
8 |
+
value: |
|
9 |
+
We appreciate your feedback on how to improve this project. Please be sure to include as much details & any resources if possible!
|
10 |
+
|
11 |
+
- type: textarea
|
12 |
+
id: Suggestion
|
13 |
+
attributes:
|
14 |
+
label: Suggestion / Feature Request
|
15 |
+
description: Describe the feature(s) you would like to see added.
|
16 |
+
placeholder: Tell us your suggestion
|
17 |
+
validations:
|
18 |
+
required: true
|
19 |
+
|
20 |
+
- type: textarea
|
21 |
+
id: why-usage
|
22 |
+
attributes:
|
23 |
+
label: Why would this be useful?
|
24 |
+
description: Describe why this feature would be useful.
|
25 |
+
placeholder: Tell us why this would be useful to have this feature
|
26 |
+
validations:
|
27 |
+
required: false
|
28 |
+
|
29 |
+
- type: textarea
|
30 |
+
id: screenshots-assets
|
31 |
+
attributes:
|
32 |
+
label: Screenshots/Assets/Relevant links
|
33 |
+
description: If applicable, add screenshots, assets or any relevant links that can help understand the issue.
|
34 |
+
placeholder: Provide any relevant material here
|
35 |
+
validations:
|
36 |
+
required: false
|
.github/ISSUE_TEMPLATE/question.yaml
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: ❓ Question
|
2 |
+
description: Ask a question about this project
|
3 |
+
title: '❓ [Question]: '
|
4 |
+
labels: ['question']
|
5 |
+
body:
|
6 |
+
- type: markdown
|
7 |
+
attributes:
|
8 |
+
value: |
|
9 |
+
We appreciate your interest in this project. Please be sure to include as much detail & context about your question as possible!
|
10 |
+
|
11 |
+
- type: textarea
|
12 |
+
id: Question
|
13 |
+
attributes:
|
14 |
+
label: Your Question
|
15 |
+
description: Describe your question in detail.
|
16 |
+
validations:
|
17 |
+
required: true
|
.github/SECURITY.md
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Security Policy
|
2 |
+
|
3 |
+
## Supported Versions
|
4 |
+
|
5 |
+
| Version | Supported |
|
6 |
+
| ------- | ------------------ |
|
7 |
+
| 0.0.x | :x: |
|
8 |
+
|
9 |
+
## 🔒️ Reporting a Vulnerability
|
10 |
+
|
11 |
+
If you have identified a security vulnerability in system or product please `RayVentura` with your findings. We strongly recommend using our `PGP key` to prevent this information from falling into the wrong hands.
|
12 |
+
|
13 |
+
### Disclosure Policy
|
14 |
+
|
15 |
+
Upon receipt of a security report the following steps will be taken:
|
16 |
+
|
17 |
+
- Acknowledge your report within 48 hours, and provide a further more detailed update within 48 hours.
|
18 |
+
- Confirm the problem and determine the affected versions
|
19 |
+
- Keep you informed of the progress towards resolving the problem and notify you when the vulnerability has been fixed.
|
20 |
+
- Audit code to find any potential similar problems.
|
21 |
+
- Prepare fixes for all releases still under maintenance. These fixes will be released as fast as possible.
|
22 |
+
- Handle your report with strict confidentiality, and not pass on your personal details to third parties without your permission.
|
23 |
+
|
24 |
+
Whilst the issue is under investigation
|
25 |
+
|
26 |
+
- **Do** provide as much information as possible.
|
27 |
+
- **Do not** exploit of the vulnerability or problem you have discovered.
|
28 |
+
- **Do not** reveal the problem to others until it has been resolved.
|
.github/config.yml
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome
|
2 |
+
|
3 |
+
# Comment to be posted to on first time issues
|
4 |
+
newIssueWelcomeComment: >
|
5 |
+
Thanks for opening your first issue! Reports like these help improve the project!
|
6 |
+
|
7 |
+
# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome
|
8 |
+
|
9 |
+
# Comment to be posted to on PRs from first time contributors in your repository
|
10 |
+
newPRWelcomeComment: >
|
11 |
+
Thanks for opening this pull request!
|
12 |
+
|
13 |
+
# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge
|
14 |
+
|
15 |
+
# Comment to be posted to on pull requests merged by a first time user
|
16 |
+
firstPRMergeComment: >
|
17 |
+
Congrats on merging your first pull request!
|
18 |
+
|
19 |
+
# The keyword to find for Todo Bot issue
|
20 |
+
todo:
|
21 |
+
keyword: '@todo'
|
.github/issue_label_bot.yaml
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
label-alias:
|
2 |
+
bug: 'Type: Bug'
|
3 |
+
feature_request: 'Type: Feature'
|
4 |
+
question: 'Type: Question'
|
.github/pull_request_template.md
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Proposed changes
|
2 |
+
|
3 |
+
Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue. 👀🔧
|
4 |
+
|
5 |
+
## Types of changes
|
6 |
+
|
7 |
+
What types of changes does your code introduce to this project?
|
8 |
+
_Put an `x` in the boxes that apply_ 😄🚀
|
9 |
+
|
10 |
+
- [ ] Bugfix (non-breaking change which fixes an issue) 🐛
|
11 |
+
- [ ] New feature (non-breaking change which adds functionality) ✨
|
12 |
+
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) 💥
|
13 |
+
- [ ] Documentation Update (if none of the other choices apply) 📖
|
14 |
+
|
15 |
+
## Checklist
|
16 |
+
|
17 |
+
_Put an `x` in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code._ ✅
|
18 |
+
|
19 |
+
- [ ] I have read the CONTRIBUTING.md 📚
|
20 |
+
- [ ] I have added tests that prove my fix is effective or that my feature works ✅✔️
|
21 |
+
- [ ] I have added necessary documentation (if appropriate) 📝
|
22 |
+
|
23 |
+
## Further comments
|
24 |
+
|
25 |
+
If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc... 💡❓
|
26 |
+
|
27 |
+
|
28 |
+
## References and related issues (e.g. #1234)
|
29 |
+
|
30 |
+
N/A 📌
|
.github/settings.yml
ADDED
@@ -0,0 +1,190 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
repository:
|
2 |
+
# See https://developer.github.com/v3/repos/#edit for all available settings.
|
3 |
+
|
4 |
+
# The name of the repository. Changing this will rename the repository
|
5 |
+
#name: repo-name
|
6 |
+
|
7 |
+
# A short description of the repository that will show up on GitHub
|
8 |
+
#description: description of repo
|
9 |
+
|
10 |
+
# A URL with more information about the repository
|
11 |
+
#homepage: https://example.github.io/
|
12 |
+
|
13 |
+
# A comma-separated list of topics to set on the repository
|
14 |
+
#topics: project, template, project-template
|
15 |
+
|
16 |
+
# Either `true` to make the repository private, or `false` to make it public.
|
17 |
+
#private: false
|
18 |
+
|
19 |
+
# Either `true` to enable issues for this repository, `false` to disable them.
|
20 |
+
has_issues: true
|
21 |
+
|
22 |
+
# Either `true` to enable the wiki for this repository, `false` to disable it.
|
23 |
+
has_wiki: true
|
24 |
+
|
25 |
+
# Either `true` to enable downloads for this repository, `false` to disable them.
|
26 |
+
#has_downloads: true
|
27 |
+
|
28 |
+
# Updates the default branch for this repository.
|
29 |
+
default_branch: stable
|
30 |
+
|
31 |
+
# Either `true` to allow squash-merging pull requests, or `false` to prevent
|
32 |
+
# squash-merging.
|
33 |
+
#allow_squash_merge: true
|
34 |
+
|
35 |
+
# Either `true` to allow merging pull requests with a merge commit, or `false`
|
36 |
+
# to prevent merging pull requests with merge commits.
|
37 |
+
#allow_merge_commit: true
|
38 |
+
|
39 |
+
# Either `true` to allow rebase-merging pull requests, or `false` to prevent
|
40 |
+
# rebase-merging.
|
41 |
+
#allow_rebase_merge: true
|
42 |
+
|
43 |
+
# Labels: define labels for Issues and Pull Requests
|
44 |
+
labels:
|
45 |
+
- name: 'Type: Bug'
|
46 |
+
color: e80c0c
|
47 |
+
description: Something isn't working as expected.
|
48 |
+
|
49 |
+
- name: 'Type: Enhancement'
|
50 |
+
color: 54b2ff
|
51 |
+
description: Suggest an improvement for an existing feature.
|
52 |
+
|
53 |
+
- name: 'Type: Feature'
|
54 |
+
color: 54b2ff
|
55 |
+
description: Suggest a new feature.
|
56 |
+
|
57 |
+
- name: 'Type: Security'
|
58 |
+
color: fbff00
|
59 |
+
description: A problem or enhancement related to a security issue.
|
60 |
+
|
61 |
+
- name: 'Type: Question'
|
62 |
+
color: 9309ab
|
63 |
+
description: Request for information.
|
64 |
+
|
65 |
+
- name: 'Type: Test'
|
66 |
+
color: ce54e3
|
67 |
+
description: A problem or enhancement related to a test.
|
68 |
+
|
69 |
+
- name: 'Status: Awaiting Review'
|
70 |
+
color: 24d15d
|
71 |
+
description: Ready for review.
|
72 |
+
|
73 |
+
- name: 'Status: WIP'
|
74 |
+
color: 07b340
|
75 |
+
description: Currently being worked on.
|
76 |
+
|
77 |
+
- name: 'Status: Waiting'
|
78 |
+
color: 38C968
|
79 |
+
description: Waiting on something else to be ready.
|
80 |
+
|
81 |
+
- name: 'Status: Stale'
|
82 |
+
color: 66b38a
|
83 |
+
description: Has had no activity for some time.
|
84 |
+
|
85 |
+
- name: 'Duplicate'
|
86 |
+
color: EB862D
|
87 |
+
description: Duplicate of another issue.
|
88 |
+
|
89 |
+
- name: 'Invalid'
|
90 |
+
color: faef50
|
91 |
+
description: This issue doesn't seem right.
|
92 |
+
|
93 |
+
- name: 'Priority: High +'
|
94 |
+
color: ff008c
|
95 |
+
description: Task is considered higher-priority.
|
96 |
+
|
97 |
+
- name: 'Priority: Low -'
|
98 |
+
color: 690a34
|
99 |
+
description: Task is considered lower-priority.
|
100 |
+
|
101 |
+
- name: 'Documentation'
|
102 |
+
color: 2fbceb
|
103 |
+
description: An issue/change with the documentation.
|
104 |
+
|
105 |
+
- name: "Won't fix"
|
106 |
+
color: C8D9E6
|
107 |
+
description: Reported issue is working as intended.
|
108 |
+
|
109 |
+
- name: '3rd party issue'
|
110 |
+
color: e88707
|
111 |
+
description: This issue might be caused by a 3rd party script/package/other reasons
|
112 |
+
|
113 |
+
- name: 'Os: Windows'
|
114 |
+
color: AEB1C2
|
115 |
+
description: Is Windows-specific
|
116 |
+
|
117 |
+
- name: 'Os: Mac'
|
118 |
+
color: AEB1C2
|
119 |
+
description: Is Mac-specific
|
120 |
+
|
121 |
+
- name: 'Os: Linux'
|
122 |
+
color: AEB1C2
|
123 |
+
description: Is Linux-specific
|
124 |
+
|
125 |
+
- name: 'Os: Google Colab'
|
126 |
+
color: AEB1C2
|
127 |
+
description: Is Google Colab-specific
|
128 |
+
#
|
129 |
+
#
|
130 |
+
# # Collaborators: give specific users access to this repository.
|
131 |
+
# # See https://developer.github.com/v3/repos/collaborators/#add-user-as-a-collaborator for available options
|
132 |
+
# collaborators:
|
133 |
+
# # - username: bkeepers
|
134 |
+
# # permission: push
|
135 |
+
# # - username: hubot
|
136 |
+
# # permission: pull
|
137 |
+
|
138 |
+
# # Note: `permission` is only valid on organization-owned repositories.
|
139 |
+
# # The permission to grant the collaborator. Can be one of:
|
140 |
+
# # * `pull` - can pull, but not push to or administer this repository.
|
141 |
+
# # * `push` - can pull and push, but not administer this repository.
|
142 |
+
# # * `admin` - can pull, push and administer this repository.
|
143 |
+
# # * `maintain` - Recommended for project managers who need to manage the repository without access to sensitive or destructive actions.
|
144 |
+
# # * `triage` - Recommended for contributors who need to proactively manage issues and pull requests without write access.
|
145 |
+
|
146 |
+
# # See https://developer.github.com/v3/teams/#add-or-update-team-repository for available options
|
147 |
+
# teams:
|
148 |
+
# - name: core
|
149 |
+
# # The permission to grant the team. Can be one of:
|
150 |
+
# # * `pull` - can pull, but not push to or administer this repository.
|
151 |
+
# # * `push` - can pull and push, but not administer this repository.
|
152 |
+
# # * `admin` - can pull, push and administer this repository.
|
153 |
+
# # * `maintain` - Recommended for project managers who need to manage the repository without access to sensitive or destructive actions.
|
154 |
+
# # * `triage` - Recommended for contributors who need to proactively manage issues and pull requests without write access.
|
155 |
+
# permission: admin
|
156 |
+
# - name: docs
|
157 |
+
# permission: push
|
158 |
+
|
159 |
+
# branches:
|
160 |
+
# - name: master
|
161 |
+
# # https://developer.github.com/v3/repos/branches/#update-branch-protection
|
162 |
+
# # Branch Protection settings. Set to null to disable
|
163 |
+
# protection:
|
164 |
+
# # Required. Require at least one approving review on a pull request, before merging. Set to null to disable.
|
165 |
+
# required_pull_request_reviews:
|
166 |
+
# # The number of approvals required. (1-6)
|
167 |
+
# required_approving_review_count: 1
|
168 |
+
# # Dismiss approved reviews automatically when a new commit is pushed.
|
169 |
+
# dismiss_stale_reviews: true
|
170 |
+
# # Blocks merge until code owners have reviewed.
|
171 |
+
# require_code_owner_reviews: true
|
172 |
+
# # Specify which users and teams can dismiss pull request reviews. Pass an empty dismissal_restrictions object to disable. User and team dismissal_restrictions are only available for organization-owned repositories. Omit this parameter for personal repositories.
|
173 |
+
# dismissal_restrictions:
|
174 |
+
# users: []
|
175 |
+
# teams: []
|
176 |
+
# # Required. Require status checks to pass before merging. Set to null to disable
|
177 |
+
# required_status_checks:
|
178 |
+
# # Required. Require branches to be up to date before merging.
|
179 |
+
# strict: true
|
180 |
+
# # Required. The list of status checks to require in order to merge into this branch
|
181 |
+
# contexts: []
|
182 |
+
# # Required. Enforce all configured restrictions for administrators. Set to true to enforce required status checks for repository administrators. Set to null to disable.
|
183 |
+
# enforce_admins: true
|
184 |
+
# # Prevent merge commits from being pushed to matching branches
|
185 |
+
# required_linear_history: true
|
186 |
+
# # Required. Restrict who can push to this branch. Team and user restrictions are only available for organization-owned repositories. Set to null to disable.
|
187 |
+
# restrictions:
|
188 |
+
# apps: []
|
189 |
+
# users: []
|
190 |
+
# teams: []
|
.github/workflows/generate_release-changelog.yaml
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Create Release
|
2 |
+
|
3 |
+
on:
|
4 |
+
push:
|
5 |
+
tags:
|
6 |
+
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
|
7 |
+
|
8 |
+
jobs:
|
9 |
+
build:
|
10 |
+
name: Create Release
|
11 |
+
runs-on: ubuntu-latest
|
12 |
+
steps:
|
13 |
+
- name: Checkout code
|
14 |
+
uses: actions/checkout@v2
|
15 |
+
with:
|
16 |
+
fetch-depth: 0
|
17 |
+
- name: Changelog
|
18 |
+
uses: Bullrich/generate-release-changelog@master
|
19 |
+
id: Changelog
|
20 |
+
env:
|
21 |
+
REPO: ${{ github.repository }}
|
22 |
+
- name: Create Release
|
23 |
+
id: create_release
|
24 |
+
uses: actions/create-release@latest
|
25 |
+
env:
|
26 |
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
|
27 |
+
with:
|
28 |
+
tag_name: ${{ github.ref }}
|
29 |
+
release_name: Release ${{ github.ref }}
|
30 |
+
body: |
|
31 |
+
${{ steps.Changelog.outputs.changelog }}
|
32 |
+
draft: false
|
33 |
+
prerelease: false
|
.gitignore
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
!*.py
|
2 |
+
!*.json
|
3 |
+
!*.yaml
|
4 |
+
!*.template
|
5 |
+
*.pyc
|
6 |
+
**/__pycache__/
|
7 |
+
test.py
|
8 |
+
public/*
|
9 |
+
!public/white_reddit_template.png
|
10 |
+
!public/subscribe-animation.mp4
|
11 |
+
z_doc/*
|
12 |
+
z_other/*
|
13 |
+
videos/*
|
14 |
+
.logs/
|
15 |
+
.editing_assets/*
|
16 |
+
.database/api_db.json
|
17 |
+
.database/content_db.json
|
18 |
+
.database/asset_db.json
|
19 |
+
flagged/
|
20 |
+
.vscode
|
21 |
+
.env
|
22 |
+
ShortGPT.egg-info
|
23 |
+
dist
|
24 |
+
build
|
25 |
+
setup
|
26 |
+
test.ipynb
|
27 |
+
.venv/
|
28 |
+
MANIFEST.in
|
CHANGES.txt
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# CHANGES
|
2 |
+
|
3 |
+
## Version 0.1.31
|
4 |
+
- Fixing issue in AssetDatabase, where it was copying unexisting asset template file
|
5 |
+
## Version 0.1.3
|
6 |
+
- Requiring a youtube url as the subscribe animation url in the EditingStep.ADD_SUBSCRIBE_ANIMATION step.
|
7 |
+
- Adding a default subscribe animation youtube link by default shipped in the AssetDatabase
|
8 |
+
- Making path imports relative for gpt prompts and editing blocks and flows.
|
9 |
+
## Version 0.1.2
|
10 |
+
- Improving logs in content engines
|
11 |
+
## Version 0.1.1
|
12 |
+
- Adding AssetType in AssetDatabase
|
13 |
+
- Adding ApiProvider in api_db
|
14 |
+
- Fixing pip libary missing editing_framework module, prompt_template module
|
15 |
+
## Version 0.1.0
|
16 |
+
- Fixing the AssetDatabase when it's empty
|
17 |
+
## Version 0.0.2
|
18 |
+
- Implemented the content_translation_engine; a multilingual video dubbing content engine. The source can be found at shortGPT/engine/content_translation_engine.py.
|
19 |
+
- Implemented the new EdgeTTS voice module; it can be found at shortgpt/audio/edge_voice_module.
|
20 |
+
- Added documentation which can be found under docs/.
|
Dockerfile
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Use an official Python runtime as the parent image
|
2 |
+
FROM python:3.11-bullseye
|
3 |
+
RUN apt-get update && apt-get install -y \
|
4 |
+
ffmpeg \
|
5 |
+
imagemagick \
|
6 |
+
ghostscript \
|
7 |
+
fonts-roboto \
|
8 |
+
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
9 |
+
# Update font cache
|
10 |
+
RUN fc-cache -f -v
|
11 |
+
|
12 |
+
RUN sed -i '/<policy domain="path" rights="none" pattern="@\*"/d' /etc/ImageMagick-6/policy.xml
|
13 |
+
# Clean up APT when done
|
14 |
+
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
|
15 |
+
|
16 |
+
# Set the working directory in the container to /app
|
17 |
+
WORKDIR /app
|
18 |
+
|
19 |
+
# Install any Python packages specified in requirements.txt
|
20 |
+
# Copy requirements file
|
21 |
+
COPY requirements.txt .
|
22 |
+
|
23 |
+
# Install dependencies
|
24 |
+
RUN pip install -r requirements.txt
|
25 |
+
|
26 |
+
# Copy the local package directory content into the container at /app
|
27 |
+
COPY . /app
|
28 |
+
|
29 |
+
EXPOSE 31415
|
30 |
+
|
31 |
+
# Define any environment variables
|
32 |
+
# ENV KEY Value
|
33 |
+
|
34 |
+
# Print environment variables (for debugging purposes, you can remove this line if not needed)
|
35 |
+
RUN ["printenv"]
|
36 |
+
|
37 |
+
# Run Python script when the container launches
|
38 |
+
CMD ["python", "./runShortGPT.py"]
|
LICENSE
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
ShortGPT License
|
2 |
+
|
3 |
+
Depending on the type of your legal entity, you are granted permission to use ShortGPT for your project. Individuals and small companies are allowed to use ShortGPT to create videos for free (even commercial), while a company license is required for for-profit organizations of a certain size. This two-tier system was designed to ensure funding for this project while still allowing the source code to be available and the program to be free for most. Read below for the exact terms of use.
|
4 |
+
|
5 |
+
Free license
|
6 |
+
Company license
|
7 |
+
|
8 |
+
Free license
|
9 |
+
|
10 |
+
Copyright © 2023 ShortGPT
|
11 |
+
Eligibility
|
12 |
+
|
13 |
+
You are eligible to use ShortGPT for free if you are:
|
14 |
+
|
15 |
+
an individual
|
16 |
+
a for-profit organization with a gross revenue up to 314 159$ a year.
|
17 |
+
a non-profit or not-for-profit organization
|
18 |
+
evaluating whether ShortGPT is a good fit, and are not yet using it in a commercial way
|
19 |
+
|
20 |
+
Allowed use cases
|
21 |
+
|
22 |
+
Permission is hereby granted, free of charge, to any person eligible for the "Free license", to use the software non-commercially or commercially for the purpose of creating videos and images and to modify the software to their own liking, for the purpose of fulfilling their custom use case or to contribute bug fixes or improvements back to ShortGPT.
|
23 |
+
Disallowed use cases
|
24 |
+
|
25 |
+
It is not allowed to copy or modify ShortGPT code for the purpose of selling, renting, licensing, relicensing, or sublicensing your own derivate of ShortGPT.
|
26 |
+
Warranty notice
|
27 |
+
|
28 |
+
The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and non-infringement. In no event shall the author or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.
|
29 |
+
Support
|
30 |
+
|
31 |
+
Support is provided on a best-we-can-do basis via GitHub Issues and Discord.
|
32 |
+
Company license
|
33 |
+
|
34 |
+
You are required to obtain a company license to use ShortGPT if you are not within the group of entities eligible for a free license. This license will enable you to use ShortGPT for the allowed use cases specified in the free license, and give you access to prioritized support.
|
35 |
+
We will deduct 10% of the revenue generated from ShortGPT as part of the payment for the company license.
|
README-Docker.md
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# To run ShortGPT docker:
|
2 |
+
|
3 |
+
|
4 |
+
First make a .env file with the API keys like this:
|
5 |
+
|
6 |
+
```bash
|
7 |
+
OPENAI_API_KEY=sk-_put_your_openai_api_key_here
|
8 |
+
ELEVENLABS_API_KEY=put_your_eleven_labs_api_key_here
|
9 |
+
PEXELS_API_KEY=put_your_pexels_api_key_here
|
10 |
+
```
|
11 |
+
|
12 |
+
|
13 |
+
To run Dockerfile do this:
|
14 |
+
```bash
|
15 |
+
docker build -t short_gpt_docker:latest .
|
16 |
+
docker run -p 31415:31415 --env-file .env short_gpt_docker:latest
|
17 |
+
```
|
18 |
+
Export Docker image:
|
19 |
+
```bash
|
20 |
+
docker save short_gpt_docker > short_gpt_docker.tar
|
21 |
+
```
|
README.md
CHANGED
@@ -1,12 +1,131 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# 🚀🎬 ShortGPT
|
2 |
+
## (Note: ShortX is out, a paid premium automation factory with more capabilities than ShortGPT, check it out at [shortx.ai](https://shortx.ai?ref=sgpt))
|
3 |
+
<p align="center">
|
4 |
+
<a href="https://discord.gg/uERx39ru3R">
|
5 |
+
<img src="https://dcbadge.vercel.app/api/server/uERx39ru3R?compact=true&style=flat">
|
6 |
+
</a>
|
7 |
+
<a href="https://star-history.com/#rayventura/shortgpt)">
|
8 |
+
<img src="https://img.shields.io/github/stars/rayventura/shortgpt?style=social">
|
9 |
+
</a>
|
10 |
+
<a href="https://pypi.org/project/shortgpt/">
|
11 |
+
<img src="https://static.pepy.tech/personalized-badge/shortgpt?period=month&units=international_system&left_color=blue&right_color=green&left_text=Downloads/month">
|
12 |
+
</a>
|
13 |
+
<a href="https://docs.shortgpt.ai/">
|
14 |
+
<img src="https://img.shields.io/badge/docs-visit-blue">
|
15 |
+
</a>
|
16 |
+
</p>
|
17 |
+
|
18 |
+
<div align="center" style="border-radius: 20px;" width="18%">
|
19 |
+
<img src="https://github.com/RayVentura/ShortGPT/assets/121462835/083c8dc3-bac5-42c1-a08d-3ff9686d18c5" alt="ShortGPT-logo" style="border-radius: 20px;" width="18%"/>
|
20 |
+
</div>
|
21 |
+
<div align="center">
|
22 |
+
<a href="https://discord.gg/uERx39ru3R">
|
23 |
+
<img src="https://img.shields.io/discord/1126042224979886160?color=7289da&logo=discord&logoColor=blue&labelColor=white&color=cyan" alt="Join our Discord" height="34">
|
24 |
+
</a>
|
25 |
+
</div>
|
26 |
+
|
27 |
+
<div align="center">
|
28 |
+
⚡ Automating video and short content creation with AI ⚡
|
29 |
+
</div>
|
30 |
+
</br>
|
31 |
+
|
32 |
+
Follow the installation steps below for running the web app locally (running the google Colab is highly recommanded).
|
33 |
+
Please read "installation-notes.md" for more details.
|
34 |
+
## 🎥 Showcase ([Full video on YouTube](https://youtu.be/hpoSHq-ER8U))
|
35 |
+
|
36 |
+
https://github.com/RayVentura/ShortGPT/assets/121462835/a802faad-0fd7-4fcb-aa82-6365c27ea5fe
|
37 |
+
## 🎥 Voice Dubbing
|
38 |
+
|
39 |
+
|
40 |
+
https://github.com/RayVentura/ShortGPT/assets/121462835/06f51b2d-f8b1-4a23-b299-55e0e18902ef
|
41 |
+
|
42 |
+
## 🌟 Show Your Support
|
43 |
+
We hope you find ShortGPT helpful! If you do, let us know by giving us a star ⭐ on the repo. It's easy, just click on the 'Star' button at the top right of the page. Your support means a lot to us and keeps us motivated to improve and expand ShortGPT. Thank you and happy content creating! 🎉
|
44 |
+
|
45 |
+
[![GitHub star chart](https://img.shields.io/github/stars/rayventura/shortgpt?style=social)](https://github.com/RayVentura/ShortGPT/stargazers)
|
46 |
+
## 🛠️ How it works
|
47 |
+
![alt text](https://github.com/RayVentura/ShortGPT/assets/121462835/fcee74d4-f856-4481-949f-244558bf3bfa)
|
48 |
+
## 📝 Introduction to ShortGPT
|
49 |
+
ShortGPT is a powerful framework for automating content creation. It simplifies video creation, footage sourcing, voiceover synthesis, and editing tasks. Of the most popular use-cases of ShortGPT is youtube automation and Tiktok creativity program automation.
|
50 |
+
|
51 |
+
- 🎞️ **Automated editing framework**: Streamlines the video creation process with an LLM oriented video editing language.
|
52 |
+
|
53 |
+
- 📃 **Scripts and Prompts**: Provides ready-to-use scripts and prompts for various LLM automated editing processes.
|
54 |
+
|
55 |
+
- 🗣️ **Voiceover / Content Creation**: Supports multiple languages including English 🇺🇸, Spanish 🇪🇸, Arabic 🇦🇪, French 🇫🇷, Polish 🇵🇱, German 🇩🇪, Italian 🇮🇹, Portuguese 🇵🇹, Russian 🇷🇺, Mandarin Chinese 🇨🇳, Japanese 🇯🇵, Hindi 🇮🇳,Korean 🇰🇷, and way over 30 more languages (with EdgeTTS)
|
56 |
+
|
57 |
+
- 🔗 **Caption Generation**: Automates the generation of video captions.
|
58 |
+
|
59 |
+
- 🌐🎥 **Asset Sourcing**: Sources images and video footage from the internet, connecting with the web and Pexels API as necessary.
|
60 |
+
|
61 |
+
- 🧠 **Memory and persistency**: Ensures long-term persistency of automated editing variables with TinyDB.
|
62 |
+
|
63 |
+
## 🚀 Quick Start: Run ShortGPT on Google Colab (https://colab.research.google.com/drive/1_2UKdpF6lqxCqWaAcZb3rwMVQqtbisdE?usp=sharing)
|
64 |
+
|
65 |
+
If you prefer not to install the prerequisites on your local system, you can use the Google Colab notebook. This option is free and requires no installation setup.
|
66 |
+
|
67 |
+
1. Click on the link to the Google Colab notebook: [https://colab.research.google.com/drive/1_2UKdpF6lqxCqWaAcZb3rwMVQqtbisdE?usp=sharing](https://colab.research.google.com/drive/1_2UKdpF6lqxCqWaAcZb3rwMVQqtbisdE?usp=sharing)
|
68 |
+
|
69 |
+
2. Once you're in the notebook, simply run the cells in order from top to bottom. You can do this by clicking on each cell and pressing the 'Play' button, or by using the keyboard . Enjoy using ShortGPT!
|
70 |
+
|
71 |
+
# Instructions for running shortGPT locally
|
72 |
+
This guide provides step-by-step instructions for installing shortGPT and its dependencies.
|
73 |
+
To run ShortGPT locally, you need Docker.
|
74 |
+
|
75 |
+
## Installation Steps
|
76 |
+
|
77 |
+
To run ShortGPT, you need to have docker. Follow the instructions "installation-notes.md" for more details.
|
78 |
+
|
79 |
+
1. For running the Dockerfile, do this:
|
80 |
+
```bash
|
81 |
+
docker build -t short_gpt_docker:latest .
|
82 |
+
docker run -p 31415:31415 --env-file .env short_gpt_docker:latest
|
83 |
+
```
|
84 |
+
## Running runShortGPT.py Web Interface
|
85 |
+
|
86 |
+
2. After running the script, a Gradio interface should open at your local host on port 31415 (http://localhost:31415)
|
87 |
+
|
88 |
+
|
89 |
+
## Framework overview
|
90 |
+
|
91 |
+
- 🎬 The `ContentShortEngine` is designed for creating shorts, handling tasks from script generation to final rendering, including adding YouTube metadata.
|
92 |
+
|
93 |
+
- 🎥 The `ContentVideoEngine` is ideal for longer videos, taking care of tasks like generating audio, automatically sourcing background video footage, timing captions, and preparing background assets.
|
94 |
+
|
95 |
+
- 🗣️ The `ContentTranslationEngine` is designed to dub and translate entire videos, from mainstream languages to more specific target languages. It takes a video file, or youtube link, transcribe it's audio, translates the content, voices it in a target language, adds captions , and gives back a new video, in a totally different language.
|
96 |
+
|
97 |
+
- 🎞️ The automated `EditingEngine`, using Editing Markup Language and JSON, breaks down the editing process into manageable and customizable blocks, comprehensible to Large Language Models.
|
98 |
+
|
99 |
+
💡 ShortGPT offers customization options to suit your needs, from language selection to watermark addition.
|
100 |
+
|
101 |
+
🔧 As a framework, ShortGPT is adaptable and flexible, offering the potential for efficient, creative content creation.
|
102 |
+
|
103 |
+
More documentation incomming, please be patient.
|
104 |
+
|
105 |
+
|
106 |
+
## Technologies Used
|
107 |
+
|
108 |
+
ShortGPT utilizes the following technologies to power its functionality:
|
109 |
+
|
110 |
+
- **Moviepy**: Moviepy is used for video editing, allowing ShortGPT to make video editing and rendering
|
111 |
+
|
112 |
+
- **Openai**: Openai is used for automating the entire process, including generating scripts and prompts for LLM automated editing processes.
|
113 |
+
|
114 |
+
- **ElevenLabs**: ElevenLabs is used for voice synthesis, supporting multiple languages for voiceover creation.
|
115 |
+
|
116 |
+
- **EdgeTTS**: Microsoft's FREE EdgeTTS is used for voice synthesis, supporting way many more language than ElevenLabs currently.
|
117 |
+
|
118 |
+
- **Pexels**: Pexels is used for sourcing background footage, allowing ShortGPT to connect with the web and access a wide range of images and videos.
|
119 |
+
|
120 |
+
- **Bing Image**: Bing Image is used for sourcing images, providing a comprehensive database for ShortGPT to retrieve relevant visuals.
|
121 |
+
|
122 |
+
These technologies work together to provide a seamless and efficient experience in automating video and short content creation with AI.
|
123 |
+
|
124 |
+
## 💁 Contributing
|
125 |
+
|
126 |
+
As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it would be in the form of a new feature, improved infrastructure, or better documentation.
|
127 |
+
<p align="center">
|
128 |
+
<a href="https://star-history.com/#RayVentura/ShortGPT&Date">
|
129 |
+
<img src="https://api.star-history.com/svg?repos=RayVentura/ShortGPT&type=Date" alt="Star History Chart">
|
130 |
+
</a>
|
131 |
+
</p>
|
assets/img/logo.png
ADDED
docs/.gitignore
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Dependencies
|
2 |
+
/node_modules
|
3 |
+
|
4 |
+
# Production
|
5 |
+
/build
|
6 |
+
|
7 |
+
# Generated files
|
8 |
+
.docusaurus
|
9 |
+
.cache-loader
|
10 |
+
|
11 |
+
# Misc
|
12 |
+
.DS_Store
|
13 |
+
.env.local
|
14 |
+
.env.development.local
|
15 |
+
.env.test.local
|
16 |
+
.env.production.local
|
17 |
+
|
18 |
+
npm-debug.log*
|
19 |
+
yarn-debug.log*
|
20 |
+
yarn-error.log*
|
docs/README.md
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# ShortGPT Documentation
|
2 |
+
# Installation
|
3 |
+
|
4 |
+
1. `yarn install` in the root of this repository (two level above this directory).
|
5 |
+
1. In this directory, do `yarn start`.
|
6 |
+
1. A browser window will open up, pointing to the docs.
|
7 |
+
|
8 |
+
# Deployment
|
9 |
+
|
10 |
+
Vercel handles the deployment of this website.
|
docs/babel.config.js
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
module.exports = {
|
2 |
+
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
|
3 |
+
};
|
docs/docs/api-key-manager.mdx
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: ApiKeyManager in ShortGPT
|
3 |
+
sidebar_label: ApiKeyManager
|
4 |
+
---
|
5 |
+
|
6 |
+
# ApiKeyManager in ShortGPT
|
7 |
+
|
8 |
+
ApiKeyManager is a class in the ShortGPT framework that manages the API keys for different providers. It interacts with the database to get and set API keys.
|
9 |
+
|
10 |
+
## Importing ApiKeyManager
|
11 |
+
|
12 |
+
```python
|
13 |
+
from shortGPT.config.api_db import ApiKeyManager, ApiProvider
|
14 |
+
```
|
15 |
+
|
16 |
+
## Using ApiKeyManager
|
17 |
+
|
18 |
+
ApiKeyManager provides two main methods: `get_api_key` and `set_api_key`.
|
19 |
+
|
20 |
+
### set_api_key
|
21 |
+
|
22 |
+
This method is used to set the API key for a specific provider in the database. It takes two arguments: the key (provider name) and the value (API key).
|
23 |
+
|
24 |
+
```python
|
25 |
+
ApiKeyManager.set_api_key(ApiProvider.OPENAI, "your_openai_key")
|
26 |
+
ApiKeyManager.set_api_key(ApiProvider.ELEVEN_LABS, "your_eleven_labs_key")
|
27 |
+
```
|
28 |
+
|
29 |
+
In the above example, we are setting the API keys for OPENAI and ELEVEN_LABS.
|
30 |
+
|
31 |
+
### get_api_key
|
32 |
+
|
33 |
+
This method is used to retrieve the API key for a specific provider from the database. It takes one argument: the key (provider name).
|
34 |
+
|
35 |
+
```python
|
36 |
+
openai_key = ApiKeyManager.get_api_key(ApiProvider.OPENAI)
|
37 |
+
eleven_labs_key = ApiKeyManager.get_api_key(ApiProvider.ELEVEN_LABS)
|
38 |
+
```
|
39 |
+
In the above example, we are retrieving the API keys for OPENAI and ELEVEN_LABS.
|
40 |
+
|
41 |
+
## Note
|
42 |
+
|
43 |
+
The `key` argument in both methods can either be a string or an instance of the `ApiProvider` enum. If it is an instance of `ApiProvider`, the `value` attribute of the enum instance will be used as the key.
|
44 |
+
|
45 |
+
```python
|
46 |
+
ApiKeyManager.set_api_key("OPENAI", "your_openai_key")
|
47 |
+
ApiKeyManager.set_api_key("ELEVEN LABS", "your_eleven_labs_key")
|
48 |
+
|
49 |
+
openai_key = ApiKeyManager.get_api_key("OPENAI")
|
50 |
+
eleven_labs_key = ApiKeyManager.get_api_key("ELEVEN LABS")
|
51 |
+
```
|
52 |
+
In the above example, we are setting and retrieving the API keys using string keys instead of `ApiProvider` instances.
|
docs/docs/asset-database.mdx
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: AssetDatabase in ShortGPT
|
3 |
+
sidebar_label: AssetDatabase
|
4 |
+
---
|
5 |
+
|
6 |
+
# AssetDatabase in ShortGPT
|
7 |
+
|
8 |
+
The `AssetDatabase` in ShortGPT is a powerful tool that allows you to manage both local and remote assets. This guide will provide you with examples of how to use the `AssetDatabase`.
|
9 |
+
|
10 |
+
## Importing AssetDatabase and AssetType
|
11 |
+
|
12 |
+
```python
|
13 |
+
from shortGPT.config.asset_db import AssetDatabase, AssetType
|
14 |
+
```
|
15 |
+
|
16 |
+
## Adding Assets
|
17 |
+
|
18 |
+
You can add both remote and local assets to the `AssetDatabase`.
|
19 |
+
|
20 |
+
### Adding Remote Assets
|
21 |
+
|
22 |
+
```python
|
23 |
+
AssetDatabase.add_remote_asset("minecraft background cube", AssetType.BACKGROUND_VIDEO, "https://www.youtube.com/watch?v=Pt5_GSKIWQM")
|
24 |
+
AssetDatabase.add_remote_asset('chill music', AssetType.BACKGROUND_MUSIC, "https://www.youtube.com/watch?v=uUu1NcSHg2E")
|
25 |
+
```
|
26 |
+
|
27 |
+
### Adding Local Assets
|
28 |
+
|
29 |
+
```python
|
30 |
+
AssetDatabase.add_local_asset('my_music', AssetType.AUDIO, "./my_music.wav")
|
31 |
+
```
|
32 |
+
|
33 |
+
## Asset Types
|
34 |
+
|
35 |
+
The `AssetType` enum is used to specify the type of asset being added to the `AssetDatabase`. The available asset types are:
|
36 |
+
|
37 |
+
- VIDEO
|
38 |
+
- AUDIO
|
39 |
+
- IMAGE
|
40 |
+
- BACKGROUND_MUSIC
|
41 |
+
- BACKGROUND_VIDEO
|
42 |
+
- OTHER
|
43 |
+
|
44 |
+
## Getting Asset Information
|
45 |
+
|
46 |
+
You can retrieve information about an asset using the following methods:
|
47 |
+
|
48 |
+
### Get Asset Duration
|
49 |
+
|
50 |
+
This method returns the duration in seconds of a video or audio asset. If the asset is neither video nor audio, it returns `None`.
|
51 |
+
|
52 |
+
```python
|
53 |
+
AssetDatabase.get_asset_duration('minecraft background cube')
|
54 |
+
```
|
55 |
+
|
56 |
+
### Get Asset Link
|
57 |
+
|
58 |
+
This method returns a source URL, or the path of the resource. If the asset is a YouTube video or audio, it uses `yt-dlp` to extract a download URL or a direct video/audio link.
|
59 |
+
|
60 |
+
```python
|
61 |
+
AssetDatabase.get_asset_link('minecraft background cube')
|
62 |
+
```
|
63 |
+
|
64 |
+
## Synchronizing Local Assets
|
65 |
+
|
66 |
+
The `sync_local_assets` method synchronizes the database with local assets found in the `/public` folder. If it doesn't find one, it doesn't do anything.
|
67 |
+
|
68 |
+
```python
|
69 |
+
AssetDatabase.sync_local_assets()
|
70 |
+
```
|
71 |
+
|
72 |
+
## Removing Assets
|
73 |
+
|
74 |
+
You can remove an asset from the database by providing its name to the `remove_asset` method.
|
75 |
+
|
76 |
+
```python
|
77 |
+
AssetDatabase.remove_asset('name')
|
78 |
+
```
|
79 |
+
|
80 |
+
## Getting Database State
|
81 |
+
|
82 |
+
You can get the state of the asset database as a pandas dataframe using the `get_df` method.
|
83 |
+
|
84 |
+
```python
|
85 |
+
AssetDatabase.get_df()
|
86 |
+
```
|
87 |
+
|
88 |
+
This method returns a dataframe that includes the name, type, link, source, and timestamp of each asset in the database.
|
docs/docs/content-translation-engine.mdx
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: ContentTranslationEngine
|
3 |
+
sidebar_label: ContentTranslationEngine
|
4 |
+
---
|
5 |
+
|
6 |
+
The `ContentTranslationEngine` in ShortGPT is a powerful tool that automates the process of translating video content. This guide will provide you with an overview of how to use the `ContentTranslationEngine`.
|
7 |
+
|
8 |
+
## Importing ContentTranslationEngine
|
9 |
+
|
10 |
+
```python
|
11 |
+
from shortGPT.engine.content_translation_engine import ContentTranslationEngine
|
12 |
+
```
|
13 |
+
|
14 |
+
## Initializing ContentTranslationEngine
|
15 |
+
|
16 |
+
The `ContentTranslationEngine` requires a `VoiceModule`, a source URL (either a local video file path or a YouTube link), a target language, and an optional flag indicating whether to use captions for translation.
|
17 |
+
|
18 |
+
```python
|
19 |
+
content_engine = ContentTranslationEngine(voice_module, src_url, target_language, use_captions=False)
|
20 |
+
```
|
21 |
+
|
22 |
+
## Example
|
23 |
+
|
24 |
+
```python
|
25 |
+
from shortGPT.config.api_db import ApiKeyManager, ApiProvider
|
26 |
+
from shortGPT.engine.content_translation_engine import ContentTranslationEngine
|
27 |
+
from shortGPT.config.languages import Language
|
28 |
+
from shortGPT.audio.edge_voice_module import EdgeTTSVoiceModule, EDGE_TTS_VOICENAME_MAPPING
|
29 |
+
|
30 |
+
# Set API Keys
|
31 |
+
ApiKeyManager.set_api_key(ApiProvider.OPENAI, "your_openai_key")
|
32 |
+
ApiKeyManager.set_api_key(ApiProvider.ELEVEN_LABS, "your_eleven_labs_key")
|
33 |
+
|
34 |
+
# Configure the Voice Module
|
35 |
+
voice_name = EDGE_TTS_VOICENAME_MAPPING[Language.SPANISH]['male']
|
36 |
+
voice_module = EdgeTTSVoiceModule(voice_name)
|
37 |
+
|
38 |
+
# Configure Content Engine
|
39 |
+
src_url = "https://www.youtube.com/watch?v=QQz5hj8y1TE"
|
40 |
+
target_language = Language.SPANISH
|
41 |
+
use_captions = False
|
42 |
+
content_engine = ContentTranslationEngine(voice_module, src_url, target_language, use_captions)
|
43 |
+
|
44 |
+
# Generate Content
|
45 |
+
for step_num, step_logs in content_engine.makeContent():
|
46 |
+
print(f" {step_logs}")
|
47 |
+
|
48 |
+
# Get Video Output Path
|
49 |
+
print(content_engine.get_video_output_path())
|
50 |
+
```
|
51 |
+
|
52 |
+
## How ContentTranslationEngine Works
|
53 |
+
|
54 |
+
The `ContentTranslationEngine` works by executing a series of steps defined in the `stepDict` dictionary. Each step is a method that performs a specific task in the video translation process. Here's what each step does:
|
55 |
+
|
56 |
+
1. `_transcribe_audio`: Transcribes the audio from the source video
|
57 |
+
2. `_translate_content`: Translates the transcribed content from the source language to the target language.
|
58 |
+
3. `_generate_translated_audio`: Generates translated audio using the translated content and the specified `VoiceModule`.
|
59 |
+
4. `_edit_and_render_video`: Edits and renders the translated video.
|
60 |
+
5. `_add_metadata`: Adds metadata to the translated video.
|
61 |
+
|
62 |
+
## Providing a Source URL
|
63 |
+
|
64 |
+
The `ContentTranslationEngine` requires a source URL, which can be either a local video file path or a YouTube link for a youtube Video, or a Youtube Shorts. The engine uses this source URL to retrieve the audio and video content for translation.
|
65 |
+
|
66 |
+
## Using Captions for Translation
|
67 |
+
|
68 |
+
Set the `use_captions` flag to `True` to see text captions on the video generated that are timed with the audio voice.
|
69 |
+
|
docs/docs/content-video-engine.mdx
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: ContentVideoEngine
|
3 |
+
sidebar_label: ContentVideoEngine
|
4 |
+
---
|
5 |
+
|
6 |
+
The `ContentVideoEngine` in ShortGPT is a powerful tool that encapsulates all the automation required to create a video. This guide will provide you with an overview of how to use the `ContentVideoEngine`.
|
7 |
+
|
8 |
+
## Importing ContentVideoEngine
|
9 |
+
|
10 |
+
```python
|
11 |
+
from shortGPT.engine.content_video_engine import ContentVideoEngine
|
12 |
+
```
|
13 |
+
|
14 |
+
## Initializing ContentVideoEngine
|
15 |
+
|
16 |
+
The `ContentVideoEngine` requires a `VoiceModule`, a script, and optionally a background music name, a watermark (string with the name of your channel / brand), a flag indicating whether the video you want is in vertical format, and a language.
|
17 |
+
|
18 |
+
```python
|
19 |
+
content_engine = ContentVideoEngine(voice_module, script, background_music_name="", watermark=None, isVerticalFormat=False, language=Language.ENGLISH)
|
20 |
+
```
|
21 |
+
## Example
|
22 |
+
|
23 |
+
```python
|
24 |
+
from shortGPT.config.api_db import ApiKeyManager, ApiProvider
|
25 |
+
from shortGPT.config.asset_db import AssetDatabase, AssetType
|
26 |
+
from shortGPT.engine.content_video_engine import ContentVideoEngine
|
27 |
+
from shortGPT.config.languages import Language
|
28 |
+
from shortGPT.audio.edge_voice_module import EdgeTTSVoiceModule, EDGE_TTS_VOICENAME_MAPPING
|
29 |
+
|
30 |
+
# Set API Keys
|
31 |
+
ApiKeyManager.set_api_key(ApiProvider.OPENAI, "your_openai_key")
|
32 |
+
ApiKeyManager.set_api_key(ApiProvider.PEXELS, "your_pexels_key")
|
33 |
+
|
34 |
+
# Add Assets
|
35 |
+
AssetDatabase.add_remote_asset('chill music', AssetType.BACKGROUND_MUSIC, "https://www.youtube.com/watch?v=uUu1NcSHg2E")
|
36 |
+
|
37 |
+
# Configure the Voice Module
|
38 |
+
voice_name = EDGE_TTS_VOICENAME_MAPPING[Language.SPANISH]['male']
|
39 |
+
voice_module = EdgeTTSVoiceModule(voice_name)
|
40 |
+
|
41 |
+
# Prepare the script
|
42 |
+
script = "La inteligencia artificial (IA) está revolucionando nuestro mundo de manera sorprendente. Los robots y asistentes virtuales nos ayudan en nuestras tareas diarias y simplifican nuestra vida. En la medicina, la IA permite diagnósticos más precisos y avances en tratamientos. En la industria automotriz, los vehículos autónomos están cambiando la forma en que nos desplazamos. Sin embargo, surgen interrogantes sobre el impacto en el empleo y la ética de su uso. A pesar de los desafíos, la IA promete un futuro emocionante y lleno de posibilidades. ¿Estamos preparados para abrazar este avance tecnológico?"
|
43 |
+
|
44 |
+
# Configure Content Engine
|
45 |
+
content_engine = ContentVideoEngine(voice_module, script, background_music_name='chill music', language=Language.SPANISH)
|
46 |
+
|
47 |
+
# Generate Content
|
48 |
+
for step_num, step_logs in content_engine.makeContent():
|
49 |
+
print(f" {step_logs}")
|
50 |
+
|
51 |
+
# Get Video Output Path
|
52 |
+
print(content_engine.get_video_output_path())
|
53 |
+
```
|
54 |
+
|
55 |
+
In this example, we first set the API keys for OpenAI, and Pexels. We then add a remote asset for background music. We configure the voice module to use EdgeTTS for voice synthesis. We prepare a script for the video and then configure the `ContentVideoEngine` with the voice module, script, and background music. We then generate the content and print the output path of the video.
|
56 |
+
## How ContentVideoEngine Works
|
57 |
+
|
58 |
+
The `ContentVideoEngine` works by executing a series of steps defined in the `stepDict` dictionary. Each step is a method that performs a specific task in the video creation process. Here's what each step does:
|
59 |
+
|
60 |
+
1. `_generateTempAudio`: Generates a temporary audio file from the provided script using the specified `VoiceModule`.
|
61 |
+
2. `_speedUpAudio`: Speeds up the generated audio file to match the pace of a typical video.
|
62 |
+
3. `_timeCaptions`: Generates timed captions for the video based on the script.
|
63 |
+
4. `_generateVideoSearchTerms`: Generates search terms to find relevant videos on Pexels based on the script.
|
64 |
+
5. `_generateVideoUrls`: Retrieves video URLs from Pexels using the generated search terms.
|
65 |
+
6. `_chooseBackgroundMusic`: Chooses background music for the video.
|
66 |
+
7. `_prepareBackgroundAssets`: Prepares the background assets for the video.
|
67 |
+
8. `_prepareCustomAssets`: Prepares any custom assets for the video.
|
68 |
+
9. `_editAndRenderShort`: Edits and renders the video.
|
69 |
+
10. `_addMetadata`: Adds metadata to the video.
|
70 |
+
|
71 |
+
## Using Pexels API
|
72 |
+
|
73 |
+
The `ContentVideoEngine` sources video assets from the Pexels API. To use it, you need to provide your Pexels API key. The engine uses this key to retrieve relevant videos based on the search terms generated from the script.
|
74 |
+
|
75 |
+
## Providing a Script
|
76 |
+
|
77 |
+
The `ContentVideoEngine` requires a script to generate the video. The script is used to generate the audio, captions, and search terms for sourcing videos from Pexels. The script should be a string containing the narration for the video.
|
docs/docs/facts-short-engine.mdx
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: FactsShortEngine
|
3 |
+
sidebar_label: FactsShortEngine
|
4 |
+
---
|
5 |
+
|
6 |
+
The `FactsShortEngine` in ShortGPT is a content engine specifically designed for generating short videos that present interesting facts. This guide will provide you with an overview of how to use the `FactsShortEngine`.
|
7 |
+
|
8 |
+
## Importing FactsShortEngine
|
9 |
+
|
10 |
+
```python
|
11 |
+
from shortGPT.engine.facts_short_engine import FactsShortEngine
|
12 |
+
```
|
13 |
+
|
14 |
+
## Initializing FactsShortEngine
|
15 |
+
|
16 |
+
The `FactsShortEngine` requires a `VoiceModule`, the type of facts you want to generate, a background video name, a background music name, the number of images to include in the video, a watermark (string with the name of your channel / brand), and a language.
|
17 |
+
|
18 |
+
```python
|
19 |
+
content_engine = FactsShortEngine(voice_module, facts_type, background_video_name, background_music_name, num_images=None, watermark=None, language=Language.ENGLISH)
|
20 |
+
```
|
21 |
+
|
22 |
+
## Example
|
23 |
+
|
24 |
+
```python
|
25 |
+
from shortGPT.config.api_db import ApiKeyManager, ApiProvider
|
26 |
+
from shortGPT.config.asset_db import AssetDatabase, AssetType
|
27 |
+
from shortGPT.engine.facts_short_engine import FactsShortEngine
|
28 |
+
from shortGPT.config.languages import Language
|
29 |
+
from shortGPT.audio.edge_voice_module import EdgeTTSVoiceModule, EDGE_TTS_VOICENAME_MAPPING
|
30 |
+
|
31 |
+
# Set API Keys
|
32 |
+
ApiKeyManager.set_api_key(ApiProvider.OPENAI, "your_openai_key")
|
33 |
+
|
34 |
+
# Add Assets
|
35 |
+
AssetDatabase.add_remote_asset("minecraft background cube", AssetType.BACKGROUND_VIDEO, "https://www.youtube.com/watch?v=Pt5_GSKIWQM")
|
36 |
+
AssetDatabase.add_remote_asset('chill music', AssetType.BACKGROUND_MUSIC, "https://www.youtube.com/watch?v=uUu1NcSHg2E")
|
37 |
+
|
38 |
+
# Configure the Voice Module
|
39 |
+
voice_name = EDGE_TTS_VOICENAME_MAPPING[Language.GERMAN]['male']
|
40 |
+
voice_module = EdgeTTSVoiceModule(voice_name)
|
41 |
+
|
42 |
+
# Configure Content Engine
|
43 |
+
facts_video_topic = "Interesting scientific facts from the 19th century"
|
44 |
+
content_engine = FactsShortEngine(voice_module=voice_module,
|
45 |
+
facts_type=facts_video_topic,
|
46 |
+
background_video_name="minecraft background cube", # <--- use the same name you saved in the AssetDatabase
|
47 |
+
background_music_name='chill music', # <--- use the same name you saved in the AssetDatabase
|
48 |
+
num_images=5, # If you don't want images in your video, put 0 or None
|
49 |
+
language=Language.GERMAN)
|
50 |
+
|
51 |
+
# Generate Content
|
52 |
+
for step_num, step_logs in content_engine.makeContent():
|
53 |
+
print(f" {step_logs}")
|
54 |
+
|
55 |
+
# Get Video Output Path
|
56 |
+
print(content_engine.get_video_output_path())
|
57 |
+
```
|
58 |
+
|
59 |
+
In this example, we first set the API keys for OpenAI. We then add remote assets for the background video and background music. We configure the voice module to use EdgeTTS for voice synthesis. We configure the `FactsShortEngine` with the voice module, facts type, background video name, background music name, number of images, and language. We then generate the content and print the output path of the video.
|
60 |
+
|
61 |
+
## How FactsShortEngine Works
|
62 |
+
|
63 |
+
The `FactsShortEngine` works by executing a series of steps defined in the `stepDict` dictionary. Each step is a method that performs a specific task in the video creation process. Here's what each step does:
|
64 |
+
|
65 |
+
1. `_generateScript`: Generates the script for the facts short using the provided `facts_type`.
|
66 |
+
2. `_generateTempAudio`: Generates a temporary audio file from the generated script using the specified `VoiceModule`.
|
67 |
+
3. `_speedUpAudio`: Speeds up the generated audio file to match the pace of a typical video.
|
68 |
+
4. `_timeCaptions`: Generates timed captions for the video based on the script.
|
69 |
+
5. `_generateImageSearchTerms`: Generates search terms to find relevant images using the Bing search engine based on the script.
|
70 |
+
6. `_generateImageUrls`: Retrieves image URLs from Bing using the generated search terms.
|
71 |
+
7. `_chooseBackgroundMusic`: Chooses background music for the video.
|
72 |
+
8. `_chooseBackgroundVideo`: Chooses a background video for the video.
|
73 |
+
9. `_prepareBackgroundAssets`: Prepares the background assets for the video.
|
74 |
+
10. `_prepareCustomAssets`: Prepares any custom assets for the video.
|
75 |
+
11. `_editAndRenderShort`: Edits and renders the video.
|
76 |
+
12. `_addYoutubeMetadata`: Adds metadata to the video.
|
77 |
+
|
78 |
+
|
79 |
+
## Providing a Facts Type
|
80 |
+
|
81 |
+
The `FactsShortEngine` requires a facts type to generate the script. The facts type should be a string indicating the specific category or topic of facts you want to include in the video.
|
82 |
+
|
83 |
+
|
84 |
+
That's it! You have now successfully generated a facts short video using the FactsShortEngine in the ShortGPT framework.
|
docs/docs/getting-started.mdx
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: ShortGPT Hello World Example
|
3 |
+
sidebar_label: ShortGPT Hello World Example
|
4 |
+
---
|
5 |
+
# ShortGPT Hello World Example
|
6 |
+
|
7 |
+
This guide provides a basic example of how to use the shortGPT framework. ShortGPT encapsulates the entire process of content automation into `content engines`. In this example, we'll show you how to instantiate the FactsShortEngine, which will automate the production of the "Interesting Facts" niche of Shorts.
|
8 |
+
|
9 |
+
## Prerequisites
|
10 |
+
|
11 |
+
Before you start, make sure you have [followed the installation steps](./how-to-install) and have your API keys ready.
|
12 |
+
|
13 |
+
## Code
|
14 |
+
|
15 |
+
```python
|
16 |
+
from shortGPT.config.api_db import ApiKeyManager, ApiProvider
|
17 |
+
from shortGPT.config.asset_db import AssetDatabase, AssetType
|
18 |
+
from shortGPT.engine.facts_short_engine import FactsShortEngine
|
19 |
+
from shortGPT.audio.eleven_voice_module import ElevenLabsVoiceModule
|
20 |
+
from shortGPT.config.languages import Language
|
21 |
+
from shortGPT.audio.edge_voice_module import EdgeTTSVoiceModule, EDGE_TTS_VOICENAME_MAPPING
|
22 |
+
|
23 |
+
# Set API Keys
|
24 |
+
ApiKeyManager.set_api_key(ApiProvider.OPENAI, "your_openai_key")
|
25 |
+
ApiKeyManager.set_api_key(ApiProvider.ELEVEN_LABS, "your_eleven_labs_key")
|
26 |
+
|
27 |
+
# Add Assets
|
28 |
+
AssetDatabase.add_remote_asset("minecraft background cube", AssetType.BACKGROUND_VIDEO, "https://www.youtube.com/watch?v=Pt5_GSKIWQM")
|
29 |
+
AssetDatabase.add_remote_asset('chill music', AssetType.BACKGROUND_MUSIC, "https://www.youtube.com/watch?v=uUu1NcSHg2E")
|
30 |
+
AssetDatabase.add_local_asset('my_music', AssetType.AUDIO, "./my_music.wav")
|
31 |
+
|
32 |
+
USE_ELEVEN_LABS = False
|
33 |
+
# Configure the ElevenLabs Voice Module
|
34 |
+
if USE_ELEVEN_LABS:
|
35 |
+
eleven_labs_key = ApiKeyManager.get_api_key(ApiProvider.ELEVEN_LABS)
|
36 |
+
voice_module = ElevenLabsVoiceModule(api_key = eleven_labs_key, voiceName="Antoni")
|
37 |
+
else:
|
38 |
+
## You can also use the EdgeTTS for Free voice synthesis
|
39 |
+
voice_name = EDGE_TTS_VOICENAME_MAPPING[Language.GERMAN]['male']
|
40 |
+
voice_module = EdgeTTSVoiceModule(voice_name)
|
41 |
+
|
42 |
+
# Configure Content Engine
|
43 |
+
facts_video_topic = "Interesting scientific facts from the 19th century"
|
44 |
+
content_engine = FactsShortEngine(voiceModule=voice_module,
|
45 |
+
facts_type=facts_video_topic,
|
46 |
+
background_video_name="minecraft background cube", # <--- use the same name you saved in the AssetDatabase
|
47 |
+
background_music_name='chill music', # <--- use the same name you saved in the AssetDatabase
|
48 |
+
num_images=5, # If you don't want images in your video, put 0 or None
|
49 |
+
language=Language.GERMAN)
|
50 |
+
|
51 |
+
# Generate Content
|
52 |
+
for step_num, step_logs in content_engine.makeContent():
|
53 |
+
print(f" {step_logs}")
|
54 |
+
|
55 |
+
# Get Video Output Path
|
56 |
+
print(content_engine.get_video_output_path())
|
57 |
+
```
|
58 |
+
|
59 |
+
That's it! You have now successfully generated your first content using the shortGPT framework.
|
docs/docs/how-to-install.mdx
ADDED
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: Step-by-Step Guide to Installing ShortGPT
|
3 |
+
sidebar_label: Installation Guide
|
4 |
+
---
|
5 |
+
import Tabs from '@theme/Tabs';
|
6 |
+
import TabItem from '@theme/TabItem';
|
7 |
+
|
8 |
+
# Launching Your ShortGPT Experience
|
9 |
+
|
10 |
+
This guide will walk you through the process of setting up your machine to run the **ShortGPT** library. The setup requires two key components, ImageMagick and FFmpeg. Follow the steps below to get these dependencies installed.
|
11 |
+
|
12 |
+
## Before You Begin
|
13 |
+
|
14 |
+
Make sure you have the following installed on your machine:
|
15 |
+
|
16 |
+
- Python 3.x
|
17 |
+
- Pip (Python package installer)
|
18 |
+
|
19 |
+
## Installation Process
|
20 |
+
|
21 |
+
Here are the steps to install ImageMagick, FFmpeg, and the ShortGPT library.
|
22 |
+
|
23 |
+
<Tabs groupId="operating-systems">
|
24 |
+
<TabItem value="win" label="Windows">
|
25 |
+
|
26 |
+
### Step 1: Install ImageMagick
|
27 |
+
|
28 |
+
ImageMagick is a crucial component for ShortGPT. Download the installer from the official ImageMagick website. Click on the link below to get started.
|
29 |
+
|
30 |
+
> **[👉 Download ImageMagick Here 👈](https://imagemagick.org/script/download.php)**
|
31 |
+
|
32 |
+
After downloading, follow the installation instructions provided on the website.
|
33 |
+
|
34 |
+
### Step 2: Install FFmpeg (Essential for ShortGPT)
|
35 |
+
|
36 |
+
FFmpeg is another key component for ShortGPT. Download the FFmpeg binaries from the link below:
|
37 |
+
|
38 |
+
> **[👉 Download FFmpeg Here (click on
|
39 |
+
FFmpeg_Full.msi ) 👈](https://github.com/icedterminal/ffmpeg-installer/releases/tag/6.0.0.20230306)**
|
40 |
+
|
41 |
+
The download will include ffmpeg and ffprobe and will add it to your path. Follow the installation instructions as guided.
|
42 |
+
<details open>
|
43 |
+
<summary><b>Step 3: Install ShortGPT Library</b></summary>
|
44 |
+
|
45 |
+
- Open a terminal or command prompt.
|
46 |
+
- Execute the following command:
|
47 |
+
|
48 |
+
```bash
|
49 |
+
pip install --upgrade shortgpt
|
50 |
+
```
|
51 |
+
|
52 |
+
</details>
|
53 |
+
|
54 |
+
</TabItem>
|
55 |
+
|
56 |
+
<TabItem value="mac" label="macOS">
|
57 |
+
|
58 |
+
### Step 1: Install ImageMagick
|
59 |
+
|
60 |
+
Run the command below in your command line:
|
61 |
+
|
62 |
+
```bash
|
63 |
+
brew install imagemagick
|
64 |
+
```
|
65 |
+
|
66 |
+
### Step 2: Install FFmpeg (Essential for ShortGPT)
|
67 |
+
|
68 |
+
Run the command below in your command line:
|
69 |
+
|
70 |
+
```bash
|
71 |
+
brew install ffmpeg
|
72 |
+
```
|
73 |
+
|
74 |
+
<details open>
|
75 |
+
<summary><b>Step 3: Install ShortGPT Library</b></summary>
|
76 |
+
|
77 |
+
- Open a terminal or command prompt.
|
78 |
+
- Execute the following command:
|
79 |
+
|
80 |
+
```bash
|
81 |
+
pip install --upgrade shortgpt
|
82 |
+
```
|
83 |
+
|
84 |
+
</details>
|
85 |
+
|
86 |
+
</TabItem>
|
87 |
+
|
88 |
+
<TabItem value="ubuntu" label="Ubuntu/Debian-based systems">
|
89 |
+
|
90 |
+
### Step 1: Install ImageMagick
|
91 |
+
|
92 |
+
Execute the following command:
|
93 |
+
|
94 |
+
```bash
|
95 |
+
sudo apt-get install imagemagick
|
96 |
+
```
|
97 |
+
|
98 |
+
### Step 2: Install FFmpeg
|
99 |
+
|
100 |
+
Execute the following command:
|
101 |
+
|
102 |
+
```bash
|
103 |
+
sudo apt-get install ffmpeg
|
104 |
+
```
|
105 |
+
|
106 |
+
<details open>
|
107 |
+
<summary><b>Step 3: Install ShortGPT Library</b></summary>
|
108 |
+
|
109 |
+
- Open a terminal or command prompt.
|
110 |
+
- Execute the following command:
|
111 |
+
|
112 |
+
```bash
|
113 |
+
pip install --upgrade shortgpt
|
114 |
+
```
|
115 |
+
|
116 |
+
</details>
|
117 |
+
|
118 |
+
</TabItem>
|
119 |
+
</Tabs>
|
120 |
+
|
121 |
+
And there you have it! Your machine is now ready to run ShortGPT. Dive into the world of automated video content creation with ShortGPT!
|
docs/docusaurus.config.js
ADDED
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
2 |
+
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
|
3 |
+
const lightCodeTheme = require('prism-react-renderer/themes/github');
|
4 |
+
|
5 |
+
// With JSDoc @type annotations, IDEs can provide config autocompletion
|
6 |
+
/** @type {import('@docusaurus/types').DocusaurusConfig} */
|
7 |
+
(
|
8 |
+
module.exports = {
|
9 |
+
title: 'ShortGPT',
|
10 |
+
tagline:
|
11 |
+
'Open-Source Framework for AI content automation',
|
12 |
+
url: 'https://dev.shortgpt.ai',
|
13 |
+
baseUrl: '/',
|
14 |
+
favicon: 'img/favicon.ico',
|
15 |
+
organizationName: 'RayVentura',
|
16 |
+
projectName: 'ShortGPT',
|
17 |
+
onBrokenLinks: 'throw',
|
18 |
+
onBrokenMarkdownLinks: 'throw',
|
19 |
+
presets: [
|
20 |
+
[
|
21 |
+
'@docusaurus/preset-classic',
|
22 |
+
/** @type {import('@docusaurus/preset-classic').Options} */
|
23 |
+
({
|
24 |
+
docs: {
|
25 |
+
path: 'docs',
|
26 |
+
sidebarPath: 'sidebars.js',
|
27 |
+
editUrl:
|
28 |
+
'https://github.com/RayVentura/ShortGPT/edit/stable/docs/',
|
29 |
+
versions: {
|
30 |
+
current: {
|
31 |
+
label: 'current',
|
32 |
+
},
|
33 |
+
},
|
34 |
+
lastVersion: 'current',
|
35 |
+
showLastUpdateAuthor: true,
|
36 |
+
showLastUpdateTime: true,
|
37 |
+
},
|
38 |
+
theme: {
|
39 |
+
customCss: require.resolve('./src/css/custom.css'),
|
40 |
+
},
|
41 |
+
}),
|
42 |
+
],
|
43 |
+
],
|
44 |
+
plugins: ['tailwind-loader'],
|
45 |
+
themeConfig:
|
46 |
+
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
47 |
+
({
|
48 |
+
|
49 |
+
navbar: {
|
50 |
+
hideOnScroll: true,
|
51 |
+
logo: {
|
52 |
+
alt: 'ShortGPT',
|
53 |
+
src: 'img/logo.png',
|
54 |
+
},
|
55 |
+
items: [
|
56 |
+
// left
|
57 |
+
{
|
58 |
+
label: 'Docs',
|
59 |
+
to: 'docs/how-to-install',
|
60 |
+
position: 'right',
|
61 |
+
},
|
62 |
+
// right
|
63 |
+
{
|
64 |
+
type: 'docsVersionDropdown',
|
65 |
+
position: 'right',
|
66 |
+
},
|
67 |
+
{
|
68 |
+
href: 'https://github.com/RayVentura/ShortGPT',
|
69 |
+
position: 'right',
|
70 |
+
className: 'header-github-link',
|
71 |
+
},
|
72 |
+
],
|
73 |
+
},
|
74 |
+
colorMode: {
|
75 |
+
defaultMode: 'light',
|
76 |
+
disableSwitch: false,
|
77 |
+
respectPrefersColorScheme: true,
|
78 |
+
},
|
79 |
+
announcementBar: {
|
80 |
+
content:
|
81 |
+
'⭐️ If you like ShortGPT, give it a star on <a target="_blank" rel="noopener noreferrer" href="https://github.com/rayventura/shortgpt">GitHub</a>! ⭐️',
|
82 |
+
},
|
83 |
+
footer: {
|
84 |
+
links: [
|
85 |
+
{
|
86 |
+
title: 'Docs',
|
87 |
+
items: [
|
88 |
+
{
|
89 |
+
label: 'Getting Started',
|
90 |
+
to: 'docs/how-to-install',
|
91 |
+
},
|
92 |
+
|
93 |
+
],
|
94 |
+
},
|
95 |
+
{
|
96 |
+
title: 'ShortGPT',
|
97 |
+
items: [
|
98 |
+
{
|
99 |
+
label: 'Issues',
|
100 |
+
to: 'https://github.com/RayVentura/ShortGPT/issues',
|
101 |
+
},
|
102 |
+
],
|
103 |
+
},
|
104 |
+
{
|
105 |
+
title: 'Community',
|
106 |
+
items: [
|
107 |
+
{
|
108 |
+
label: 'Discord',
|
109 |
+
to: 'https://discord.com/invite/bRTacwYrfX',
|
110 |
+
},
|
111 |
+
],
|
112 |
+
},
|
113 |
+
{
|
114 |
+
title: 'Social',
|
115 |
+
items: [
|
116 |
+
{
|
117 |
+
label: 'GitHub',
|
118 |
+
to: 'https://github.com/RayVentura/ShortGPT',
|
119 |
+
},
|
120 |
+
{
|
121 |
+
label: 'Twitter',
|
122 |
+
to: 'https://twitter.com/RayVenturaHQ',
|
123 |
+
},
|
124 |
+
],
|
125 |
+
},
|
126 |
+
],
|
127 |
+
copyright: `ShortGPT ${new Date().getFullYear()}`,
|
128 |
+
},
|
129 |
+
prism: {
|
130 |
+
theme: lightCodeTheme,
|
131 |
+
darkTheme: darkCodeTheme,
|
132 |
+
},
|
133 |
+
}),
|
134 |
+
}
|
135 |
+
);
|
docs/package.json
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "shortgpt-documentation",
|
3 |
+
"version": "3.5.1",
|
4 |
+
"private": true,
|
5 |
+
"scripts": {
|
6 |
+
"build:clean": "rm -rf dist build .docusaurus node_modules",
|
7 |
+
"docusaurus": "docusaurus",
|
8 |
+
"start": "docusaurus start",
|
9 |
+
"build": "docusaurus build",
|
10 |
+
"swizzle": "docusaurus swizzle",
|
11 |
+
"deploy": "docusaurus deploy",
|
12 |
+
"clear": "docusaurus clear",
|
13 |
+
"serve": "docusaurus serve",
|
14 |
+
"write-translations": "docusaurus write-translations",
|
15 |
+
"write-heading-ids": "docusaurus write-heading-ids"
|
16 |
+
},
|
17 |
+
"dependencies": {
|
18 |
+
"@algolia/ui-library": "9.10.2",
|
19 |
+
"@docsearch/react": "3.5.1",
|
20 |
+
"@docusaurus/core": "2.4.1",
|
21 |
+
"@docusaurus/preset-classic": "2.4.1",
|
22 |
+
"@mdx-js/react": "^1.6.22",
|
23 |
+
"clsx": "^1.1.1",
|
24 |
+
"file-loader": "6.2.0",
|
25 |
+
"my-loaders": "file:plugins/my-loaders",
|
26 |
+
"postcss": "8.4.25",
|
27 |
+
"postcss-import": "15.0.0",
|
28 |
+
"postcss-preset-env": "7.8.2",
|
29 |
+
"prism-react-renderer": "1.2.1",
|
30 |
+
"react": "^18.2.0",
|
31 |
+
"react-dom": "^18.2.0",
|
32 |
+
"tailwind-loader": "file:plugins/tailwind-loader",
|
33 |
+
"url-loader": "4.1.1"
|
34 |
+
},
|
35 |
+
"devDependencies": {
|
36 |
+
"postcss-loader": "6.2.1",
|
37 |
+
"tailwindcss": "npm:@tailwindcss/postcss7-compat"
|
38 |
+
},
|
39 |
+
"browserslist": {
|
40 |
+
"production": [
|
41 |
+
">0.5%",
|
42 |
+
"not dead",
|
43 |
+
"not op_mini all"
|
44 |
+
],
|
45 |
+
"development": [
|
46 |
+
"last 1 chrome version",
|
47 |
+
"last 1 firefox version",
|
48 |
+
"last 1 safari version"
|
49 |
+
]
|
50 |
+
}
|
51 |
+
}
|
docs/plugins/my-loaders/index.js
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
module.exports = function () {
|
2 |
+
return {
|
3 |
+
name: 'loaders',
|
4 |
+
configureWebpack() {
|
5 |
+
return {
|
6 |
+
module: {
|
7 |
+
rules: [
|
8 |
+
{
|
9 |
+
test: /\.(gif|png|jpe?g|svg)$/i,
|
10 |
+
exclude: /\.(mdx?)$/i,
|
11 |
+
use: ['file-loader', { loader: 'image-webpack-loader' }],
|
12 |
+
},
|
13 |
+
],
|
14 |
+
},
|
15 |
+
};
|
16 |
+
},
|
17 |
+
};
|
18 |
+
};
|
docs/plugins/tailwind-loader/index.js
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
2 |
+
module.exports = function () {
|
3 |
+
return {
|
4 |
+
name: 'postcss-tailwindcss-loader',
|
5 |
+
configurePostCss(postcssOptions) {
|
6 |
+
postcssOptions.plugins.push(
|
7 |
+
require('postcss-import'),
|
8 |
+
require('tailwindcss'),
|
9 |
+
require('postcss-preset-env')({
|
10 |
+
autoprefixer: {
|
11 |
+
flexbox: 'no-2009',
|
12 |
+
},
|
13 |
+
stage: 4,
|
14 |
+
})
|
15 |
+
);
|
16 |
+
return postcssOptions;
|
17 |
+
},
|
18 |
+
};
|
19 |
+
};
|
docs/sidebars.js
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Creating a sidebar enables you to:
|
3 |
+
* - create an ordered group of docs
|
4 |
+
* - render a sidebar for each doc of that group
|
5 |
+
* - provide next/previous navigation.
|
6 |
+
*
|
7 |
+
* The sidebars can be generated from the filesystem, or explicitly defined here.
|
8 |
+
*
|
9 |
+
* Create as many sidebars as you want.
|
10 |
+
*/
|
11 |
+
|
12 |
+
module.exports = {
|
13 |
+
docs: [
|
14 |
+
{
|
15 |
+
type: 'category',
|
16 |
+
label: 'Introduction',
|
17 |
+
collapsed: false,
|
18 |
+
items: ['how-to-install', 'getting-started'],
|
19 |
+
},
|
20 |
+
{
|
21 |
+
type: 'category',
|
22 |
+
label: 'Content Engines',
|
23 |
+
collapsed: false,
|
24 |
+
items: ['content-video-engine', 'content-translation-engine', 'facts-short-engine'],
|
25 |
+
},
|
26 |
+
{
|
27 |
+
type: 'category',
|
28 |
+
label: 'API Key and Asset',
|
29 |
+
collapsed: false,
|
30 |
+
items: ['api-key-manager', 'asset-database'],
|
31 |
+
},
|
32 |
+
],
|
33 |
+
};
|
docs/src/components/Home.js
ADDED
@@ -0,0 +1,356 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Hero } from '@algolia/ui-library';
|
2 |
+
import { useColorMode } from '@docusaurus/theme-common';
|
3 |
+
import { useBaseUrlUtils } from '@docusaurus/useBaseUrl';
|
4 |
+
import React from 'react';
|
5 |
+
import { Link } from 'react-router-dom';
|
6 |
+
|
7 |
+
function Home() {
|
8 |
+
const { withBaseUrl } = useBaseUrlUtils();
|
9 |
+
const { colorMode } = useColorMode();
|
10 |
+
|
11 |
+
React.useEffect(() => {
|
12 |
+
if (colorMode === 'dark') {
|
13 |
+
document.querySelector('html').classList.add('dark');
|
14 |
+
} else {
|
15 |
+
document.querySelector('html').classList.remove('dark');
|
16 |
+
}
|
17 |
+
}, [colorMode]);
|
18 |
+
|
19 |
+
function Header() {
|
20 |
+
return (
|
21 |
+
<Hero
|
22 |
+
id="hero"
|
23 |
+
title={
|
24 |
+
<>
|
25 |
+
|
26 |
+
<span className="hero-title text-4xl leading-10 font-extrabold text-blue-600 md:text-4xl lg:text-4xl md:leading-11 max-w-xs inline-block">
|
27 |
+
🚀🎬 SHORTGPT
|
28 |
+
</span>
|
29 |
+
<span className="hero-title text-3xl leading-9 font-extrabold md:text-3xl lg:text-3xl md:leading-10 max-w-xxs inline-block">
|
30 |
+
Opensource AI Content Automation Framework
|
31 |
+
</span>
|
32 |
+
</>
|
33 |
+
}
|
34 |
+
background="cubes"
|
35 |
+
cta={[
|
36 |
+
<Link
|
37 |
+
key="get-started"
|
38 |
+
to="/docs/how-to-install"
|
39 |
+
className="inline-flex items-center justify-center px-6 py-3 border border-transparent text-base font-semibold rounded-full text-white bg-gradient-to-r from-purple-500 to-indigo-500 hover:from-purple-600 hover:to-indigo-600 hover:no-underline"
|
40 |
+
>
|
41 |
+
Get started
|
42 |
+
</Link>
|
43 |
+
]}
|
44 |
+
/>
|
45 |
+
);
|
46 |
+
}
|
47 |
+
|
48 |
+
function Description() {
|
49 |
+
return (
|
50 |
+
<>
|
51 |
+
{/* Description */}
|
52 |
+
<div className="py-8 overflow-hidden">
|
53 |
+
<div className="relative max-w-xl mx-auto px-4 md:px-6 lg:px-8 lg:max-w-screen-xl">
|
54 |
+
<div className="relative">
|
55 |
+
<h3 className="text-center text-3xl leading-8 font-extrabold tracking-tight md:text-4xl md:leading-10">
|
56 |
+
Automating video and short content creation with AI
|
57 |
+
</h3>
|
58 |
+
<p className="mt-4 max-w-3xl mx-auto text-center text-xl leading-7 text-description">
|
59 |
+
ShortGPT is a powerful framework for automating content creation. It simplifies video creation, footage sourcing, voiceover synthesis, and editing tasks.
|
60 |
+
</p>
|
61 |
+
</div>
|
62 |
+
|
63 |
+
<div className="pt-16">
|
64 |
+
<ul className="lg:grid lg:grid-cols-3 lg:col-gap-8 lg:row-gap-10">
|
65 |
+
<li>
|
66 |
+
<div className="flex">
|
67 |
+
<div className="flex-shrink-0">
|
68 |
+
<div className="flex items-center justify-center h-12 w-12 rounded-md bg-indigo-500 text-white">
|
69 |
+
<svg
|
70 |
+
viewBox="0 0 20 20"
|
71 |
+
fill="currentColor"
|
72 |
+
className="search w-6 h-6"
|
73 |
+
>
|
74 |
+
<path
|
75 |
+
fillRule="evenodd"
|
76 |
+
d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z"
|
77 |
+
clipRule="evenodd"
|
78 |
+
></path>
|
79 |
+
</svg>
|
80 |
+
</div>
|
81 |
+
</div>
|
82 |
+
<div className="ml-4">
|
83 |
+
<h4 className="text-lg leading-6 font-medium">
|
84 |
+
Automated editing framework
|
85 |
+
</h4>
|
86 |
+
<p className="mt-2 text-base leading-6 text-description">
|
87 |
+
ShortGPT streamlines the video creation process with an LLM oriented video editing language, making it easier to automate editing tasks.
|
88 |
+
</p>
|
89 |
+
</div>
|
90 |
+
</div>
|
91 |
+
</li>
|
92 |
+
<li className="mt-10 lg:mt-0">
|
93 |
+
<div className="flex">
|
94 |
+
<div className="flex-shrink-0">
|
95 |
+
<div className="flex items-center justify-center h-12 w-12 rounded-md bg-indigo-500 text-white">
|
96 |
+
<svg
|
97 |
+
fill="none"
|
98 |
+
viewBox="0 0 24 24"
|
99 |
+
stroke="currentColor"
|
100 |
+
className="user-group w-6 h-6"
|
101 |
+
>
|
102 |
+
<path
|
103 |
+
strokeLinecap="round"
|
104 |
+
strokeLinejoin="round"
|
105 |
+
strokeWidth="2"
|
106 |
+
d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"
|
107 |
+
></path>
|
108 |
+
</svg>
|
109 |
+
</div>
|
110 |
+
</div>
|
111 |
+
<div className="ml-4">
|
112 |
+
<h4 className="text-lg leading-6 font-medium">
|
113 |
+
Voiceover / Content Creation
|
114 |
+
</h4>
|
115 |
+
<p className="mt-2 text-base leading-6 text-description">
|
116 |
+
ShortGPT supports multiple languages for voiceover synthesis, making it easy to create content in various languages.
|
117 |
+
</p>
|
118 |
+
</div>
|
119 |
+
</div>
|
120 |
+
</li>
|
121 |
+
<li className="mt-10 lg:mt-0">
|
122 |
+
<div className="flex">
|
123 |
+
<div className="flex-shrink-0">
|
124 |
+
<div className="flex items-center justify-center h-12 w-12 rounded-md bg-indigo-500 text-white">
|
125 |
+
<svg
|
126 |
+
fill="none"
|
127 |
+
viewBox="0 0 24 24"
|
128 |
+
stroke="currentColor"
|
129 |
+
className="device-mobile w-6 h-6"
|
130 |
+
>
|
131 |
+
<path
|
132 |
+
strokeLinecap="round"
|
133 |
+
strokeLinejoin="round"
|
134 |
+
strokeWidth="2"
|
135 |
+
d="M12 18h.01M8 21h8a2 2 0 002-2V5a2 2 0 00-2-2H8a2 2 0 00-2 2v14a2 2 0 002 2z"
|
136 |
+
></path>
|
137 |
+
</svg>
|
138 |
+
</div>
|
139 |
+
</div>
|
140 |
+
<div className="ml-4">
|
141 |
+
<h4 className="text-lg leading-6 font-medium">
|
142 |
+
Asset Sourcing
|
143 |
+
</h4>
|
144 |
+
<p className="mt-2 text-base leading-6 text-description">
|
145 |
+
ShortGPT can source images and video footage from the internet, allowing you to easily find and use relevant visuals.
|
146 |
+
</p>
|
147 |
+
</div>
|
148 |
+
</div>
|
149 |
+
</li>
|
150 |
+
</ul>
|
151 |
+
</div>
|
152 |
+
</div>
|
153 |
+
</div>
|
154 |
+
|
155 |
+
{/* How it works */}
|
156 |
+
<div className="diagonal-box py-16 bg-gray-200 overflow-hidden">
|
157 |
+
<div className="diagonal-content max-w-xl mx-auto px-4 md:px-6 lg:px-8 lg:max-w-screen-xl">
|
158 |
+
<div className="max-w-screen-xl mx-auto pt-6 px-4 md:px-6 lg:px-8">
|
159 |
+
<div className="max-w-4xl mx-auto text-center">
|
160 |
+
<h2 className="text-3xl leading-9 font-extrabold text-gray-900 md:text-4xl md:leading-10">
|
161 |
+
How it works
|
162 |
+
</h2>
|
163 |
+
<p className="mt-4 max-w-2xl text-xl leading-7 text-gray-500 lg:mx-auto">
|
164 |
+
ShortGPT is an AI-powered framework that automates the process of content creation, from script generation to asset sourcing and video editing.
|
165 |
+
</p>
|
166 |
+
</div>
|
167 |
+
</div>
|
168 |
+
|
169 |
+
<div className="py-16">
|
170 |
+
<div className="max-w-xl mx-auto px-4 md:px-6 lg:max-w-screen-lg lg:px-8 ">
|
171 |
+
<div className="lg:grid lg:grid-cols-3 lg:gap-8">
|
172 |
+
<div>
|
173 |
+
<div className="flex items-center justify-center">
|
174 |
+
<img
|
175 |
+
className="h-200"
|
176 |
+
src={withBaseUrl('img/assets/scraping.svg')}
|
177 |
+
width="190px"
|
178 |
+
height="220px"
|
179 |
+
/>
|
180 |
+
</div>
|
181 |
+
<div className="mt-10 lg:mt-0 p-4">
|
182 |
+
<h5 className="text-lg leading-6 font-medium text-gray-900">
|
183 |
+
Automated Editing Framework
|
184 |
+
</h5>
|
185 |
+
<p className="mt-2 text-base leading-6 text-gray-600">
|
186 |
+
ShortGPT employs a heavy usage of LLMs and automated video editing libraries to streamline the video creation process (Ffmpeg, moviepy, ffprobe).
|
187 |
+
</p>
|
188 |
+
</div>
|
189 |
+
</div>
|
190 |
+
<div className="mt-10 lg:mt-0 p-4">
|
191 |
+
<div className="h-200 flex items-center justify-center">
|
192 |
+
<img
|
193 |
+
src={withBaseUrl('img/assets/configuration.svg')}
|
194 |
+
width="140px"
|
195 |
+
height="220px"
|
196 |
+
alt="Configuration of your crawler"
|
197 |
+
/>
|
198 |
+
</div>
|
199 |
+
<div>
|
200 |
+
<h5 className="text-lg leading-6 font-medium text-gray-900">
|
201 |
+
Voiceover / Content Creation
|
202 |
+
</h5>
|
203 |
+
<p className="mt-2 text-base leading-6 text-gray-600">
|
204 |
+
ShortGPT integrates multiple neural voice synthesis engines (ElevenLabs, EdgeTTS), to allow human-like voice quality in the audio generated.
|
205 |
+
</p>
|
206 |
+
</div>
|
207 |
+
</div>
|
208 |
+
<div className="mt-10 lg:mt-0 p-4">
|
209 |
+
<div className="h-200 flex items-center justify-center">
|
210 |
+
<img
|
211 |
+
src={withBaseUrl('img/assets/implementation.svg')}
|
212 |
+
width="220px"
|
213 |
+
height="220px"
|
214 |
+
alt="Implementation on your website"
|
215 |
+
/>
|
216 |
+
</div>
|
217 |
+
<div>
|
218 |
+
<h5 className="text-lg leading-6 font-medium text-gray-900">
|
219 |
+
Asset Sourcing
|
220 |
+
</h5>
|
221 |
+
<p className="mt-2 text-base leading-6 text-gray-600">
|
222 |
+
ShortGPT is equipped with an advanced asset sourcing module that can retrieve images and video footage from the internet. This feature allows for the easy incorporation of relevant visuals into the content (Pexels, youtube, and more soon).
|
223 |
+
</p>
|
224 |
+
</div>
|
225 |
+
</div>
|
226 |
+
</div>
|
227 |
+
</div>
|
228 |
+
</div>
|
229 |
+
</div>
|
230 |
+
</div>
|
231 |
+
|
232 |
+
|
233 |
+
|
234 |
+
{/* Powered by AI */}
|
235 |
+
<div className="py-16 bg-indigo-600 overflow-hidden lg:py-24">
|
236 |
+
<div className="text-center">
|
237 |
+
<h3 className="mt-2 text-3xl leading-8 font-extrabold text-white tracking-tight md:text-4xl md:leading-10">
|
238 |
+
Powered by AI
|
239 |
+
</h3>
|
240 |
+
</div>
|
241 |
+
<div className="relative max-w-xl mx-auto px-4 md:px-6 lg:px-8 lg:max-w-screen-xl">
|
242 |
+
<div className="relative lg:grid lg:grid-cols-2 lg:gap-8 lg:items-center">
|
243 |
+
<div className="relative">
|
244 |
+
<ul className="mt-10">
|
245 |
+
<li className="mt-10">
|
246 |
+
<div className="flex">
|
247 |
+
<div className="flex-shrink-0">
|
248 |
+
<div className="flex items-center justify-center h-12 w-12 rounded-md bg-white text-indigo-500">
|
249 |
+
<svg
|
250 |
+
fill="none"
|
251 |
+
viewBox="0 0 24 24"
|
252 |
+
stroke="currentColor"
|
253 |
+
className="chip w-6 h-6"
|
254 |
+
>
|
255 |
+
<path
|
256 |
+
strokeLinecap="round"
|
257 |
+
strokeLinejoin="round"
|
258 |
+
strokeWidth="2"
|
259 |
+
d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"
|
260 |
+
></path>
|
261 |
+
</svg>
|
262 |
+
</div>
|
263 |
+
</div>
|
264 |
+
<div className="ml-4">
|
265 |
+
<h5 className="text-lg leading-6 font-medium text-white">
|
266 |
+
Automated Editing
|
267 |
+
</h5>
|
268 |
+
<p className="mt-2 text-base leading-6 text-gray-300">
|
269 |
+
ShortGPT automates the video editing process, making it faster and more efficient with the help of AI.
|
270 |
+
</p>
|
271 |
+
</div>
|
272 |
+
</div>
|
273 |
+
</li>
|
274 |
+
<li className="mt-10">
|
275 |
+
<div className="flex">
|
276 |
+
<div className="flex-shrink-0">
|
277 |
+
<div className="flex items-center justify-center h-12 w-12 rounded-md bg-white text-indigo-500">
|
278 |
+
<svg
|
279 |
+
fill="none"
|
280 |
+
viewBox="0 0 24 24"
|
281 |
+
stroke="currentColor"
|
282 |
+
className="chat w-6 h-6"
|
283 |
+
>
|
284 |
+
<path
|
285 |
+
strokeLinecap="round"
|
286 |
+
strokeLinejoin="round"
|
287 |
+
strokeWidth="2"
|
288 |
+
d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"
|
289 |
+
></path>
|
290 |
+
</svg>
|
291 |
+
</div>
|
292 |
+
</div>
|
293 |
+
<div className="ml-4">
|
294 |
+
<h5 className="text-lg leading-6 font-medium text-white">
|
295 |
+
Voiceover / Content Creation
|
296 |
+
</h5>
|
297 |
+
<p className="mt-2 text-base leading-6 text-gray-300">
|
298 |
+
ShortGPT supports multiple languages for voiceover synthesis, making it easy to create content in various languages.
|
299 |
+
</p>
|
300 |
+
</div>
|
301 |
+
</div>
|
302 |
+
</li>
|
303 |
+
</ul>
|
304 |
+
</div>
|
305 |
+
|
306 |
+
<div className="relative">
|
307 |
+
<ul className="mt-10">
|
308 |
+
<li className="mt-10">
|
309 |
+
<div className="flex">
|
310 |
+
<div className="flex-shrink-0">
|
311 |
+
<div className="flex items-center justify-center h-12 w-12 rounded-md bg-white text-indigo-500">
|
312 |
+
<svg
|
313 |
+
fill="none"
|
314 |
+
viewBox="0 0 24 24"
|
315 |
+
stroke="currentColor"
|
316 |
+
className="backspace w-6 h-6"
|
317 |
+
>
|
318 |
+
<path
|
319 |
+
strokeLinecap="round"
|
320 |
+
strokeLinejoin="round"
|
321 |
+
strokeWidth="2"
|
322 |
+
d="M12 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2M3 12l6.414 6.414a2 2 0 001.414.586H19a2 2 0 002-2V7a2 2 0 00-2-2h-8.172a2 2 0 00-1.414.586L3 12z"
|
323 |
+
></path>
|
324 |
+
</svg>
|
325 |
+
</div>
|
326 |
+
</div>
|
327 |
+
<div className="ml-4">
|
328 |
+
<h5 className="text-lg leading-6 font-medium text-white">
|
329 |
+
Asset Sourcing
|
330 |
+
</h5>
|
331 |
+
<p className="mt-2 text-base leading-6 text-gray-300">
|
332 |
+
ShortGPT can source images and video footage from the internet, allowing you to easily find and use relevant visuals.
|
333 |
+
</p>
|
334 |
+
</div>
|
335 |
+
</div>
|
336 |
+
</li>
|
337 |
+
</ul>
|
338 |
+
</div>
|
339 |
+
</div>
|
340 |
+
</div>
|
341 |
+
</div>
|
342 |
+
</>
|
343 |
+
)
|
344 |
+
}
|
345 |
+
|
346 |
+
|
347 |
+
|
348 |
+
return (
|
349 |
+
<div id="tailwind">
|
350 |
+
<Header />
|
351 |
+
<Description />
|
352 |
+
</div>
|
353 |
+
);
|
354 |
+
}
|
355 |
+
|
356 |
+
export default Home;
|
docs/src/css/custom.css
ADDED
@@ -0,0 +1,198 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@import url(fragments.css);
|
2 |
+
@import 'tailwindcss/tailwind.css';
|
3 |
+
|
4 |
+
:root {
|
5 |
+
--ifm-font-size-base: 16px;
|
6 |
+
--ifm-code-font-size: 90%;
|
7 |
+
--ifm-background-color: var(--white);
|
8 |
+
--ifm-color-primary: var(--nebula-500);
|
9 |
+
--ifm-footer-background-color: var(--grey-100);
|
10 |
+
--ifm-menu-color-background-active: var(--ifm-color-emphasis-200);
|
11 |
+
}
|
12 |
+
|
13 |
+
html[data-theme='dark'] {
|
14 |
+
--ifm-font-base-color: #dee0f2;
|
15 |
+
--ifm-navbar-link-hover-color: #8b9dff;
|
16 |
+
--ifm-link-color: #8b9dff;
|
17 |
+
--ifm-menu-color-active: #8b9dff;
|
18 |
+
--ifm-background-color: #0a141c;
|
19 |
+
--ifm-footer-background-color: #0a141c;
|
20 |
+
--ifm-navbar-background-color: #21243d;
|
21 |
+
--ifm-menu-color-background-active: #21243d;
|
22 |
+
}
|
23 |
+
|
24 |
+
.docusaurus-highlight-code-line {
|
25 |
+
background-color: rgba(0, 0, 0, 0.1);
|
26 |
+
display: block;
|
27 |
+
margin: 0 calc(-1 * var(--ifm-pre-padding));
|
28 |
+
padding: 0 var(--ifm-pre-padding);
|
29 |
+
}
|
30 |
+
|
31 |
+
html[data-theme='dark'] .docusaurus-highlight-code-line {
|
32 |
+
background-color: rgba(0, 0, 0, 0.3);
|
33 |
+
}
|
34 |
+
|
35 |
+
.diagonal-box {
|
36 |
+
transform: skewY(-6deg);
|
37 |
+
}
|
38 |
+
|
39 |
+
.diagonal-content {
|
40 |
+
transform: skewY(6deg);
|
41 |
+
}
|
42 |
+
|
43 |
+
[class^='announcementBar'] {
|
44 |
+
z-index: 10;
|
45 |
+
}
|
46 |
+
|
47 |
+
.showcase {
|
48 |
+
background-color: #fff;
|
49 |
+
}
|
50 |
+
|
51 |
+
html[data-theme='dark'] .showcase {
|
52 |
+
background-color: #21243d;
|
53 |
+
}
|
54 |
+
|
55 |
+
.showcase-border {
|
56 |
+
border-color: rgba(243, 244, 246, 1);
|
57 |
+
}
|
58 |
+
|
59 |
+
html[data-theme='dark'] .showcase-border {
|
60 |
+
border-color: rgba(55, 65, 81, 1);
|
61 |
+
}
|
62 |
+
|
63 |
+
.text-description {
|
64 |
+
color: rgba(107, 114, 128, 1);
|
65 |
+
}
|
66 |
+
|
67 |
+
html[data-theme='dark'] .text-description {
|
68 |
+
color: rgba(209, 213, 219, 1);
|
69 |
+
}
|
70 |
+
|
71 |
+
/* apply */
|
72 |
+
#hero-apply {
|
73 |
+
z-index: -1;
|
74 |
+
background-image: linear-gradient(
|
75 |
+
var(--ifm-footer-background-color),
|
76 |
+
var(--ifm-navbar-background-color)
|
77 |
+
);
|
78 |
+
}
|
79 |
+
|
80 |
+
html[data-theme='dark'] #hero-apply {
|
81 |
+
background-image: linear-gradient(
|
82 |
+
var(--ifm-navbar-background-color),
|
83 |
+
var(--ifm-background-color)
|
84 |
+
);
|
85 |
+
}
|
86 |
+
|
87 |
+
html[data-theme='dark'] #hero-apply > div:first-child {
|
88 |
+
opacity: 0.4;
|
89 |
+
}
|
90 |
+
|
91 |
+
.apply-form {
|
92 |
+
background-image: linear-gradient(#fff, #f5f5fa);
|
93 |
+
max-width: 600px;
|
94 |
+
}
|
95 |
+
|
96 |
+
html[data-theme='dark'] .apply-form {
|
97 |
+
background-image: radial-gradient(
|
98 |
+
circle at 50% 0px,
|
99 |
+
rgb(72, 76, 122),
|
100 |
+
rgb(35, 38, 59)
|
101 |
+
);
|
102 |
+
}
|
103 |
+
|
104 |
+
.apply-text {
|
105 |
+
color: #36395a;
|
106 |
+
}
|
107 |
+
|
108 |
+
html[data-theme='dark'] .apply-text {
|
109 |
+
color: #fff;
|
110 |
+
}
|
111 |
+
|
112 |
+
/* index */
|
113 |
+
#hero {
|
114 |
+
background-image: linear-gradient(
|
115 |
+
var(--ifm-footer-background-color),
|
116 |
+
var(--ifm-navbar-background-color)
|
117 |
+
);
|
118 |
+
}
|
119 |
+
|
120 |
+
html[data-theme='dark'] #hero {
|
121 |
+
background-image: linear-gradient(
|
122 |
+
var(--ifm-navbar-background-color),
|
123 |
+
var(--ifm-background-color)
|
124 |
+
);
|
125 |
+
}
|
126 |
+
|
127 |
+
html[data-theme='dark'] #hero > div:first-child {
|
128 |
+
opacity: 0.4;
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Hero component title overrides to match other heading styles
|
133 |
+
*/
|
134 |
+
.hero-title {
|
135 |
+
color: rgb(28, 30, 33);
|
136 |
+
font-family: var(--ifm-heading-font-family);
|
137 |
+
}
|
138 |
+
|
139 |
+
html[data-theme='dark'] .hero-title {
|
140 |
+
color: rgb(227, 227, 227);
|
141 |
+
}
|
142 |
+
|
143 |
+
|
144 |
+
.apply-button:hover {
|
145 |
+
color: #000000;
|
146 |
+
}
|
147 |
+
|
148 |
+
/* GitHub */
|
149 |
+
.header-github-link:hover {
|
150 |
+
opacity: 0.6;
|
151 |
+
}
|
152 |
+
|
153 |
+
.header-github-link:before {
|
154 |
+
content: '';
|
155 |
+
width: 24px;
|
156 |
+
height: 24px;
|
157 |
+
display: flex;
|
158 |
+
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")
|
159 |
+
no-repeat;
|
160 |
+
}
|
161 |
+
|
162 |
+
html[data-theme='dark'] .header-github-link:before {
|
163 |
+
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")
|
164 |
+
no-repeat;
|
165 |
+
}
|
166 |
+
|
167 |
+
/* Images */
|
168 |
+
.image-rendering-crisp {
|
169 |
+
image-rendering: crisp-edges;
|
170 |
+
|
171 |
+
/* alias for google chrome */
|
172 |
+
image-rendering: -webkit-optimize-contrast;
|
173 |
+
}
|
174 |
+
|
175 |
+
.image-rendering-pixel {
|
176 |
+
image-rendering: pixelated;
|
177 |
+
}
|
178 |
+
|
179 |
+
/* Tailwindcss */
|
180 |
+
|
181 |
+
#tailwind dd,
|
182 |
+
#tailwind dt {
|
183 |
+
margin: 0;
|
184 |
+
}
|
185 |
+
|
186 |
+
#tailwind *,
|
187 |
+
#tailwind ::before,
|
188 |
+
#tailwind ::after {
|
189 |
+
border-width: 0;
|
190 |
+
border-style: solid;
|
191 |
+
}
|
192 |
+
|
193 |
+
#tailwind ol,
|
194 |
+
#tailwind ul {
|
195 |
+
list-style: none;
|
196 |
+
margin: 0;
|
197 |
+
padding: 0;
|
198 |
+
}
|
docs/src/css/fragments.css
ADDED
@@ -0,0 +1,2275 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
:root {
|
2 |
+
--transparent: transparent;
|
3 |
+
--white: #fff;
|
4 |
+
--grey-900: #23263b;
|
5 |
+
--grey-800: #36395a;
|
6 |
+
--grey-700: #484c7a;
|
7 |
+
--grey-600: #5a5e9a;
|
8 |
+
--grey-500: #777aaf;
|
9 |
+
--grey-400: #9698c3;
|
10 |
+
--grey-300: #b6b7d5;
|
11 |
+
--grey-200: #d6d6e7;
|
12 |
+
--grey-100: #f5f5fa;
|
13 |
+
--grey-050: #fcfcfd;
|
14 |
+
--grey-000: #fff;
|
15 |
+
--pink-900: #59063d;
|
16 |
+
--pink-800: #88085c;
|
17 |
+
--pink-700: #b80979;
|
18 |
+
--pink-600: #e90a96;
|
19 |
+
--pink-500: #f82caa;
|
20 |
+
--pink-400: #fb5abc;
|
21 |
+
--pink-300: #fd89ce;
|
22 |
+
--pink-200: #feb9e2;
|
23 |
+
--pink-100: #ffeaf6;
|
24 |
+
--nebula-900: #141d61;
|
25 |
+
--nebula-800: #1e2b8f;
|
26 |
+
--nebula-700: #2b3cbb;
|
27 |
+
--nebula-600: #3c4fe0;
|
28 |
+
--nebula-500: #5468ff;
|
29 |
+
--nebula-400: #7c8aff;
|
30 |
+
--nebula-300: #a3acff;
|
31 |
+
--nebula-200: #cacfff;
|
32 |
+
--nebula-100: #f2f3ff;
|
33 |
+
--cyan-900: #00526c;
|
34 |
+
--cyan-800: #00769b;
|
35 |
+
--cyan-700: #009bcb;
|
36 |
+
--cyan-600: #0db7eb;
|
37 |
+
--cyan-500: #2cc8f7;
|
38 |
+
--cyan-400: #5adaff;
|
39 |
+
--cyan-300: #89e5ff;
|
40 |
+
--cyan-200: #b9efff;
|
41 |
+
--cyan-100: #e8faff;
|
42 |
+
--green-900: #005e36;
|
43 |
+
--green-800: #028950;
|
44 |
+
--green-700: #06b66c;
|
45 |
+
--green-600: #0de589;
|
46 |
+
--green-500: #5feb9e;
|
47 |
+
--green-400: #88f0b3;
|
48 |
+
--green-300: #aaf4c8;
|
49 |
+
--green-200: #c9f8de;
|
50 |
+
--green-100: #e6fcf3;
|
51 |
+
--orange-900: #963209;
|
52 |
+
--orange-800: #bf470a;
|
53 |
+
--orange-700: #e8600a;
|
54 |
+
--orange-600: #f78125;
|
55 |
+
--orange-500: #faa04b;
|
56 |
+
--orange-400: #fcbc73;
|
57 |
+
--orange-300: #fed59a;
|
58 |
+
--orange-200: #ffe9c3;
|
59 |
+
--orange-100: #fff9ec;
|
60 |
+
--red-900: #83111e;
|
61 |
+
--red-800: #ab1325;
|
62 |
+
--red-700: #d4142a;
|
63 |
+
--red-600: #ee243c;
|
64 |
+
--red-500: #f4495d;
|
65 |
+
--red-400: #f86e7e;
|
66 |
+
--red-300: #fc95a1;
|
67 |
+
--red-200: #febdc5;
|
68 |
+
--red-100: #ffe6e9;
|
69 |
+
--current: currentColor;
|
70 |
+
}
|
71 |
+
.uil-bgc-transparent {
|
72 |
+
background-color: transparent;
|
73 |
+
}
|
74 |
+
.uil-bgc-white {
|
75 |
+
background-color: #fff;
|
76 |
+
}
|
77 |
+
.uil-bgc-grey-900 {
|
78 |
+
background-color: #23263b;
|
79 |
+
}
|
80 |
+
.uil-bgc-grey-800 {
|
81 |
+
background-color: #36395a;
|
82 |
+
}
|
83 |
+
.uil-bgc-grey-200 {
|
84 |
+
background-color: #d6d6e7;
|
85 |
+
}
|
86 |
+
.hover\:uil-bgc-grey-100:focus,
|
87 |
+
.hover\:uil-bgc-grey-100:hover,
|
88 |
+
.uil-bgc-grey-100 {
|
89 |
+
background-color: #f5f5fa;
|
90 |
+
}
|
91 |
+
.uil-bgc-pink-200 {
|
92 |
+
background-color: #feb9e2;
|
93 |
+
}
|
94 |
+
.uil-bgc-nebula-500 {
|
95 |
+
background-color: #5468ff;
|
96 |
+
}
|
97 |
+
.uil-bgc-nebula-200 {
|
98 |
+
background-color: #cacfff;
|
99 |
+
}
|
100 |
+
.uil-bgc-green-200 {
|
101 |
+
background-color: #c9f8de;
|
102 |
+
}
|
103 |
+
.uil-bgc-orange-200 {
|
104 |
+
background-color: #ffe9c3;
|
105 |
+
}
|
106 |
+
.uil-bgc-red-600 {
|
107 |
+
background-color: #ee243c;
|
108 |
+
}
|
109 |
+
.uil-bgc-red-500 {
|
110 |
+
background-color: #f4495d;
|
111 |
+
}
|
112 |
+
.uil-bgc-current {
|
113 |
+
background-color: currentColor;
|
114 |
+
}
|
115 |
+
@media (min-width: 960px) {
|
116 |
+
.md\:uil-bgc-transparent {
|
117 |
+
background-color: transparent;
|
118 |
+
}
|
119 |
+
}
|
120 |
+
@media (min-width: 960px) {
|
121 |
+
.md\:uil-bgc-white {
|
122 |
+
background-color: #fff;
|
123 |
+
}
|
124 |
+
}
|
125 |
+
@media (min-width: 960px) {
|
126 |
+
.md\:uil-bgc-grey-900 {
|
127 |
+
background-color: #23263b;
|
128 |
+
}
|
129 |
+
}
|
130 |
+
.uil-bgp-center {
|
131 |
+
background-position: 50%;
|
132 |
+
}
|
133 |
+
.uil-bgp-bottom {
|
134 |
+
background-position: bottom;
|
135 |
+
}
|
136 |
+
.uil-bgr-no-repeat {
|
137 |
+
background-repeat: no-repeat;
|
138 |
+
}
|
139 |
+
@media (min-width: 960px) {
|
140 |
+
.md\:uil-bgr-no-repeat {
|
141 |
+
background-repeat: no-repeat;
|
142 |
+
}
|
143 |
+
}
|
144 |
+
.uil-bgs-cover {
|
145 |
+
background-size: cover;
|
146 |
+
}
|
147 |
+
.uil-bgs-contain {
|
148 |
+
background-size: contain;
|
149 |
+
}
|
150 |
+
@media (min-width: 960px) {
|
151 |
+
.md\:uil-bgs-contain {
|
152 |
+
background-size: contain;
|
153 |
+
}
|
154 |
+
}
|
155 |
+
@media (min-width: 1200px) {
|
156 |
+
.lg\:uil-bgs-cover {
|
157 |
+
background-size: cover;
|
158 |
+
}
|
159 |
+
}
|
160 |
+
.uil-bd-none {
|
161 |
+
border: none;
|
162 |
+
}
|
163 |
+
.uil-bdc-transparent {
|
164 |
+
border-color: transparent;
|
165 |
+
}
|
166 |
+
.uil-bdc-grey-800 {
|
167 |
+
border-color: #36395a;
|
168 |
+
}
|
169 |
+
.uil-bdc-grey-700 {
|
170 |
+
border-color: #484c7a;
|
171 |
+
}
|
172 |
+
.uil-bdc-grey-200 {
|
173 |
+
border-color: #d6d6e7;
|
174 |
+
}
|
175 |
+
.uil-bdc-grey-100 {
|
176 |
+
border-color: #f5f5fa;
|
177 |
+
}
|
178 |
+
.uil-bdc-pink-600 {
|
179 |
+
border-color: #e90a96;
|
180 |
+
}
|
181 |
+
.uil-bdc-nebula-500 {
|
182 |
+
border-color: #5468ff;
|
183 |
+
}
|
184 |
+
.uil-bdc-green-700 {
|
185 |
+
border-color: #06b66c;
|
186 |
+
}
|
187 |
+
.uil-bdc-orange-600 {
|
188 |
+
border-color: #f78125;
|
189 |
+
}
|
190 |
+
.uil-bdc-red-600 {
|
191 |
+
border-color: #ee243c;
|
192 |
+
}
|
193 |
+
@media (min-width: 960px) {
|
194 |
+
.md\:uil-bdc-transparent {
|
195 |
+
border-color: transparent;
|
196 |
+
}
|
197 |
+
}
|
198 |
+
@media (min-width: 960px) {
|
199 |
+
.md\:uil-bdc-white {
|
200 |
+
border-color: #fff;
|
201 |
+
}
|
202 |
+
}
|
203 |
+
@media (min-width: 960px) {
|
204 |
+
.md\:uil-bdc-grey-800 {
|
205 |
+
border-color: #36395a;
|
206 |
+
}
|
207 |
+
}
|
208 |
+
@media (min-width: 960px) {
|
209 |
+
.md\:uil-bdc-grey-200 {
|
210 |
+
border-color: #d6d6e7;
|
211 |
+
}
|
212 |
+
}
|
213 |
+
@media (min-width: 960px) {
|
214 |
+
.md\:uil-bdc-pink-600 {
|
215 |
+
border-color: #e90a96;
|
216 |
+
}
|
217 |
+
}
|
218 |
+
@media (min-width: 960px) {
|
219 |
+
.md\:uil-bdc-nebula-500 {
|
220 |
+
border-color: #5468ff;
|
221 |
+
}
|
222 |
+
}
|
223 |
+
@media (min-width: 960px) {
|
224 |
+
.md\:uil-bdc-green-700 {
|
225 |
+
border-color: #06b66c;
|
226 |
+
}
|
227 |
+
}
|
228 |
+
@media (min-width: 960px) {
|
229 |
+
.md\:uil-bdc-orange-600 {
|
230 |
+
border-color: #f78125;
|
231 |
+
}
|
232 |
+
}
|
233 |
+
@media (min-width: 960px) {
|
234 |
+
.md\:uil-bdc-red-600 {
|
235 |
+
border-color: #ee243c;
|
236 |
+
}
|
237 |
+
}
|
238 |
+
.uil-bdr-0 {
|
239 |
+
border-radius: 0;
|
240 |
+
}
|
241 |
+
.uil-bdr-2 {
|
242 |
+
border-radius: 2px;
|
243 |
+
}
|
244 |
+
.uil-bdr-4 {
|
245 |
+
border-radius: 4px;
|
246 |
+
}
|
247 |
+
.uil-bdr-6 {
|
248 |
+
border-radius: 6px;
|
249 |
+
}
|
250 |
+
.uil-bdr-8 {
|
251 |
+
border-radius: 8px;
|
252 |
+
}
|
253 |
+
.uil-bdr-20 {
|
254 |
+
border-radius: 20px;
|
255 |
+
}
|
256 |
+
.uil-bdr-max {
|
257 |
+
border-radius: 9999px;
|
258 |
+
}
|
259 |
+
@media (min-width: 960px) {
|
260 |
+
.md\:uil-bdr-4 {
|
261 |
+
border-radius: 4px;
|
262 |
+
}
|
263 |
+
}
|
264 |
+
.uil-bdtlr-0 {
|
265 |
+
border-top-left-radius: 0;
|
266 |
+
}
|
267 |
+
.uil-bdtlr-2 {
|
268 |
+
border-top-left-radius: 2px;
|
269 |
+
}
|
270 |
+
.uil-bdtlr-4 {
|
271 |
+
border-top-left-radius: 4px;
|
272 |
+
}
|
273 |
+
.uil-bdtlr-6 {
|
274 |
+
border-top-left-radius: 6px;
|
275 |
+
}
|
276 |
+
.uil-bdtlr-8 {
|
277 |
+
border-top-left-radius: 8px;
|
278 |
+
}
|
279 |
+
.uil-bdtlr-20 {
|
280 |
+
border-top-left-radius: 20px;
|
281 |
+
}
|
282 |
+
.uil-bdtrr-0 {
|
283 |
+
border-top-right-radius: 0;
|
284 |
+
}
|
285 |
+
.uil-bdtrr-2 {
|
286 |
+
border-top-right-radius: 2px;
|
287 |
+
}
|
288 |
+
.uil-bdtrr-4 {
|
289 |
+
border-top-right-radius: 4px;
|
290 |
+
}
|
291 |
+
.uil-bdtrr-6 {
|
292 |
+
border-top-right-radius: 6px;
|
293 |
+
}
|
294 |
+
.uil-bdtrr-8 {
|
295 |
+
border-top-right-radius: 8px;
|
296 |
+
}
|
297 |
+
.uil-bdtrr-20 {
|
298 |
+
border-top-right-radius: 20px;
|
299 |
+
}
|
300 |
+
.uil-bdblr-0 {
|
301 |
+
border-bottom-left-radius: 0;
|
302 |
+
}
|
303 |
+
.uil-bdblr-6 {
|
304 |
+
border-bottom-left-radius: 6px;
|
305 |
+
}
|
306 |
+
.uil-bdbrr-0 {
|
307 |
+
border-bottom-right-radius: 0;
|
308 |
+
}
|
309 |
+
.uil-bdbrr-6 {
|
310 |
+
border-bottom-right-radius: 6px;
|
311 |
+
}
|
312 |
+
@media (min-width: 960px) {
|
313 |
+
.md\:uil-bdbr-6 {
|
314 |
+
border-bottom-left-radius: 6px;
|
315 |
+
border-bottom-right-radius: 6px;
|
316 |
+
}
|
317 |
+
}
|
318 |
+
.uil-bds-solid {
|
319 |
+
border-style: solid;
|
320 |
+
}
|
321 |
+
@media (min-width: 960px) {
|
322 |
+
.md\:uil-bds-solid {
|
323 |
+
border-style: solid;
|
324 |
+
}
|
325 |
+
}
|
326 |
+
.uil-bdts-solid {
|
327 |
+
border-top-style: solid;
|
328 |
+
}
|
329 |
+
.uil-bdrs-solid {
|
330 |
+
border-right-style: solid;
|
331 |
+
}
|
332 |
+
.uil-bdbs-solid {
|
333 |
+
border-bottom-style: solid;
|
334 |
+
}
|
335 |
+
@media (min-width: 960px) {
|
336 |
+
.md\:uil-bdbs-solid {
|
337 |
+
border-bottom-style: solid;
|
338 |
+
}
|
339 |
+
}
|
340 |
+
.uil-bdw-0 {
|
341 |
+
border-width: 0;
|
342 |
+
}
|
343 |
+
.uil-bdw-1 {
|
344 |
+
border-width: 1px;
|
345 |
+
}
|
346 |
+
@media (min-width: 960px) {
|
347 |
+
.md\:uil-bdw-0 {
|
348 |
+
border-width: 0;
|
349 |
+
}
|
350 |
+
}
|
351 |
+
@media (min-width: 960px) {
|
352 |
+
.md\:uil-bdw-2 {
|
353 |
+
border-width: 2px;
|
354 |
+
}
|
355 |
+
}
|
356 |
+
@media (min-width: 960px) {
|
357 |
+
.md\:uil-bdlw-1 {
|
358 |
+
border-left-width: 1px;
|
359 |
+
}
|
360 |
+
}
|
361 |
+
.uil-bdtw-1 {
|
362 |
+
border-top-width: 1px;
|
363 |
+
}
|
364 |
+
.uil-bdtw-2 {
|
365 |
+
border-top-width: 2px;
|
366 |
+
}
|
367 |
+
@media (min-width: 960px) {
|
368 |
+
.md\:uil-bdtw-1 {
|
369 |
+
border-top-width: 1px;
|
370 |
+
}
|
371 |
+
}
|
372 |
+
.uil-bdrw-1 {
|
373 |
+
border-right-width: 1px;
|
374 |
+
}
|
375 |
+
.uil-bdbw-0 {
|
376 |
+
border-bottom-width: 0;
|
377 |
+
}
|
378 |
+
.uil-bdbw-1 {
|
379 |
+
border-bottom-width: 1px;
|
380 |
+
}
|
381 |
+
@media (min-width: 960px) {
|
382 |
+
.md\:uil-bdbw-1 {
|
383 |
+
border-bottom-width: 1px;
|
384 |
+
}
|
385 |
+
}
|
386 |
+
.uil-d-none {
|
387 |
+
display: none;
|
388 |
+
}
|
389 |
+
.uil-d-block {
|
390 |
+
display: block;
|
391 |
+
}
|
392 |
+
.uil-d-inline-block {
|
393 |
+
display: inline-block;
|
394 |
+
}
|
395 |
+
.uil-d-flex {
|
396 |
+
display: flex;
|
397 |
+
}
|
398 |
+
.uil-d-inline-flex {
|
399 |
+
display: inline-flex;
|
400 |
+
}
|
401 |
+
.uil-d-grid {
|
402 |
+
display: grid;
|
403 |
+
}
|
404 |
+
@media (min-width: 500px) {
|
405 |
+
.xs\:uil-d-block {
|
406 |
+
display: block;
|
407 |
+
}
|
408 |
+
}
|
409 |
+
@media (min-width: 768px) {
|
410 |
+
.sm\:uil-d-flex {
|
411 |
+
display: flex;
|
412 |
+
}
|
413 |
+
}
|
414 |
+
@media (min-width: 768px) {
|
415 |
+
.sm\:uil-d-grid {
|
416 |
+
display: grid;
|
417 |
+
}
|
418 |
+
}
|
419 |
+
@media (min-width: 960px) {
|
420 |
+
.md\:uil-d-none {
|
421 |
+
display: none;
|
422 |
+
}
|
423 |
+
}
|
424 |
+
@media (min-width: 960px) {
|
425 |
+
.md\:uil-d-block {
|
426 |
+
display: block;
|
427 |
+
}
|
428 |
+
}
|
429 |
+
@media (min-width: 960px) {
|
430 |
+
.md\:uil-d-flex {
|
431 |
+
display: flex;
|
432 |
+
}
|
433 |
+
}
|
434 |
+
@media (min-width: 960px) {
|
435 |
+
.md\:uil-d-grid {
|
436 |
+
display: grid;
|
437 |
+
}
|
438 |
+
}
|
439 |
+
@media (min-width: 1200px) {
|
440 |
+
.lg\:uil-d-none {
|
441 |
+
display: none;
|
442 |
+
}
|
443 |
+
}
|
444 |
+
@media (min-width: 1200px) {
|
445 |
+
.lg\:uil-d-block {
|
446 |
+
display: block;
|
447 |
+
}
|
448 |
+
}
|
449 |
+
@media (min-width: 1440px) {
|
450 |
+
.xl\:uil-d-inline-block {
|
451 |
+
display: inline-block;
|
452 |
+
}
|
453 |
+
}
|
454 |
+
.uil-m-0 {
|
455 |
+
margin: 0;
|
456 |
+
}
|
457 |
+
.uil-m-8 {
|
458 |
+
margin: 8px;
|
459 |
+
}
|
460 |
+
.uil-m-auto {
|
461 |
+
margin: auto;
|
462 |
+
}
|
463 |
+
@media (min-width: 960px) {
|
464 |
+
.md\:uil-m-0 {
|
465 |
+
margin: 0;
|
466 |
+
}
|
467 |
+
}
|
468 |
+
@media (min-width: 960px) {
|
469 |
+
.md\:uil-m-auto {
|
470 |
+
margin: auto;
|
471 |
+
}
|
472 |
+
}
|
473 |
+
.uil-ml-0 {
|
474 |
+
margin-left: 0;
|
475 |
+
}
|
476 |
+
.uil-ml-8 {
|
477 |
+
margin-left: 8px;
|
478 |
+
}
|
479 |
+
.uil-ml-12 {
|
480 |
+
margin-left: 12px;
|
481 |
+
}
|
482 |
+
.uil-ml-auto {
|
483 |
+
margin-left: auto;
|
484 |
+
}
|
485 |
+
@media (min-width: 500px) {
|
486 |
+
.xs\:uil-ml-24 {
|
487 |
+
margin-left: 24px;
|
488 |
+
}
|
489 |
+
}
|
490 |
+
@media (min-width: 768px) {
|
491 |
+
.sm\:uil-ml-12 {
|
492 |
+
margin-left: 12px;
|
493 |
+
}
|
494 |
+
}
|
495 |
+
@media (min-width: 768px) {
|
496 |
+
.sm\:uil-ml-24 {
|
497 |
+
margin-left: 24px;
|
498 |
+
}
|
499 |
+
}
|
500 |
+
@media (min-width: 960px) {
|
501 |
+
.md\:uil-ml-0 {
|
502 |
+
margin-left: 0;
|
503 |
+
}
|
504 |
+
}
|
505 |
+
@media (min-width: 960px) {
|
506 |
+
.md\:uil-ml-8 {
|
507 |
+
margin-left: 8px;
|
508 |
+
}
|
509 |
+
}
|
510 |
+
@media (min-width: 960px) {
|
511 |
+
.md\:uil-ml-50p {
|
512 |
+
margin-left: 50%;
|
513 |
+
}
|
514 |
+
}
|
515 |
+
@media (min-width: 960px) {
|
516 |
+
.md\:uil-ml-auto {
|
517 |
+
margin-left: auto;
|
518 |
+
}
|
519 |
+
}
|
520 |
+
@media (min-width: 1200px) {
|
521 |
+
.lg\:uil-ml-16 {
|
522 |
+
margin-left: 16px;
|
523 |
+
}
|
524 |
+
}
|
525 |
+
@media (min-width: 1200px) {
|
526 |
+
.lg\:uil-ml-48 {
|
527 |
+
margin-left: 48px;
|
528 |
+
}
|
529 |
+
}
|
530 |
+
@media (min-width: 1440px) {
|
531 |
+
.xl\:uil-ml-16 {
|
532 |
+
margin-left: 16px;
|
533 |
+
}
|
534 |
+
}
|
535 |
+
.uil-mt-0 {
|
536 |
+
margin-top: 0;
|
537 |
+
}
|
538 |
+
.uil-mt-4 {
|
539 |
+
margin-top: 4px;
|
540 |
+
}
|
541 |
+
.uil-mt-8 {
|
542 |
+
margin-top: 8px;
|
543 |
+
}
|
544 |
+
.uil-mt-12 {
|
545 |
+
margin-top: 12px;
|
546 |
+
}
|
547 |
+
.uil-mt-16 {
|
548 |
+
margin-top: 16px;
|
549 |
+
}
|
550 |
+
.uil-mt-20 {
|
551 |
+
margin-top: 20px;
|
552 |
+
}
|
553 |
+
.uil-mt-24 {
|
554 |
+
margin-top: 24px;
|
555 |
+
}
|
556 |
+
.uil-mt-32 {
|
557 |
+
margin-top: 32px;
|
558 |
+
}
|
559 |
+
.uil-mt-48 {
|
560 |
+
margin-top: 48px;
|
561 |
+
}
|
562 |
+
.uil-mt-80 {
|
563 |
+
margin-top: 80px;
|
564 |
+
}
|
565 |
+
@media (min-width: 500px) {
|
566 |
+
.xs\:uil-mt-0 {
|
567 |
+
margin-top: 0;
|
568 |
+
}
|
569 |
+
}
|
570 |
+
@media (min-width: 768px) {
|
571 |
+
.sm\:uil-mt-0 {
|
572 |
+
margin-top: 0;
|
573 |
+
}
|
574 |
+
}
|
575 |
+
@media (min-width: 960px) {
|
576 |
+
.md\:uil-mt-0 {
|
577 |
+
margin-top: 0;
|
578 |
+
}
|
579 |
+
}
|
580 |
+
@media (min-width: 960px) {
|
581 |
+
.md\:uil-mt-8 {
|
582 |
+
margin-top: 8px;
|
583 |
+
}
|
584 |
+
}
|
585 |
+
@media (min-width: 960px) {
|
586 |
+
.md\:uil-mt-12 {
|
587 |
+
margin-top: 12px;
|
588 |
+
}
|
589 |
+
}
|
590 |
+
@media (min-width: 960px) {
|
591 |
+
.md\:uil-mt-auto {
|
592 |
+
margin-top: auto;
|
593 |
+
}
|
594 |
+
}
|
595 |
+
@media (min-width: 1200px) {
|
596 |
+
.lg\:uil-mt-8 {
|
597 |
+
margin-top: 8px;
|
598 |
+
}
|
599 |
+
}
|
600 |
+
@media (min-width: 1200px) {
|
601 |
+
.lg\:uil-mt-12 {
|
602 |
+
margin-top: 12px;
|
603 |
+
}
|
604 |
+
}
|
605 |
+
@media (min-width: 1200px) {
|
606 |
+
.lg\:uil-mt-20 {
|
607 |
+
margin-top: 20px;
|
608 |
+
}
|
609 |
+
}
|
610 |
+
@media (min-width: 1200px) {
|
611 |
+
.lg\:uil-mt-48 {
|
612 |
+
margin-top: 48px;
|
613 |
+
}
|
614 |
+
}
|
615 |
+
@media (min-width: 1200px) {
|
616 |
+
.lg\:uil-mt-120 {
|
617 |
+
margin-top: 120px;
|
618 |
+
}
|
619 |
+
}
|
620 |
+
.uil-mr-0 {
|
621 |
+
margin-right: 0;
|
622 |
+
}
|
623 |
+
.uil-mr-4 {
|
624 |
+
margin-right: 4px;
|
625 |
+
}
|
626 |
+
.uil-mr-8 {
|
627 |
+
margin-right: 8px;
|
628 |
+
}
|
629 |
+
.uil-mr-16 {
|
630 |
+
margin-right: 16px;
|
631 |
+
}
|
632 |
+
.uil-mr-32 {
|
633 |
+
margin-right: 32px;
|
634 |
+
}
|
635 |
+
.uil-mr-auto {
|
636 |
+
margin-right: auto;
|
637 |
+
}
|
638 |
+
@media (min-width: 960px) {
|
639 |
+
.md\:uil-mr-0 {
|
640 |
+
margin-right: 0;
|
641 |
+
}
|
642 |
+
}
|
643 |
+
@media (min-width: 960px) {
|
644 |
+
.md\:uil-mr-8 {
|
645 |
+
margin-right: 8px;
|
646 |
+
}
|
647 |
+
}
|
648 |
+
@media (min-width: 960px) {
|
649 |
+
.md\:uil-mr-20 {
|
650 |
+
margin-right: 20px;
|
651 |
+
}
|
652 |
+
}
|
653 |
+
@media (min-width: 1200px) {
|
654 |
+
.lg\:uil-mr-12 {
|
655 |
+
margin-right: 12px;
|
656 |
+
}
|
657 |
+
}
|
658 |
+
.uil-mb-0 {
|
659 |
+
margin-bottom: 0;
|
660 |
+
}
|
661 |
+
.uil-mb-8 {
|
662 |
+
margin-bottom: 8px;
|
663 |
+
}
|
664 |
+
.uil-mb-12 {
|
665 |
+
margin-bottom: 12px;
|
666 |
+
}
|
667 |
+
.uil-mb-16 {
|
668 |
+
margin-bottom: 16px;
|
669 |
+
}
|
670 |
+
.uil-mb-20 {
|
671 |
+
margin-bottom: 20px;
|
672 |
+
}
|
673 |
+
.uil-mb-24 {
|
674 |
+
margin-bottom: 24px;
|
675 |
+
}
|
676 |
+
.uil-mb-48 {
|
677 |
+
margin-bottom: 48px;
|
678 |
+
}
|
679 |
+
@media (min-width: 768px) {
|
680 |
+
.sm\:uil-mb-0 {
|
681 |
+
margin-bottom: 0;
|
682 |
+
}
|
683 |
+
}
|
684 |
+
@media (min-width: 960px) {
|
685 |
+
.md\:uil-mb-0 {
|
686 |
+
margin-bottom: 0;
|
687 |
+
}
|
688 |
+
}
|
689 |
+
@media (min-width: 960px) {
|
690 |
+
.md\:uil-mb-16 {
|
691 |
+
margin-bottom: 16px;
|
692 |
+
}
|
693 |
+
}
|
694 |
+
@media (min-width: 960px) {
|
695 |
+
.md\:uil-mb-24 {
|
696 |
+
margin-bottom: 24px;
|
697 |
+
}
|
698 |
+
}
|
699 |
+
@media (min-width: 1200px) {
|
700 |
+
.lg\:uil-mb-20 {
|
701 |
+
margin-bottom: 20px;
|
702 |
+
}
|
703 |
+
}
|
704 |
+
@media (min-width: 1200px) {
|
705 |
+
.lg\:uil-mb-24 {
|
706 |
+
margin-bottom: 24px;
|
707 |
+
}
|
708 |
+
}
|
709 |
+
@media (min-width: 1200px) {
|
710 |
+
.lg\:uil-mb-80 {
|
711 |
+
margin-bottom: 80px;
|
712 |
+
}
|
713 |
+
}
|
714 |
+
.uil-mv-0 {
|
715 |
+
margin-top: 0;
|
716 |
+
margin-bottom: 0;
|
717 |
+
}
|
718 |
+
.uil-mv-8 {
|
719 |
+
margin-top: 8px;
|
720 |
+
margin-bottom: 8px;
|
721 |
+
}
|
722 |
+
.uil-mh-0 {
|
723 |
+
margin-left: 0;
|
724 |
+
margin-right: 0;
|
725 |
+
}
|
726 |
+
.uil-mh-auto {
|
727 |
+
margin-left: auto;
|
728 |
+
margin-right: auto;
|
729 |
+
}
|
730 |
+
@media (min-width: 960px) {
|
731 |
+
.md\:uil-mh-12 {
|
732 |
+
margin-left: 12px;
|
733 |
+
margin-right: 12px;
|
734 |
+
}
|
735 |
+
}
|
736 |
+
.uil-ov-visible {
|
737 |
+
overflow: visible;
|
738 |
+
}
|
739 |
+
.uil-ov-hidden {
|
740 |
+
overflow: hidden;
|
741 |
+
}
|
742 |
+
.uil-ov-auto {
|
743 |
+
overflow: auto;
|
744 |
+
}
|
745 |
+
@media (min-width: 960px) {
|
746 |
+
.md\:uil-ov-hidden {
|
747 |
+
overflow: hidden;
|
748 |
+
}
|
749 |
+
}
|
750 |
+
.uil-ovx-scroll {
|
751 |
+
overflow-x: scroll;
|
752 |
+
}
|
753 |
+
.uil-ovx-auto {
|
754 |
+
overflow-x: auto;
|
755 |
+
}
|
756 |
+
.uil-ovy-hidden {
|
757 |
+
overflow-y: hidden;
|
758 |
+
}
|
759 |
+
.uil-ovy-auto {
|
760 |
+
overflow-y: auto;
|
761 |
+
}
|
762 |
+
.uil-p-0 {
|
763 |
+
padding: 0;
|
764 |
+
}
|
765 |
+
.uil-p-8 {
|
766 |
+
padding: 8px;
|
767 |
+
}
|
768 |
+
.uil-p-12 {
|
769 |
+
padding: 12px;
|
770 |
+
}
|
771 |
+
.uil-p-20 {
|
772 |
+
padding: 20px;
|
773 |
+
}
|
774 |
+
.uil-p-24 {
|
775 |
+
padding: 24px;
|
776 |
+
}
|
777 |
+
.uil-p-48 {
|
778 |
+
padding: 48px;
|
779 |
+
}
|
780 |
+
@media (min-width: 960px) {
|
781 |
+
.md\:uil-p-48 {
|
782 |
+
padding: 48px;
|
783 |
+
}
|
784 |
+
}
|
785 |
+
.uil-pl-0 {
|
786 |
+
padding-left: 0;
|
787 |
+
}
|
788 |
+
.uil-pl-8 {
|
789 |
+
padding-left: 8px;
|
790 |
+
}
|
791 |
+
.uil-pl-12 {
|
792 |
+
padding-left: 12px;
|
793 |
+
}
|
794 |
+
.uil-pl-16 {
|
795 |
+
padding-left: 16px;
|
796 |
+
}
|
797 |
+
.uil-pl-24 {
|
798 |
+
padding-left: 24px;
|
799 |
+
}
|
800 |
+
.uil-pl-48 {
|
801 |
+
padding-left: 48px;
|
802 |
+
}
|
803 |
+
@media (min-width: 960px) {
|
804 |
+
.md\:uil-pl-24 {
|
805 |
+
padding-left: 24px;
|
806 |
+
}
|
807 |
+
}
|
808 |
+
@media (min-width: 960px) {
|
809 |
+
.md\:uil-pl-48 {
|
810 |
+
padding-left: 48px;
|
811 |
+
}
|
812 |
+
}
|
813 |
+
@media (min-width: 1200px) {
|
814 |
+
.lg\:uil-pl-32 {
|
815 |
+
padding-left: 32px;
|
816 |
+
}
|
817 |
+
}
|
818 |
+
@media (min-width: 1200px) {
|
819 |
+
.lg\:uil-pl-48 {
|
820 |
+
padding-left: 48px;
|
821 |
+
}
|
822 |
+
}
|
823 |
+
.uil-pt-0 {
|
824 |
+
padding-top: 0;
|
825 |
+
}
|
826 |
+
.uil-pt-12 {
|
827 |
+
padding-top: 12px;
|
828 |
+
}
|
829 |
+
.uil-pt-16 {
|
830 |
+
padding-top: 16px;
|
831 |
+
}
|
832 |
+
.uil-pt-24 {
|
833 |
+
padding-top: 24px;
|
834 |
+
}
|
835 |
+
.uil-pt-32 {
|
836 |
+
padding-top: 32px;
|
837 |
+
}
|
838 |
+
.uil-pt-48 {
|
839 |
+
padding-top: 48px;
|
840 |
+
}
|
841 |
+
@media (min-width: 960px) {
|
842 |
+
.md\:uil-pt-0 {
|
843 |
+
padding-top: 0;
|
844 |
+
}
|
845 |
+
}
|
846 |
+
@media (min-width: 960px) {
|
847 |
+
.md\:uil-pt-24 {
|
848 |
+
padding-top: 24px;
|
849 |
+
}
|
850 |
+
}
|
851 |
+
@media (min-width: 1200px) {
|
852 |
+
.lg\:uil-pt-24 {
|
853 |
+
padding-top: 24px;
|
854 |
+
}
|
855 |
+
}
|
856 |
+
@media (min-width: 1200px) {
|
857 |
+
.lg\:uil-pt-32 {
|
858 |
+
padding-top: 32px;
|
859 |
+
}
|
860 |
+
}
|
861 |
+
@media (min-width: 1200px) {
|
862 |
+
.lg\:uil-pt-48 {
|
863 |
+
padding-top: 48px;
|
864 |
+
}
|
865 |
+
}
|
866 |
+
@media (min-width: 1200px) {
|
867 |
+
.lg\:uil-pt-80 {
|
868 |
+
padding-top: 80px;
|
869 |
+
}
|
870 |
+
}
|
871 |
+
.uil-pr-0 {
|
872 |
+
padding-right: 0;
|
873 |
+
}
|
874 |
+
.uil-pr-8 {
|
875 |
+
padding-right: 8px;
|
876 |
+
}
|
877 |
+
.uil-pr-16 {
|
878 |
+
padding-right: 16px;
|
879 |
+
}
|
880 |
+
.uil-pr-24 {
|
881 |
+
padding-right: 24px;
|
882 |
+
}
|
883 |
+
.uil-pr-32 {
|
884 |
+
padding-right: 32px;
|
885 |
+
}
|
886 |
+
.uil-pr-48 {
|
887 |
+
padding-right: 48px;
|
888 |
+
}
|
889 |
+
.uil-pr-80 {
|
890 |
+
padding-right: 80px;
|
891 |
+
}
|
892 |
+
@media (min-width: 960px) {
|
893 |
+
.md\:uil-pr-0 {
|
894 |
+
padding-right: 0;
|
895 |
+
}
|
896 |
+
}
|
897 |
+
@media (min-width: 960px) {
|
898 |
+
.md\:uil-pr-24 {
|
899 |
+
padding-right: 24px;
|
900 |
+
}
|
901 |
+
}
|
902 |
+
@media (min-width: 960px) {
|
903 |
+
.md\:uil-pr-48 {
|
904 |
+
padding-right: 48px;
|
905 |
+
}
|
906 |
+
}
|
907 |
+
@media (min-width: 1200px) {
|
908 |
+
.lg\:uil-pr-8 {
|
909 |
+
padding-right: 8px;
|
910 |
+
}
|
911 |
+
}
|
912 |
+
@media (min-width: 1200px) {
|
913 |
+
.lg\:uil-pr-48 {
|
914 |
+
padding-right: 48px;
|
915 |
+
}
|
916 |
+
}
|
917 |
+
.uil-pb-0 {
|
918 |
+
padding-bottom: 0;
|
919 |
+
}
|
920 |
+
.uil-pb-12 {
|
921 |
+
padding-bottom: 12px;
|
922 |
+
}
|
923 |
+
.uil-pb-16 {
|
924 |
+
padding-bottom: 16px;
|
925 |
+
}
|
926 |
+
.uil-pb-24 {
|
927 |
+
padding-bottom: 24px;
|
928 |
+
}
|
929 |
+
.uil-pb-48 {
|
930 |
+
padding-bottom: 48px;
|
931 |
+
}
|
932 |
+
.uil-pb-80 {
|
933 |
+
padding-bottom: 80px;
|
934 |
+
}
|
935 |
+
@media (min-width: 960px) {
|
936 |
+
.md\:uil-pb-24 {
|
937 |
+
padding-bottom: 24px;
|
938 |
+
}
|
939 |
+
}
|
940 |
+
@media (min-width: 1200px) {
|
941 |
+
.lg\:uil-pb-24 {
|
942 |
+
padding-bottom: 24px;
|
943 |
+
}
|
944 |
+
}
|
945 |
+
@media (min-width: 1200px) {
|
946 |
+
.lg\:uil-pb-48 {
|
947 |
+
padding-bottom: 48px;
|
948 |
+
}
|
949 |
+
}
|
950 |
+
@media (min-width: 1200px) {
|
951 |
+
.lg\:uil-pb-80 {
|
952 |
+
padding-bottom: 80px;
|
953 |
+
}
|
954 |
+
}
|
955 |
+
@media (min-width: 1200px) {
|
956 |
+
.lg\:uil-pb-120 {
|
957 |
+
padding-bottom: 120px;
|
958 |
+
}
|
959 |
+
}
|
960 |
+
.uil-pv-8 {
|
961 |
+
padding-top: 8px;
|
962 |
+
padding-bottom: 8px;
|
963 |
+
}
|
964 |
+
.uil-pv-16 {
|
965 |
+
padding-top: 16px;
|
966 |
+
padding-bottom: 16px;
|
967 |
+
}
|
968 |
+
.uil-pv-20 {
|
969 |
+
padding-top: 20px;
|
970 |
+
padding-bottom: 20px;
|
971 |
+
}
|
972 |
+
.uil-pv-24 {
|
973 |
+
padding-top: 24px;
|
974 |
+
padding-bottom: 24px;
|
975 |
+
}
|
976 |
+
.uil-pv-32 {
|
977 |
+
padding-top: 32px;
|
978 |
+
padding-bottom: 32px;
|
979 |
+
}
|
980 |
+
.uil-pv-48 {
|
981 |
+
padding-top: 48px;
|
982 |
+
padding-bottom: 48px;
|
983 |
+
}
|
984 |
+
.uil-pv-80 {
|
985 |
+
padding-top: 80px;
|
986 |
+
padding-bottom: 80px;
|
987 |
+
}
|
988 |
+
@media (min-width: 960px) {
|
989 |
+
.md\:uil-pv-120 {
|
990 |
+
padding-top: 120px;
|
991 |
+
padding-bottom: 120px;
|
992 |
+
}
|
993 |
+
}
|
994 |
+
@media (min-width: 1200px) {
|
995 |
+
.lg\:uil-pv-32 {
|
996 |
+
padding-top: 32px;
|
997 |
+
padding-bottom: 32px;
|
998 |
+
}
|
999 |
+
}
|
1000 |
+
@media (min-width: 1200px) {
|
1001 |
+
.lg\:uil-pv-48 {
|
1002 |
+
padding-top: 48px;
|
1003 |
+
padding-bottom: 48px;
|
1004 |
+
}
|
1005 |
+
}
|
1006 |
+
@media (min-width: 1200px) {
|
1007 |
+
.lg\:uil-pv-120 {
|
1008 |
+
padding-top: 120px;
|
1009 |
+
padding-bottom: 120px;
|
1010 |
+
}
|
1011 |
+
}
|
1012 |
+
.uil-ph-0 {
|
1013 |
+
padding-left: 0;
|
1014 |
+
padding-right: 0;
|
1015 |
+
}
|
1016 |
+
.uil-ph-4 {
|
1017 |
+
padding-left: 4px;
|
1018 |
+
padding-right: 4px;
|
1019 |
+
}
|
1020 |
+
.uil-ph-8 {
|
1021 |
+
padding-left: 8px;
|
1022 |
+
padding-right: 8px;
|
1023 |
+
}
|
1024 |
+
.uil-ph-12 {
|
1025 |
+
padding-left: 12px;
|
1026 |
+
padding-right: 12px;
|
1027 |
+
}
|
1028 |
+
.uil-ph-16 {
|
1029 |
+
padding-left: 16px;
|
1030 |
+
padding-right: 16px;
|
1031 |
+
}
|
1032 |
+
.uil-ph-20 {
|
1033 |
+
padding-left: 20px;
|
1034 |
+
padding-right: 20px;
|
1035 |
+
}
|
1036 |
+
.uil-ph-24 {
|
1037 |
+
padding-left: 24px;
|
1038 |
+
padding-right: 24px;
|
1039 |
+
}
|
1040 |
+
.uil-ph-32 {
|
1041 |
+
padding-left: 32px;
|
1042 |
+
padding-right: 32px;
|
1043 |
+
}
|
1044 |
+
@media (min-width: 768px) {
|
1045 |
+
.sm\:uil-ph-16 {
|
1046 |
+
padding-left: 16px;
|
1047 |
+
padding-right: 16px;
|
1048 |
+
}
|
1049 |
+
}
|
1050 |
+
@media (min-width: 960px) {
|
1051 |
+
.md\:uil-ph-0 {
|
1052 |
+
padding-left: 0;
|
1053 |
+
padding-right: 0;
|
1054 |
+
}
|
1055 |
+
}
|
1056 |
+
@media (min-width: 960px) {
|
1057 |
+
.md\:uil-ph-20 {
|
1058 |
+
padding-left: 20px;
|
1059 |
+
padding-right: 20px;
|
1060 |
+
}
|
1061 |
+
}
|
1062 |
+
@media (min-width: 960px) {
|
1063 |
+
.md\:uil-ph-48 {
|
1064 |
+
padding-left: 48px;
|
1065 |
+
padding-right: 48px;
|
1066 |
+
}
|
1067 |
+
}
|
1068 |
+
@media (min-width: 1200px) {
|
1069 |
+
.lg\:uil-ph-20 {
|
1070 |
+
padding-left: 20px;
|
1071 |
+
padding-right: 20px;
|
1072 |
+
}
|
1073 |
+
}
|
1074 |
+
@media (min-width: 1200px) {
|
1075 |
+
.lg\:uil-ph-32 {
|
1076 |
+
padding-left: 32px;
|
1077 |
+
padding-right: 32px;
|
1078 |
+
}
|
1079 |
+
}
|
1080 |
+
@media (min-width: 1200px) {
|
1081 |
+
.lg\:uil-ph-48 {
|
1082 |
+
padding-left: 48px;
|
1083 |
+
padding-right: 48px;
|
1084 |
+
}
|
1085 |
+
}
|
1086 |
+
.uil-v-visible {
|
1087 |
+
visibility: visible;
|
1088 |
+
}
|
1089 |
+
.uil-v-hidden {
|
1090 |
+
visibility: hidden;
|
1091 |
+
}
|
1092 |
+
@media (min-width: 960px) {
|
1093 |
+
.md\:uil-v-visible {
|
1094 |
+
visibility: visible;
|
1095 |
+
}
|
1096 |
+
}
|
1097 |
+
@media (min-width: 960px) {
|
1098 |
+
.md\:uil-v-hidden {
|
1099 |
+
visibility: hidden;
|
1100 |
+
}
|
1101 |
+
}
|
1102 |
+
.hover\:uil-color-white:focus,
|
1103 |
+
.hover\:uil-color-white:hover,
|
1104 |
+
.uil-color-white {
|
1105 |
+
color: #fff;
|
1106 |
+
}
|
1107 |
+
.hover\:uil-color-grey-900:focus,
|
1108 |
+
.hover\:uil-color-grey-900:hover,
|
1109 |
+
.uil-color-grey-900 {
|
1110 |
+
color: #23263b;
|
1111 |
+
}
|
1112 |
+
.uil-color-grey-800 {
|
1113 |
+
color: #36395a;
|
1114 |
+
}
|
1115 |
+
.hover\:uil-color-grey-700:focus,
|
1116 |
+
.hover\:uil-color-grey-700:hover,
|
1117 |
+
.uil-color-grey-700 {
|
1118 |
+
color: #484c7a;
|
1119 |
+
}
|
1120 |
+
.hover\:uil-color-grey-600:focus,
|
1121 |
+
.hover\:uil-color-grey-600:hover,
|
1122 |
+
.uil-color-grey-600 {
|
1123 |
+
color: #5a5e9a;
|
1124 |
+
}
|
1125 |
+
.uil-color-grey-500 {
|
1126 |
+
color: #777aaf;
|
1127 |
+
}
|
1128 |
+
.hover\:uil-color-grey-400:focus,
|
1129 |
+
.hover\:uil-color-grey-400:hover,
|
1130 |
+
.uil-color-grey-400 {
|
1131 |
+
color: #9698c3;
|
1132 |
+
}
|
1133 |
+
.uil-color-grey-300 {
|
1134 |
+
color: #b6b7d5;
|
1135 |
+
}
|
1136 |
+
.hover\:uil-color-grey-200:focus,
|
1137 |
+
.hover\:uil-color-grey-200:hover,
|
1138 |
+
.uil-color-grey-200 {
|
1139 |
+
color: #d6d6e7;
|
1140 |
+
}
|
1141 |
+
.hover\:uil-color-grey-100:focus,
|
1142 |
+
.hover\:uil-color-grey-100:hover,
|
1143 |
+
.uil-color-grey-100 {
|
1144 |
+
color: #f5f5fa;
|
1145 |
+
}
|
1146 |
+
.uil-color-pink-600 {
|
1147 |
+
color: #e90a96;
|
1148 |
+
}
|
1149 |
+
.uil-color-nebula-500 {
|
1150 |
+
color: #5468ff;
|
1151 |
+
}
|
1152 |
+
.uil-color-green-700 {
|
1153 |
+
color: #06b66c;
|
1154 |
+
}
|
1155 |
+
.uil-color-orange-600 {
|
1156 |
+
color: #f78125;
|
1157 |
+
}
|
1158 |
+
.uil-color-red-600 {
|
1159 |
+
color: #ee243c;
|
1160 |
+
}
|
1161 |
+
.uil-color-red-500 {
|
1162 |
+
color: #f4495d;
|
1163 |
+
}
|
1164 |
+
.uil-color-current {
|
1165 |
+
color: currentColor;
|
1166 |
+
}
|
1167 |
+
.uil-fill-white {
|
1168 |
+
fill: #fff;
|
1169 |
+
}
|
1170 |
+
.uil-ai-center {
|
1171 |
+
align-items: center;
|
1172 |
+
}
|
1173 |
+
.uil-ai-end {
|
1174 |
+
align-items: flex-end;
|
1175 |
+
}
|
1176 |
+
@media (min-width: 768px) {
|
1177 |
+
.sm\:uil-ai-start {
|
1178 |
+
align-items: flex-start;
|
1179 |
+
}
|
1180 |
+
}
|
1181 |
+
@media (min-width: 960px) {
|
1182 |
+
.md\:uil-ai-start {
|
1183 |
+
align-items: flex-start;
|
1184 |
+
}
|
1185 |
+
}
|
1186 |
+
@media (min-width: 960px) {
|
1187 |
+
.md\:uil-ai-center {
|
1188 |
+
align-items: center;
|
1189 |
+
}
|
1190 |
+
}
|
1191 |
+
@media (min-width: 960px) {
|
1192 |
+
.md\:uil-ai-end {
|
1193 |
+
align-items: flex-end;
|
1194 |
+
}
|
1195 |
+
}
|
1196 |
+
@media (min-width: 1200px) {
|
1197 |
+
.lg\:uil-ai-end {
|
1198 |
+
align-items: flex-end;
|
1199 |
+
}
|
1200 |
+
}
|
1201 |
+
.uil-as-end {
|
1202 |
+
align-self: flex-end;
|
1203 |
+
}
|
1204 |
+
.uil-fxd-column {
|
1205 |
+
flex-direction: column;
|
1206 |
+
}
|
1207 |
+
.uil-fxd-row {
|
1208 |
+
flex-direction: row;
|
1209 |
+
}
|
1210 |
+
@media (min-width: 500px) {
|
1211 |
+
.xs\:uil-fxd-row {
|
1212 |
+
flex-direction: row;
|
1213 |
+
}
|
1214 |
+
}
|
1215 |
+
@media (min-width: 768px) {
|
1216 |
+
.sm\:uil-fxd-row {
|
1217 |
+
flex-direction: row;
|
1218 |
+
}
|
1219 |
+
}
|
1220 |
+
@media (min-width: 960px) {
|
1221 |
+
.md\:uil-fxd-column {
|
1222 |
+
flex-direction: column;
|
1223 |
+
}
|
1224 |
+
}
|
1225 |
+
@media (min-width: 960px) {
|
1226 |
+
.md\:uil-fxd-row {
|
1227 |
+
flex-direction: row;
|
1228 |
+
}
|
1229 |
+
}
|
1230 |
+
@media (min-width: 960px) {
|
1231 |
+
.md\:uil-fxd-row-reverse {
|
1232 |
+
flex-direction: row-reverse;
|
1233 |
+
}
|
1234 |
+
}
|
1235 |
+
.uil-fxg-0 {
|
1236 |
+
flex-grow: 0;
|
1237 |
+
}
|
1238 |
+
.uil-fxg-1 {
|
1239 |
+
flex-grow: 1;
|
1240 |
+
}
|
1241 |
+
@media (min-width: 960px) {
|
1242 |
+
.md\:uil-fxg-1 {
|
1243 |
+
flex-grow: 1;
|
1244 |
+
}
|
1245 |
+
}
|
1246 |
+
.uil-fxs-0 {
|
1247 |
+
flex-shrink: 0;
|
1248 |
+
}
|
1249 |
+
.uil-fxs-1 {
|
1250 |
+
flex-shrink: 1;
|
1251 |
+
}
|
1252 |
+
.uil-fx-1 {
|
1253 |
+
flex: 0 1 8.333333%;
|
1254 |
+
}
|
1255 |
+
.uil-fx-4 {
|
1256 |
+
flex: 0 1 33.333333%;
|
1257 |
+
}
|
1258 |
+
.uil-fx-5 {
|
1259 |
+
flex: 0 1 41.666667%;
|
1260 |
+
}
|
1261 |
+
.uil-fx-6 {
|
1262 |
+
flex: 0 1 50%;
|
1263 |
+
}
|
1264 |
+
.uil-fx-12 {
|
1265 |
+
flex: 0 1 100%;
|
1266 |
+
}
|
1267 |
+
@media (min-width: 960px) {
|
1268 |
+
.md\:uil-fx-5 {
|
1269 |
+
flex: 0 1 41.666667%;
|
1270 |
+
}
|
1271 |
+
}
|
1272 |
+
@media (min-width: 960px) {
|
1273 |
+
.md\:uil-fx-6 {
|
1274 |
+
flex: 0 1 50%;
|
1275 |
+
}
|
1276 |
+
}
|
1277 |
+
@media (min-width: 960px) {
|
1278 |
+
.md\:uil-fx-7 {
|
1279 |
+
flex: 0 1 58.333333%;
|
1280 |
+
}
|
1281 |
+
}
|
1282 |
+
@media (min-width: 960px) {
|
1283 |
+
.md\:uil-fx-9 {
|
1284 |
+
flex: 0 1 75%;
|
1285 |
+
}
|
1286 |
+
}
|
1287 |
+
.uil-jc-center {
|
1288 |
+
justify-content: center;
|
1289 |
+
}
|
1290 |
+
.uil-jc-end {
|
1291 |
+
justify-content: flex-end;
|
1292 |
+
}
|
1293 |
+
.uil-jc-between {
|
1294 |
+
justify-content: space-between;
|
1295 |
+
}
|
1296 |
+
.uil-jc-around {
|
1297 |
+
justify-content: space-around;
|
1298 |
+
}
|
1299 |
+
@media (min-width: 500px) {
|
1300 |
+
.xs\:uil-jc-center {
|
1301 |
+
justify-content: center;
|
1302 |
+
}
|
1303 |
+
}
|
1304 |
+
@media (min-width: 768px) {
|
1305 |
+
.sm\:uil-jc-start {
|
1306 |
+
justify-content: flex-start;
|
1307 |
+
}
|
1308 |
+
}
|
1309 |
+
@media (min-width: 768px) {
|
1310 |
+
.sm\:uil-jc-center {
|
1311 |
+
justify-content: center;
|
1312 |
+
}
|
1313 |
+
}
|
1314 |
+
@media (min-width: 960px) {
|
1315 |
+
.md\:uil-jc-start {
|
1316 |
+
justify-content: flex-start;
|
1317 |
+
}
|
1318 |
+
}
|
1319 |
+
@media (min-width: 960px) {
|
1320 |
+
.md\:uil-jc-center {
|
1321 |
+
justify-content: center;
|
1322 |
+
}
|
1323 |
+
}
|
1324 |
+
@media (min-width: 960px) {
|
1325 |
+
.md\:uil-jc-end {
|
1326 |
+
justify-content: flex-end;
|
1327 |
+
}
|
1328 |
+
}
|
1329 |
+
@media (min-width: 960px) {
|
1330 |
+
.md\:uil-jc-between {
|
1331 |
+
justify-content: space-between;
|
1332 |
+
}
|
1333 |
+
}
|
1334 |
+
@media (min-width: 960px) {
|
1335 |
+
.md\:uil-jc-around {
|
1336 |
+
justify-content: space-around;
|
1337 |
+
}
|
1338 |
+
}
|
1339 |
+
@media (min-width: 1200px) {
|
1340 |
+
.lg\:uil-jc-end {
|
1341 |
+
justify-content: flex-end;
|
1342 |
+
}
|
1343 |
+
}
|
1344 |
+
@media (min-width: 960px) {
|
1345 |
+
.md\:uil-gcstart-1 {
|
1346 |
+
grid-column-start: 1;
|
1347 |
+
}
|
1348 |
+
}
|
1349 |
+
@media (min-width: 960px) {
|
1350 |
+
.md\:uil-gcstart-2 {
|
1351 |
+
grid-column-start: 2;
|
1352 |
+
}
|
1353 |
+
}
|
1354 |
+
@media (min-width: 960px) {
|
1355 |
+
.md\:uil-gcend-3 {
|
1356 |
+
grid-column-end: 3;
|
1357 |
+
}
|
1358 |
+
}
|
1359 |
+
@media (min-width: 960px) {
|
1360 |
+
.md\:uil-grstart-1 {
|
1361 |
+
grid-row-start: 1;
|
1362 |
+
}
|
1363 |
+
}
|
1364 |
+
@media (min-width: 960px) {
|
1365 |
+
.md\:uil-grstart-2 {
|
1366 |
+
grid-row-start: 2;
|
1367 |
+
}
|
1368 |
+
}
|
1369 |
+
@media (min-width: 960px) {
|
1370 |
+
.md\:uil-grend-3 {
|
1371 |
+
grid-row-end: 3;
|
1372 |
+
}
|
1373 |
+
}
|
1374 |
+
@media (min-width: 960px) {
|
1375 |
+
.md\:uil-grend-4 {
|
1376 |
+
grid-row-end: 4;
|
1377 |
+
}
|
1378 |
+
}
|
1379 |
+
.uil-g-2 {
|
1380 |
+
grid-template-columns: repeat(2, 1fr);
|
1381 |
+
}
|
1382 |
+
@media (min-width: 768px) {
|
1383 |
+
.sm\:uil-g-2 {
|
1384 |
+
grid-template-columns: repeat(2, 1fr);
|
1385 |
+
}
|
1386 |
+
}
|
1387 |
+
@media (min-width: 768px) {
|
1388 |
+
.sm\:uil-g-3 {
|
1389 |
+
grid-template-columns: repeat(3, 1fr);
|
1390 |
+
}
|
1391 |
+
}
|
1392 |
+
@media (min-width: 768px) {
|
1393 |
+
.sm\:uil-g-4 {
|
1394 |
+
grid-template-columns: repeat(4, 1fr);
|
1395 |
+
}
|
1396 |
+
}
|
1397 |
+
@media (min-width: 768px) {
|
1398 |
+
.sm\:uil-g-5 {
|
1399 |
+
grid-template-columns: repeat(5, 1fr);
|
1400 |
+
}
|
1401 |
+
}
|
1402 |
+
@media (min-width: 768px) {
|
1403 |
+
.sm\:uil-g-6 {
|
1404 |
+
grid-template-columns: repeat(6, 1fr);
|
1405 |
+
}
|
1406 |
+
}
|
1407 |
+
@media (min-width: 960px) {
|
1408 |
+
.md\:uil-g-2 {
|
1409 |
+
grid-template-columns: repeat(2, 1fr);
|
1410 |
+
}
|
1411 |
+
}
|
1412 |
+
@media (min-width: 960px) {
|
1413 |
+
.md\:uil-g-3 {
|
1414 |
+
grid-template-columns: repeat(3, 1fr);
|
1415 |
+
}
|
1416 |
+
}
|
1417 |
+
@media (min-width: 960px) {
|
1418 |
+
.md\:uil-g-4 {
|
1419 |
+
grid-template-columns: repeat(4, 1fr);
|
1420 |
+
}
|
1421 |
+
}
|
1422 |
+
@media (min-width: 960px) {
|
1423 |
+
.md\:uil-g-5 {
|
1424 |
+
grid-template-columns: repeat(5, 1fr);
|
1425 |
+
}
|
1426 |
+
}
|
1427 |
+
@media (min-width: 960px) {
|
1428 |
+
.md\:uil-g-6 {
|
1429 |
+
grid-template-columns: repeat(6, 1fr);
|
1430 |
+
}
|
1431 |
+
}
|
1432 |
+
.uil-ggap-24 {
|
1433 |
+
grid-gap: 24px;
|
1434 |
+
}
|
1435 |
+
.uil-ggap-48 {
|
1436 |
+
grid-gap: 48px;
|
1437 |
+
}
|
1438 |
+
@media (min-width: 1200px) {
|
1439 |
+
.lg\:uil-ggap-24 {
|
1440 |
+
grid-gap: 24px;
|
1441 |
+
}
|
1442 |
+
}
|
1443 |
+
@media (min-width: 1200px) {
|
1444 |
+
.lg\:uil-ggap-32 {
|
1445 |
+
grid-gap: 32px;
|
1446 |
+
}
|
1447 |
+
}
|
1448 |
+
@media (min-width: 1200px) {
|
1449 |
+
.lg\:uil-ggap-48 {
|
1450 |
+
grid-gap: 48px;
|
1451 |
+
}
|
1452 |
+
}
|
1453 |
+
@media (min-width: 1200px) {
|
1454 |
+
.lg\:uil-ggap-80 {
|
1455 |
+
grid-gap: 80px;
|
1456 |
+
}
|
1457 |
+
}
|
1458 |
+
.uil-gvgap-8 {
|
1459 |
+
grid-column-gap: 8px;
|
1460 |
+
}
|
1461 |
+
@media (min-width: 768px) {
|
1462 |
+
.sm\:uil-gvgap-48 {
|
1463 |
+
grid-column-gap: 48px;
|
1464 |
+
}
|
1465 |
+
}
|
1466 |
+
.uil-ghgap-48 {
|
1467 |
+
grid-row-gap: 48px;
|
1468 |
+
}
|
1469 |
+
.uil-obf-contain {
|
1470 |
+
-o-object-fit: contain;
|
1471 |
+
object-fit: contain;
|
1472 |
+
}
|
1473 |
+
.uil-obf-cover {
|
1474 |
+
-o-object-fit: cover;
|
1475 |
+
object-fit: cover;
|
1476 |
+
}
|
1477 |
+
.uil-obp-center {
|
1478 |
+
-o-object-position: center;
|
1479 |
+
object-position: center;
|
1480 |
+
}
|
1481 |
+
.uil-bot-0 {
|
1482 |
+
bottom: 0;
|
1483 |
+
}
|
1484 |
+
.uil-bot-70 {
|
1485 |
+
bottom: 70px;
|
1486 |
+
}
|
1487 |
+
@media (min-width: 960px) {
|
1488 |
+
.md\:uil-bot-0 {
|
1489 |
+
bottom: 0;
|
1490 |
+
}
|
1491 |
+
}
|
1492 |
+
@media (min-width: 960px) {
|
1493 |
+
.md\:uil-fl-right {
|
1494 |
+
float: right;
|
1495 |
+
}
|
1496 |
+
}
|
1497 |
+
.uil-left-0 {
|
1498 |
+
left: 0;
|
1499 |
+
}
|
1500 |
+
.uil-left-50p {
|
1501 |
+
left: 50%;
|
1502 |
+
}
|
1503 |
+
@media (min-width: 960px) {
|
1504 |
+
.md\:uil-left-0 {
|
1505 |
+
left: 0;
|
1506 |
+
}
|
1507 |
+
}
|
1508 |
+
@media (min-width: 960px) {
|
1509 |
+
.md\:uil-left-50p {
|
1510 |
+
left: 50%;
|
1511 |
+
}
|
1512 |
+
}
|
1513 |
+
.uil-pos-relative {
|
1514 |
+
position: relative;
|
1515 |
+
}
|
1516 |
+
.uil-pos-absolute {
|
1517 |
+
position: absolute;
|
1518 |
+
}
|
1519 |
+
.uil-pos-fixed {
|
1520 |
+
position: fixed;
|
1521 |
+
}
|
1522 |
+
.uil-pos-sticky {
|
1523 |
+
position: sticky;
|
1524 |
+
}
|
1525 |
+
@media (min-width: 768px) {
|
1526 |
+
.sm\:uil-pos-absolute {
|
1527 |
+
position: absolute;
|
1528 |
+
}
|
1529 |
+
}
|
1530 |
+
@media (min-width: 960px) {
|
1531 |
+
.md\:uil-pos-relative {
|
1532 |
+
position: relative;
|
1533 |
+
}
|
1534 |
+
}
|
1535 |
+
@media (min-width: 960px) {
|
1536 |
+
.md\:uil-pos-absolute {
|
1537 |
+
position: absolute;
|
1538 |
+
}
|
1539 |
+
}
|
1540 |
+
@media (min-width: 960px) {
|
1541 |
+
.md\:uil-pos-fixed {
|
1542 |
+
position: fixed;
|
1543 |
+
}
|
1544 |
+
}
|
1545 |
+
@media (min-width: 960px) {
|
1546 |
+
.md\:uil-pos-sticky {
|
1547 |
+
position: sticky;
|
1548 |
+
}
|
1549 |
+
}
|
1550 |
+
.uil-right-0 {
|
1551 |
+
right: 0;
|
1552 |
+
}
|
1553 |
+
@media (min-width: 960px) {
|
1554 |
+
.md\:uil-right-0 {
|
1555 |
+
right: 0;
|
1556 |
+
}
|
1557 |
+
}
|
1558 |
+
@media (min-width: 960px) {
|
1559 |
+
.md\:uil-right-50p {
|
1560 |
+
right: 50%;
|
1561 |
+
}
|
1562 |
+
}
|
1563 |
+
.uil-top-0 {
|
1564 |
+
top: 0;
|
1565 |
+
}
|
1566 |
+
.uil-top-32 {
|
1567 |
+
top: 32px;
|
1568 |
+
}
|
1569 |
+
.uil-top-50p {
|
1570 |
+
top: 50%;
|
1571 |
+
}
|
1572 |
+
@media (min-width: 768px) {
|
1573 |
+
.sm\:uil-top-0 {
|
1574 |
+
top: 0;
|
1575 |
+
}
|
1576 |
+
}
|
1577 |
+
@media (min-width: 960px) {
|
1578 |
+
.md\:uil-top-0 {
|
1579 |
+
top: 0;
|
1580 |
+
}
|
1581 |
+
}
|
1582 |
+
@media (min-width: 960px) {
|
1583 |
+
.md\:uil-top-50p {
|
1584 |
+
top: 50%;
|
1585 |
+
}
|
1586 |
+
}
|
1587 |
+
.uil-va-middle {
|
1588 |
+
vertical-align: middle;
|
1589 |
+
}
|
1590 |
+
.uil-z-1 {
|
1591 |
+
z-index: 1;
|
1592 |
+
}
|
1593 |
+
.uil-z-2 {
|
1594 |
+
z-index: 2;
|
1595 |
+
}
|
1596 |
+
.uil-z-3 {
|
1597 |
+
z-index: 3;
|
1598 |
+
}
|
1599 |
+
.uil-z-4 {
|
1600 |
+
z-index: 4;
|
1601 |
+
}
|
1602 |
+
.uil-z-5 {
|
1603 |
+
z-index: 5;
|
1604 |
+
}
|
1605 |
+
.uil-z-max {
|
1606 |
+
z-index: 100;
|
1607 |
+
}
|
1608 |
+
@media (min-width: 960px) {
|
1609 |
+
.md\:uil-z-5 {
|
1610 |
+
z-index: 5;
|
1611 |
+
}
|
1612 |
+
}
|
1613 |
+
@media (min-width: 960px) {
|
1614 |
+
.md\:uil-z-max {
|
1615 |
+
z-index: 100;
|
1616 |
+
}
|
1617 |
+
}
|
1618 |
+
.uil-app-none {
|
1619 |
+
-webkit-appearance: none;
|
1620 |
+
-moz-appearance: none;
|
1621 |
+
appearance: none;
|
1622 |
+
}
|
1623 |
+
.uil-bxs-default {
|
1624 |
+
box-shadow: 0 5px 15px 0 rgba(37, 44, 97, 0.15),
|
1625 |
+
0 2px 4px 0 rgba(93, 100, 148, 0.2);
|
1626 |
+
}
|
1627 |
+
.uil-bxs-large {
|
1628 |
+
box-shadow: 0 24px 41px 0 rgba(37, 44, 97, 0.13);
|
1629 |
+
}
|
1630 |
+
.uil-bxs-none {
|
1631 |
+
box-shadow: none;
|
1632 |
+
}
|
1633 |
+
@media (min-width: 960px) {
|
1634 |
+
.md\:uil-bxs-default {
|
1635 |
+
box-shadow: 0 5px 15px 0 rgba(37, 44, 97, 0.15),
|
1636 |
+
0 2px 4px 0 rgba(93, 100, 148, 0.2);
|
1637 |
+
}
|
1638 |
+
}
|
1639 |
+
.uil-cursor-auto {
|
1640 |
+
cursor: auto;
|
1641 |
+
}
|
1642 |
+
.uil-cursor-pointer {
|
1643 |
+
cursor: pointer;
|
1644 |
+
}
|
1645 |
+
.uil-cursor-not-allowed {
|
1646 |
+
cursor: not-allowed;
|
1647 |
+
}
|
1648 |
+
.uil-op-0 {
|
1649 |
+
opacity: 0;
|
1650 |
+
}
|
1651 |
+
.uil-op-50p {
|
1652 |
+
opacity: 0.5;
|
1653 |
+
}
|
1654 |
+
.uil-op-40p {
|
1655 |
+
opacity: 0.4;
|
1656 |
+
}
|
1657 |
+
.uil-op-75p {
|
1658 |
+
opacity: 0.75;
|
1659 |
+
}
|
1660 |
+
.uil-op-100p {
|
1661 |
+
opacity: 1;
|
1662 |
+
}
|
1663 |
+
@media (min-width: 960px) {
|
1664 |
+
.md\:uil-op-0 {
|
1665 |
+
opacity: 0;
|
1666 |
+
}
|
1667 |
+
}
|
1668 |
+
@media (min-width: 960px) {
|
1669 |
+
.md\:uil-op-25p {
|
1670 |
+
opacity: 0.25;
|
1671 |
+
}
|
1672 |
+
}
|
1673 |
+
@media (min-width: 960px) {
|
1674 |
+
.md\:uil-op-100p {
|
1675 |
+
opacity: 1;
|
1676 |
+
}
|
1677 |
+
}
|
1678 |
+
.uil-pe-auto {
|
1679 |
+
pointer-events: auto;
|
1680 |
+
}
|
1681 |
+
.uil-pe-none {
|
1682 |
+
pointer-events: none;
|
1683 |
+
}
|
1684 |
+
@media (min-width: 960px) {
|
1685 |
+
.md\:uil-pe-none {
|
1686 |
+
pointer-events: none;
|
1687 |
+
}
|
1688 |
+
}
|
1689 |
+
.uil-us-none {
|
1690 |
+
-webkit-user-select: none;
|
1691 |
+
-moz-user-select: none;
|
1692 |
+
-ms-user-select: none;
|
1693 |
+
user-select: none;
|
1694 |
+
}
|
1695 |
+
.uil-h-0 {
|
1696 |
+
height: 0;
|
1697 |
+
}
|
1698 |
+
.uil-h-10 {
|
1699 |
+
height: 10px;
|
1700 |
+
}
|
1701 |
+
.uil-h-14 {
|
1702 |
+
height: 14px;
|
1703 |
+
}
|
1704 |
+
.uil-h-16 {
|
1705 |
+
height: 16px;
|
1706 |
+
}
|
1707 |
+
.uil-h-18 {
|
1708 |
+
height: 18px;
|
1709 |
+
}
|
1710 |
+
.uil-h-20 {
|
1711 |
+
height: 20px;
|
1712 |
+
}
|
1713 |
+
.uil-h-24 {
|
1714 |
+
height: 24px;
|
1715 |
+
}
|
1716 |
+
.uil-h-25 {
|
1717 |
+
height: 25px;
|
1718 |
+
}
|
1719 |
+
.uil-h-30 {
|
1720 |
+
height: 30px;
|
1721 |
+
}
|
1722 |
+
.uil-h-40 {
|
1723 |
+
height: 40px;
|
1724 |
+
}
|
1725 |
+
.uil-h-50 {
|
1726 |
+
height: 50px;
|
1727 |
+
}
|
1728 |
+
.uil-h-60 {
|
1729 |
+
height: 60px;
|
1730 |
+
}
|
1731 |
+
.uil-h-70 {
|
1732 |
+
height: 70px;
|
1733 |
+
}
|
1734 |
+
.uil-h-80 {
|
1735 |
+
height: 80px;
|
1736 |
+
}
|
1737 |
+
.uil-h-200 {
|
1738 |
+
height: 200px;
|
1739 |
+
}
|
1740 |
+
.uil-h-10p {
|
1741 |
+
height: 10%;
|
1742 |
+
}
|
1743 |
+
.uil-h-20p {
|
1744 |
+
height: 20%;
|
1745 |
+
}
|
1746 |
+
.uil-h-25p {
|
1747 |
+
height: 25%;
|
1748 |
+
}
|
1749 |
+
.uil-h-30p {
|
1750 |
+
height: 30%;
|
1751 |
+
}
|
1752 |
+
.uil-h-40p {
|
1753 |
+
height: 40%;
|
1754 |
+
}
|
1755 |
+
.uil-h-50p {
|
1756 |
+
height: 50%;
|
1757 |
+
}
|
1758 |
+
.uil-h-60p {
|
1759 |
+
height: 60%;
|
1760 |
+
}
|
1761 |
+
.uil-h-70p {
|
1762 |
+
height: 70%;
|
1763 |
+
}
|
1764 |
+
.uil-h-80p {
|
1765 |
+
height: 80%;
|
1766 |
+
}
|
1767 |
+
.uil-h-90p {
|
1768 |
+
height: 90%;
|
1769 |
+
}
|
1770 |
+
.uil-h-100p {
|
1771 |
+
height: 100%;
|
1772 |
+
}
|
1773 |
+
.uil-h-100vh {
|
1774 |
+
height: 100vh;
|
1775 |
+
}
|
1776 |
+
.uil-h-auto {
|
1777 |
+
height: auto;
|
1778 |
+
}
|
1779 |
+
@media (min-width: 960px) {
|
1780 |
+
.md\:uil-h-10 {
|
1781 |
+
height: 10px;
|
1782 |
+
}
|
1783 |
+
}
|
1784 |
+
@media (min-width: 960px) {
|
1785 |
+
.md\:uil-h-30 {
|
1786 |
+
height: 30px;
|
1787 |
+
}
|
1788 |
+
}
|
1789 |
+
@media (min-width: 960px) {
|
1790 |
+
.md\:uil-h-60p {
|
1791 |
+
height: 60%;
|
1792 |
+
}
|
1793 |
+
}
|
1794 |
+
@media (min-width: 960px) {
|
1795 |
+
.md\:uil-h-100p {
|
1796 |
+
height: 100%;
|
1797 |
+
}
|
1798 |
+
}
|
1799 |
+
@media (min-width: 960px) {
|
1800 |
+
.md\:uil-h-100vh {
|
1801 |
+
height: 100vh;
|
1802 |
+
}
|
1803 |
+
}
|
1804 |
+
@media (min-width: 960px) {
|
1805 |
+
.md\:uil-h-auto {
|
1806 |
+
height: auto;
|
1807 |
+
}
|
1808 |
+
}
|
1809 |
+
@media (min-width: 1200px) {
|
1810 |
+
.lg\:uil-h-18 {
|
1811 |
+
height: 18px;
|
1812 |
+
}
|
1813 |
+
}
|
1814 |
+
@media (min-width: 1200px) {
|
1815 |
+
.lg\:uil-h-20 {
|
1816 |
+
height: 20px;
|
1817 |
+
}
|
1818 |
+
}
|
1819 |
+
@media (min-width: 1200px) {
|
1820 |
+
.lg\:uil-h-24 {
|
1821 |
+
height: 24px;
|
1822 |
+
}
|
1823 |
+
}
|
1824 |
+
@media (min-width: 1200px) {
|
1825 |
+
.lg\:uil-h-30 {
|
1826 |
+
height: 30px;
|
1827 |
+
}
|
1828 |
+
}
|
1829 |
+
@media (min-width: 1200px) {
|
1830 |
+
.lg\:uil-h-40 {
|
1831 |
+
height: 40px;
|
1832 |
+
}
|
1833 |
+
}
|
1834 |
+
@media (min-width: 1200px) {
|
1835 |
+
.lg\:uil-h-70 {
|
1836 |
+
height: 70px;
|
1837 |
+
}
|
1838 |
+
}
|
1839 |
+
@media (min-width: 1200px) {
|
1840 |
+
.lg\:uil-h-80 {
|
1841 |
+
height: 80px;
|
1842 |
+
}
|
1843 |
+
}
|
1844 |
+
@media (min-width: 1200px) {
|
1845 |
+
.lg\:uil-h-100 {
|
1846 |
+
height: 100px;
|
1847 |
+
}
|
1848 |
+
}
|
1849 |
+
@media (min-width: 1200px) {
|
1850 |
+
.lg\:uil-h-100p {
|
1851 |
+
height: 100%;
|
1852 |
+
}
|
1853 |
+
}
|
1854 |
+
.uil-mah-100p {
|
1855 |
+
max-height: 100%;
|
1856 |
+
}
|
1857 |
+
.uil-mah-100vh {
|
1858 |
+
max-height: 100vh;
|
1859 |
+
}
|
1860 |
+
@media (min-width: 960px) {
|
1861 |
+
.md\:uil-mah-100p {
|
1862 |
+
max-height: 100%;
|
1863 |
+
}
|
1864 |
+
}
|
1865 |
+
.uil-maw-500 {
|
1866 |
+
max-width: 500px;
|
1867 |
+
}
|
1868 |
+
.uil-maw-700 {
|
1869 |
+
max-width: 700px;
|
1870 |
+
}
|
1871 |
+
.uil-maw-800 {
|
1872 |
+
max-width: 800px;
|
1873 |
+
}
|
1874 |
+
.uil-maw-1200 {
|
1875 |
+
max-width: 1200px;
|
1876 |
+
}
|
1877 |
+
.uil-maw-1440 {
|
1878 |
+
max-width: 1440px;
|
1879 |
+
}
|
1880 |
+
.uil-maw-35ch {
|
1881 |
+
max-width: 35ch;
|
1882 |
+
}
|
1883 |
+
.uil-maw-100p {
|
1884 |
+
max-width: 100%;
|
1885 |
+
}
|
1886 |
+
@media (min-width: 960px) {
|
1887 |
+
.md\:uil-maw-600 {
|
1888 |
+
max-width: 600px;
|
1889 |
+
}
|
1890 |
+
}
|
1891 |
+
@media (min-width: 960px) {
|
1892 |
+
.md\:uil-maw-900 {
|
1893 |
+
max-width: 900px;
|
1894 |
+
}
|
1895 |
+
}
|
1896 |
+
@media (min-width: 960px) {
|
1897 |
+
.md\:uil-maw-1200 {
|
1898 |
+
max-width: 1200px;
|
1899 |
+
}
|
1900 |
+
}
|
1901 |
+
@media (min-width: 960px) {
|
1902 |
+
.md\:uil-maw-100p {
|
1903 |
+
max-width: 100%;
|
1904 |
+
}
|
1905 |
+
}
|
1906 |
+
@media (min-width: 1200px) {
|
1907 |
+
.lg\:uil-maw-1200 {
|
1908 |
+
max-width: 1200px;
|
1909 |
+
}
|
1910 |
+
}
|
1911 |
+
.uil-miw-200 {
|
1912 |
+
min-width: 200px;
|
1913 |
+
}
|
1914 |
+
@media (min-width: 960px) {
|
1915 |
+
.md\:uil-miw-300 {
|
1916 |
+
min-width: 300px;
|
1917 |
+
}
|
1918 |
+
}
|
1919 |
+
.uil-w-10 {
|
1920 |
+
width: 10px;
|
1921 |
+
}
|
1922 |
+
.uil-w-14 {
|
1923 |
+
width: 14px;
|
1924 |
+
}
|
1925 |
+
.uil-w-16 {
|
1926 |
+
width: 16px;
|
1927 |
+
}
|
1928 |
+
.uil-w-18 {
|
1929 |
+
width: 18px;
|
1930 |
+
}
|
1931 |
+
.uil-w-20 {
|
1932 |
+
width: 20px;
|
1933 |
+
}
|
1934 |
+
.uil-w-25 {
|
1935 |
+
width: 25px;
|
1936 |
+
}
|
1937 |
+
.uil-w-30 {
|
1938 |
+
width: 30px;
|
1939 |
+
}
|
1940 |
+
.uil-w-40 {
|
1941 |
+
width: 40px;
|
1942 |
+
}
|
1943 |
+
.uil-w-50 {
|
1944 |
+
width: 50px;
|
1945 |
+
}
|
1946 |
+
.uil-w-60 {
|
1947 |
+
width: 60px;
|
1948 |
+
}
|
1949 |
+
.uil-w-100 {
|
1950 |
+
width: 100px;
|
1951 |
+
}
|
1952 |
+
.uil-w-200 {
|
1953 |
+
width: 200px;
|
1954 |
+
}
|
1955 |
+
.uil-w-50p {
|
1956 |
+
width: 50%;
|
1957 |
+
}
|
1958 |
+
.uil-w-70p {
|
1959 |
+
width: 70%;
|
1960 |
+
}
|
1961 |
+
.uil-w-80p {
|
1962 |
+
width: 80%;
|
1963 |
+
}
|
1964 |
+
.uil-w-100p {
|
1965 |
+
width: 100%;
|
1966 |
+
}
|
1967 |
+
.uil-w-auto {
|
1968 |
+
width: auto;
|
1969 |
+
}
|
1970 |
+
@media (min-width: 500px) {
|
1971 |
+
.xs\:uil-w-60p {
|
1972 |
+
width: 60%;
|
1973 |
+
}
|
1974 |
+
}
|
1975 |
+
@media (min-width: 500px) {
|
1976 |
+
.xs\:uil-w-70p {
|
1977 |
+
width: 70%;
|
1978 |
+
}
|
1979 |
+
}
|
1980 |
+
@media (min-width: 960px) {
|
1981 |
+
.md\:uil-w-10 {
|
1982 |
+
width: 10px;
|
1983 |
+
}
|
1984 |
+
}
|
1985 |
+
@media (min-width: 960px) {
|
1986 |
+
.md\:uil-w-30 {
|
1987 |
+
width: 30px;
|
1988 |
+
}
|
1989 |
+
}
|
1990 |
+
@media (min-width: 960px) {
|
1991 |
+
.md\:uil-w-400 {
|
1992 |
+
width: 400px;
|
1993 |
+
}
|
1994 |
+
}
|
1995 |
+
@media (min-width: 960px) {
|
1996 |
+
.md\:uil-w-40p {
|
1997 |
+
width: 40%;
|
1998 |
+
}
|
1999 |
+
}
|
2000 |
+
@media (min-width: 960px) {
|
2001 |
+
.md\:uil-w-50p {
|
2002 |
+
width: 50%;
|
2003 |
+
}
|
2004 |
+
}
|
2005 |
+
@media (min-width: 960px) {
|
2006 |
+
.md\:uil-w-60p {
|
2007 |
+
width: 60%;
|
2008 |
+
}
|
2009 |
+
}
|
2010 |
+
@media (min-width: 960px) {
|
2011 |
+
.md\:uil-w-70p {
|
2012 |
+
width: 70%;
|
2013 |
+
}
|
2014 |
+
}
|
2015 |
+
@media (min-width: 960px) {
|
2016 |
+
.md\:uil-w-100p {
|
2017 |
+
width: 100%;
|
2018 |
+
}
|
2019 |
+
}
|
2020 |
+
@media (min-width: 960px) {
|
2021 |
+
.md\:uil-w-auto {
|
2022 |
+
width: auto;
|
2023 |
+
}
|
2024 |
+
}
|
2025 |
+
@media (min-width: 1200px) {
|
2026 |
+
.lg\:uil-w-18 {
|
2027 |
+
width: 18px;
|
2028 |
+
}
|
2029 |
+
}
|
2030 |
+
@media (min-width: 1200px) {
|
2031 |
+
.lg\:uil-w-20 {
|
2032 |
+
width: 20px;
|
2033 |
+
}
|
2034 |
+
}
|
2035 |
+
@media (min-width: 1200px) {
|
2036 |
+
.lg\:uil-w-24 {
|
2037 |
+
width: 24px;
|
2038 |
+
}
|
2039 |
+
}
|
2040 |
+
@media (min-width: 1200px) {
|
2041 |
+
.lg\:uil-w-30 {
|
2042 |
+
width: 30px;
|
2043 |
+
}
|
2044 |
+
}
|
2045 |
+
@media (min-width: 1200px) {
|
2046 |
+
.lg\:uil-w-40 {
|
2047 |
+
width: 40px;
|
2048 |
+
}
|
2049 |
+
}
|
2050 |
+
@media (min-width: 1200px) {
|
2051 |
+
.lg\:uil-w-50 {
|
2052 |
+
width: 50px;
|
2053 |
+
}
|
2054 |
+
}
|
2055 |
+
@media (min-width: 1200px) {
|
2056 |
+
.lg\:uil-w-80 {
|
2057 |
+
width: 80px;
|
2058 |
+
}
|
2059 |
+
}
|
2060 |
+
@media (min-width: 1200px) {
|
2061 |
+
.lg\:uil-w-200 {
|
2062 |
+
width: 200px;
|
2063 |
+
}
|
2064 |
+
}
|
2065 |
+
@media (min-width: 1200px) {
|
2066 |
+
.lg\:uil-w-50p {
|
2067 |
+
width: 50%;
|
2068 |
+
}
|
2069 |
+
}
|
2070 |
+
@media (min-width: 1200px) {
|
2071 |
+
.lg\:uil-w-70p {
|
2072 |
+
width: 70%;
|
2073 |
+
}
|
2074 |
+
}
|
2075 |
+
@media (min-width: 1200px) {
|
2076 |
+
.lg\:uil-w-80p {
|
2077 |
+
width: 80%;
|
2078 |
+
}
|
2079 |
+
}
|
2080 |
+
@media (min-width: 1200px) {
|
2081 |
+
.lg\:uil-w-90p {
|
2082 |
+
width: 90%;
|
2083 |
+
}
|
2084 |
+
}
|
2085 |
+
@media (min-width: 1200px) {
|
2086 |
+
.lg\:uil-w-100p {
|
2087 |
+
width: 100%;
|
2088 |
+
}
|
2089 |
+
}
|
2090 |
+
.uil-ff-hind {
|
2091 |
+
font-family: Hind, Arial, sans-serif;
|
2092 |
+
}
|
2093 |
+
.uil-ff-poppins {
|
2094 |
+
font-family: Poppins, Arial, sans-serif;
|
2095 |
+
}
|
2096 |
+
.uil-ff-mono {
|
2097 |
+
font-family: SFMono-Regular, Consolas, Andale Mono WT, Andale Mono,
|
2098 |
+
Lucida Console, Lucida Sans Typewriter, DejaVu Sans Mono,
|
2099 |
+
Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Monaco,
|
2100 |
+
Courier New, Courier, monospace;
|
2101 |
+
}
|
2102 |
+
@media (min-width: 1200px) {
|
2103 |
+
.lg\:uil-ff-hind {
|
2104 |
+
font-family: Hind, Arial, sans-serif;
|
2105 |
+
}
|
2106 |
+
}
|
2107 |
+
.uil-fsz-10 {
|
2108 |
+
font-size: 10px;
|
2109 |
+
}
|
2110 |
+
.uil-fsz-11 {
|
2111 |
+
font-size: 11px;
|
2112 |
+
}
|
2113 |
+
.uil-fsz-12 {
|
2114 |
+
font-size: 12px;
|
2115 |
+
}
|
2116 |
+
.uil-fsz-14 {
|
2117 |
+
font-size: 14px;
|
2118 |
+
}
|
2119 |
+
.uil-fsz-16 {
|
2120 |
+
font-size: 16px;
|
2121 |
+
}
|
2122 |
+
.uil-fsz-18 {
|
2123 |
+
font-size: 18px;
|
2124 |
+
}
|
2125 |
+
.uil-fsz-24 {
|
2126 |
+
font-size: 24px;
|
2127 |
+
}
|
2128 |
+
.uil-fsz-36 {
|
2129 |
+
font-size: 36px;
|
2130 |
+
}
|
2131 |
+
@media (min-width: 960px) {
|
2132 |
+
.md\:uil-fsz-16 {
|
2133 |
+
font-size: 16px;
|
2134 |
+
}
|
2135 |
+
}
|
2136 |
+
@media (min-width: 1200px) {
|
2137 |
+
.lg\:uil-fsz-12 {
|
2138 |
+
font-size: 12px;
|
2139 |
+
}
|
2140 |
+
}
|
2141 |
+
@media (min-width: 1200px) {
|
2142 |
+
.lg\:uil-fsz-14 {
|
2143 |
+
font-size: 14px;
|
2144 |
+
}
|
2145 |
+
}
|
2146 |
+
@media (min-width: 1200px) {
|
2147 |
+
.lg\:uil-fsz-16 {
|
2148 |
+
font-size: 16px;
|
2149 |
+
}
|
2150 |
+
}
|
2151 |
+
@media (min-width: 1200px) {
|
2152 |
+
.lg\:uil-fsz-18 {
|
2153 |
+
font-size: 18px;
|
2154 |
+
}
|
2155 |
+
}
|
2156 |
+
@media (min-width: 1200px) {
|
2157 |
+
.lg\:uil-fsz-24 {
|
2158 |
+
font-size: 24px;
|
2159 |
+
}
|
2160 |
+
}
|
2161 |
+
@media (min-width: 1200px) {
|
2162 |
+
.lg\:uil-fsz-36 {
|
2163 |
+
font-size: 36px;
|
2164 |
+
}
|
2165 |
+
}
|
2166 |
+
@media (min-width: 1200px) {
|
2167 |
+
.lg\:uil-fsz-56 {
|
2168 |
+
font-size: 56px;
|
2169 |
+
}
|
2170 |
+
}
|
2171 |
+
.uil-fst-normal {
|
2172 |
+
font-style: normal;
|
2173 |
+
}
|
2174 |
+
.uil-fw-light {
|
2175 |
+
font-weight: 300;
|
2176 |
+
}
|
2177 |
+
.uil-fw-normal {
|
2178 |
+
font-weight: 400;
|
2179 |
+
}
|
2180 |
+
.uil-fw-semibold {
|
2181 |
+
font-weight: 600;
|
2182 |
+
}
|
2183 |
+
.uil-fw-bold {
|
2184 |
+
font-weight: 700;
|
2185 |
+
}
|
2186 |
+
.uil-lsp-small {
|
2187 |
+
letter-spacing: -1px;
|
2188 |
+
}
|
2189 |
+
.uil-lsp-big {
|
2190 |
+
letter-spacing: 1.5px;
|
2191 |
+
}
|
2192 |
+
.uil-lsp-normal {
|
2193 |
+
letter-spacing: normal;
|
2194 |
+
}
|
2195 |
+
@media (min-width: 1200px) {
|
2196 |
+
.lg\:uil-lsp-medium {
|
2197 |
+
letter-spacing: 0.7px;
|
2198 |
+
}
|
2199 |
+
}
|
2200 |
+
.uil-lh-small {
|
2201 |
+
line-height: 1;
|
2202 |
+
}
|
2203 |
+
.uil-lh-big {
|
2204 |
+
line-height: 1.33;
|
2205 |
+
}
|
2206 |
+
.uil-lh-bigger {
|
2207 |
+
line-height: 1.78;
|
2208 |
+
}
|
2209 |
+
.uil-lis-none {
|
2210 |
+
list-style: none;
|
2211 |
+
}
|
2212 |
+
.uil-ta-left {
|
2213 |
+
text-align: left;
|
2214 |
+
}
|
2215 |
+
.uil-ta-center {
|
2216 |
+
text-align: center;
|
2217 |
+
}
|
2218 |
+
.uil-ta-right {
|
2219 |
+
text-align: right;
|
2220 |
+
}
|
2221 |
+
@media (min-width: 768px) {
|
2222 |
+
.sm\:uil-ta-left {
|
2223 |
+
text-align: left;
|
2224 |
+
}
|
2225 |
+
}
|
2226 |
+
@media (min-width: 960px) {
|
2227 |
+
.md\:uil-ta-left {
|
2228 |
+
text-align: left;
|
2229 |
+
}
|
2230 |
+
}
|
2231 |
+
@media (min-width: 960px) {
|
2232 |
+
.md\:uil-ta-center {
|
2233 |
+
text-align: center;
|
2234 |
+
}
|
2235 |
+
}
|
2236 |
+
@media (min-width: 960px) {
|
2237 |
+
.md\:uil-ta-right {
|
2238 |
+
text-align: right;
|
2239 |
+
}
|
2240 |
+
}
|
2241 |
+
.hover\:uil-td-none:focus,
|
2242 |
+
.hover\:uil-td-none:hover,
|
2243 |
+
.uil-td-none {
|
2244 |
+
text-decoration: none;
|
2245 |
+
}
|
2246 |
+
@media (min-width: 960px) {
|
2247 |
+
.md\:uil-td-none {
|
2248 |
+
text-decoration: none;
|
2249 |
+
}
|
2250 |
+
}
|
2251 |
+
.uil-to-ellipsis {
|
2252 |
+
text-overflow: ellipsis;
|
2253 |
+
}
|
2254 |
+
@media (min-width: 1200px) {
|
2255 |
+
.lg\:uil-to-ellipsis {
|
2256 |
+
text-overflow: ellipsis;
|
2257 |
+
}
|
2258 |
+
}
|
2259 |
+
.uil-tt-upper {
|
2260 |
+
text-transform: uppercase;
|
2261 |
+
}
|
2262 |
+
.uil-tt-lower {
|
2263 |
+
text-transform: lowercase;
|
2264 |
+
}
|
2265 |
+
.uil-ws-nowrap {
|
2266 |
+
white-space: nowrap;
|
2267 |
+
}
|
2268 |
+
@media (min-width: 1200px) {
|
2269 |
+
.lg\:uil-ws-nowrap {
|
2270 |
+
white-space: nowrap;
|
2271 |
+
}
|
2272 |
+
}
|
2273 |
+
.uil-wb-break {
|
2274 |
+
word-break: break-word;
|
2275 |
+
}
|
docs/src/pages/index.js
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import Layout from '@theme/Layout';
|
2 |
+
import React from 'react';
|
3 |
+
|
4 |
+
import Home from '../components/Home';
|
5 |
+
|
6 |
+
function HomePage() {
|
7 |
+
return (
|
8 |
+
<Layout
|
9 |
+
title="ShortGPT: Automate Content Creation with AI"
|
10 |
+
description="Automating video and short content creation with AI "
|
11 |
+
>
|
12 |
+
<Home />
|
13 |
+
</Layout>
|
14 |
+
);
|
15 |
+
}
|
16 |
+
|
17 |
+
export default HomePage;
|
docs/static/img/assets/configuration.svg
ADDED
docs/static/img/assets/implementation.svg
ADDED
docs/static/img/assets/scraping.svg
ADDED
docs/static/img/favicon.ico
ADDED
docs/static/img/logo.png
ADDED
docs/tailwind.config.js
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
module.exports = {
|
2 |
+
purge: ['./src/**/*.html', './src/**/*.js', './src/**/*.tsx'],
|
3 |
+
corePlugins: { preflight: false, container: false },
|
4 |
+
important: '#tailwind',
|
5 |
+
theme: {
|
6 |
+
extend: {
|
7 |
+
maxWidth: {
|
8 |
+
xxs: '18rem',
|
9 |
+
},
|
10 |
+
},
|
11 |
+
},
|
12 |
+
};
|
docs/yarn.lock
ADDED
The diff for this file is too large to render.
See raw diff
|
|
gui/__pycache__/content_automation_ui.cpython-39.pyc.1849492106672
ADDED
File without changes
|