Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
164 commits
Select commit Hold shift + click to select a range
4348c54
Bump elevenlabs from 1.3.0 to 1.3.1
dependabot[bot] Jun 18, 2024
fc9a166
CHORE: syntactical changes + some pythonic changes and future improve…
JasonLovesDoggo Jun 19, 2024
9ed8c87
fixup: Format Python code with Black
github-actions[bot] Jun 19, 2024
4d1cf64
Merge pull request #2071 from elebumm/dependabot/pip/develop/elevenla…
JasonLovesDoggo Jun 19, 2024
0f98d42
Update elevenlabs.py
RequieMa Jun 26, 2024
484e0d7
Add a dummy random_voice variable function run() in GTTS.py
RequieMa Jun 26, 2024
def55c1
Bump pillow from 10.3.0 to 10.4.0
dependabot[bot] Jul 1, 2024
36c3c23
Bump transformers from 4.41.2 to 4.42.3
dependabot[bot] Jul 1, 2024
e5ae5f6
Bump yt-dlp from 2024.5.27 to 2024.7.2
dependabot[bot] Jul 3, 2024
41492ea
Merge pull request #2086 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Jul 4, 2024
90d2b32
Merge pull request #2083 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Jul 4, 2024
16418f4
Merge pull request #2082 from elebumm/dependabot/pip/develop/pillow-1…
JasonLovesDoggo Jul 4, 2024
4a1aec6
Merge pull request #2078 from RequieMa/patch-1
JasonLovesDoggo Jul 4, 2024
02e55db
Bump tomlkit from 0.12.5 to 0.13.0
dependabot[bot] Jul 10, 2024
487c759
Bump transformers from 4.42.3 to 4.42.4
dependabot[bot] Jul 12, 2024
9a0207b
Merge pull request #2091 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Jul 13, 2024
109d16e
Bump elevenlabs from 1.3.1 to 1.4.1
dependabot[bot] Jul 13, 2024
6f4fdb5
Merge pull request #2090 from elebumm/dependabot/pip/develop/elevenla…
JasonLovesDoggo Jul 13, 2024
90ca714
Merge pull request #2089 from elebumm/dependabot/pip/develop/tomlkit-…
JasonLovesDoggo Jul 13, 2024
7184da6
Bump yt-dlp from 2024.7.2 to 2024.7.9
dependabot[bot] Jul 13, 2024
9c35b3a
Merge pull request #2088 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Jul 13, 2024
8872b37
updated readme for improved installation
praffq Jul 14, 2024
aecb764
updated to ./venv
praffq Jul 14, 2024
40d7a1c
Merge pull request #2093 from DraKen0009/Change-instructions-to-use-a…
JasonLovesDoggo Jul 15, 2024
72994d4
updated dockerignore for ignoring results folder
praffq Jul 15, 2024
a4837cc
Merge pull request #2094 from DraKen0009/Improve-.dockerignore-to-ign…
JasonLovesDoggo Jul 15, 2024
9cc022f
Bump elevenlabs from 1.4.1 to 1.5.0
dependabot[bot] Jul 19, 2024
6c1bf32
Bump gtts from 2.5.1 to 2.5.2
dependabot[bot] Jul 22, 2024
7a2d2c9
Bump transformers from 4.42.4 to 4.43.2
dependabot[bot] Jul 25, 2024
1fb640b
Merge pull request #2099 from elebumm/dependabot/pip/develop/gtts-2.5.2
JasonLovesDoggo Jul 26, 2024
f55ff95
Merge pull request #2097 from elebumm/dependabot/pip/develop/elevenla…
JasonLovesDoggo Jul 26, 2024
7f21502
Merge pull request #2104 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Jul 26, 2024
45960fc
Bump yt-dlp from 2024.7.9 to 2024.7.25
dependabot[bot] Jul 26, 2024
b8c94f0
Bump torch from 2.3.1 to 2.4.0
dependabot[bot] Jul 26, 2024
26d7627
Merge pull request #2103 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Jul 26, 2024
ea2ce55
Merge pull request #2105 from elebumm/dependabot/pip/develop/torch-2.4.0
JasonLovesDoggo Jul 26, 2024
25fcf2a
Bump elevenlabs from 1.5.0 to 1.7.0
dependabot[bot] Aug 13, 2024
ba2791a
Bump tomlkit from 0.13.0 to 0.13.2
dependabot[bot] Aug 14, 2024
1a3a861
Bump gtts from 2.5.2 to 2.5.3
dependabot[bot] Aug 14, 2024
8bbabcc
Update final_video.py
sanishan Aug 17, 2024
1eed899
Bump transformers from 4.43.2 to 4.44.2
dependabot[bot] Aug 23, 2024
29ea862
Bump pyttsx3 from 2.90 to 2.91
dependabot[bot] Aug 26, 2024
f8a1b18
Merge pull request #2128 from elebumm/dependabot/pip/develop/pyttsx3-…
JasonLovesDoggo Aug 28, 2024
2b51d0b
Merge pull request #2127 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Aug 28, 2024
6051e78
Merge pull request #2121 from elebumm/dependabot/pip/develop/gtts-2.5.3
JasonLovesDoggo Aug 28, 2024
c623b5d
Merge pull request #2120 from elebumm/dependabot/pip/develop/tomlkit-…
JasonLovesDoggo Aug 28, 2024
ef0a49f
Merge pull request #2118 from elebumm/dependabot/pip/develop/elevenla…
JasonLovesDoggo Aug 28, 2024
ff8409d
Bump rich from 13.7.1 to 13.8.0
dependabot[bot] Aug 29, 2024
9d8b58f
Bump torch from 2.4.0 to 2.4.1
dependabot[bot] Sep 5, 2024
f5fa6e8
Merge pull request #2136 from elebumm/dependabot/pip/develop/torch-2.4.1
JasonLovesDoggo Sep 8, 2024
cdb4ad1
Merge pull request #2132 from elebumm/dependabot/pip/develop/rich-13.8.0
JasonLovesDoggo Sep 8, 2024
d316f0f
Bump spacy from 3.7.5 to 3.7.6
dependabot[bot] Sep 8, 2024
ad30b4a
Merge pull request #2131 from elebumm/dependabot/pip/develop/spacy-3.7.6
JasonLovesDoggo Sep 8, 2024
72fdf72
Merge pull request #2123 from sanishan/patch-1
JasonLovesDoggo Sep 8, 2024
559bb41
fixup: Format Python code with Black
github-actions[bot] Sep 8, 2024
134ae65
Bump rich from 13.8.0 to 13.8.1
dependabot[bot] Sep 11, 2024
8be9378
Bump pyttsx3 from 2.91 to 2.97
dependabot[bot] Sep 16, 2024
df86bef
Bump elevenlabs from 1.7.0 to 1.8.1
dependabot[bot] Sep 16, 2024
9c12766
Merge pull request #2139 from elebumm/dependabot/pip/develop/rich-13.8.1
JasonLovesDoggo Sep 18, 2024
cb35c5c
Merge pull request #2143 from elebumm/dependabot/pip/develop/elevenla…
JasonLovesDoggo Sep 18, 2024
d73bd88
Merge pull request #2142 from elebumm/dependabot/pip/develop/pyttsx3-…
JasonLovesDoggo Sep 18, 2024
b25f424
Bump yt-dlp from 2024.7.25 to 2024.9.27
dependabot[bot] Sep 30, 2024
eb57004
Bump translators from 5.9.2 to 5.9.3
dependabot[bot] Sep 30, 2024
c276114
Merge pull request #2158 from elebumm/dependabot/pip/develop/translat…
JasonLovesDoggo Oct 4, 2024
d7fe430
Merge pull request #2157 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Oct 4, 2024
328692e
Bump pyttsx3 from 2.97 to 2.98
dependabot[bot] Oct 4, 2024
a1d4259
Bump rich from 13.8.1 to 13.9.1
dependabot[bot] Oct 4, 2024
d7b2a87
Merge pull request #2159 from elebumm/dependabot/pip/develop/rich-13.9.1
JasonLovesDoggo Oct 6, 2024
ed1c034
Merge pull request #2156 from elebumm/dependabot/pip/develop/pyttsx3-…
JasonLovesDoggo Oct 6, 2024
1289231
Bump rich from 13.9.1 to 13.9.2
dependabot[bot] Oct 7, 2024
7991d98
Bump yt-dlp from 2024.9.27 to 2024.10.7
dependabot[bot] Oct 8, 2024
e8772c8
Merge pull request #2165 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Oct 14, 2024
2efd617
Merge pull request #2162 from elebumm/dependabot/pip/develop/rich-13.9.2
JasonLovesDoggo Oct 14, 2024
f60b46c
Update Playwright version requirement, add support for python 3.12.X
emilienbev Nov 3, 2024
d483d85
Fixed GTTS argument error 'random_voice'
rodrigodasilv Nov 5, 2024
884fe1d
Bump transformers from 4.44.2 to 4.46.2
dependabot[bot] Nov 6, 2024
deb1c95
Merge pull request #2182 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Nov 13, 2024
a44f89b
Merge pull request #2181 from rodrigodasilv/develop-GTTS-fix
JasonLovesDoggo Nov 13, 2024
2e3d565
Bump gtts from 2.5.3 to 2.5.4
dependabot[bot] Nov 14, 2024
33bcf58
Bump flask from 3.0.3 to 3.1.0
dependabot[bot] Nov 14, 2024
9a3fc1f
Merge pull request #2190 from elebumm/dependabot/pip/develop/flask-3.1.0
JasonLovesDoggo Nov 14, 2024
f01cf97
Merge pull request #2189 from elebumm/dependabot/pip/develop/gtts-2.5.4
JasonLovesDoggo Nov 14, 2024
eae3d65
Bump praw from 7.7.1 to 7.8.1
dependabot[bot] Nov 14, 2024
b4a0a73
Merge pull request #2173 from elebumm/dependabot/pip/develop/praw-7.8.1
JasonLovesDoggo Nov 14, 2024
59a287d
Bump rich from 13.9.2 to 13.9.4
dependabot[bot] Nov 15, 2024
4161607
Merge branch 'develop' into master
emilienbev Nov 17, 2024
11dd254
Merge pull request #2180 from emilienbev/master
JasonLovesDoggo Nov 17, 2024
2b8c182
Merge pull request #2191 from elebumm/dependabot/pip/develop/rich-13.9.4
JasonLovesDoggo Nov 17, 2024
0caae78
Bump transformers from 4.46.2 to 4.46.3
dependabot[bot] Nov 19, 2024
55c411a
Merge pull request #2195 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Nov 20, 2024
3cf1a93
Bump yt-dlp from 2024.10.7 to 2024.12.13
dependabot[bot] Dec 13, 2024
45dda35
Bump spacy from 3.7.6 to 3.8.3
dependabot[bot] Dec 19, 2024
8a0e6b4
Merge pull request #2214 from elebumm/dependabot/pip/develop/spacy-3.8.3
JasonLovesDoggo Dec 23, 2024
ac7ecf0
Merge pull request #2209 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Dec 23, 2024
a7c6679
Bump transformers from 4.46.3 to 4.47.1
dependabot[bot] Dec 23, 2024
7f2f024
Bump yt-dlp from 2024.12.13 to 2024.12.23
dependabot[bot] Dec 24, 2024
61e4af3
Merge pull request #2218 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Dec 28, 2024
980b4be
Merge pull request #2212 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Dec 28, 2024
5b16489
Bump yt-dlp from 2024.12.23 to 2025.1.12
dependabot[bot] Jan 13, 2025
9515b07
Bump transformers from 4.47.1 to 4.48.0
dependabot[bot] Jan 13, 2025
15dccb5
Merge pull request #2230 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Jan 16, 2025
cdebc71
Merge pull request #2229 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Jan 16, 2025
4600936
Bump yt-dlp from 2025.1.12 to 2025.1.15
dependabot[bot] Jan 16, 2025
db2eef0
Merge pull request #2234 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Jan 18, 2025
20640fd
Add optional random_voice parameter to run method
tkhmielnitzk Jan 19, 2025
dc76ae6
Bump transformers from 4.48.0 to 4.48.1
dependabot[bot] Jan 21, 2025
6c55a73
Merge pull request #2237 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Jan 21, 2025
005cf37
Merge branch 'develop' into fix_tts_random_voice
JasonLovesDoggo Jan 21, 2025
4cb3949
Merge pull request #2235 from tkhmielnitzk/fix_tts_random_voice
JasonLovesDoggo Jan 21, 2025
a9fbb97
chore: update version
JasonLovesDoggo Jan 21, 2025
c3c17ad
Bump translators from 5.9.3 to 5.9.5
dependabot[bot] Jan 27, 2025
bc2137a
Bump yt-dlp from 2025.1.15 to 2025.1.26
dependabot[bot] Jan 27, 2025
e6147d0
Merge pull request #2243 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Jan 28, 2025
a83667d
Merge pull request #2242 from elebumm/dependabot/pip/develop/translat…
JasonLovesDoggo Jan 28, 2025
b573c50
chore: Set Python version to 3.10 and remove prawcore
JasonLovesDoggo Jan 29, 2025
392b8ae
fix(praw): Bypass reddit bot detection
JasonLovesDoggo Jan 29, 2025
5c72771
fixup: Format Python code with Black
github-actions[bot] Jan 29, 2025
9438141
feat: Update moviepy to 2.0 (develop)
JasonLovesDoggo Jan 29, 2025
7ebea11
fixup: Format Python code with Black
github-actions[bot] Jan 29, 2025
ed20928
chore: reformat
JasonLovesDoggo Jan 29, 2025
656b72f
Merge remote-tracking branch 'origin/develop' into develop
JasonLovesDoggo Jan 29, 2025
ccfb665
fixup: Format Python code with Black
github-actions[bot] Jan 29, 2025
4017f65
fix: Improve login error handling (develop)
JasonLovesDoggo Jan 29, 2025
0d601e4
Bump torch from 2.5.1 to 2.6.0
dependabot[bot] Jan 30, 2025
4f90028
Merge pull request #2245 from elebumm/dependabot/pip/develop/torch-2.6.0
JasonLovesDoggo Jan 30, 2025
b6ce1d4
Bump transformers from 4.48.1 to 4.48.2
dependabot[bot] Jan 31, 2025
e1ba6c4
Bump elevenlabs from 1.50.5 to 1.50.7
dependabot[bot] Feb 5, 2025
8fa1e20
Merge pull request #2248 from elebumm/dependabot/pip/develop/elevenla…
JasonLovesDoggo Feb 5, 2025
8eeef27
Merge pull request #2247 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Feb 5, 2025
5119576
Bump yt-dlp from 2025.1.26 to 2025.2.19
dependabot[bot] Feb 20, 2025
eceebcd
Merge pull request #2254 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Feb 20, 2025
dd53d28
Bump elevenlabs from 1.50.7 to 1.51.0
dependabot[bot] Feb 20, 2025
0bbaaeb
Bump transformers from 4.48.2 to 4.49.0
dependabot[bot] Feb 20, 2025
d3ffd18
Merge pull request #2250 from elebumm/dependabot/pip/develop/elevenla…
JasonLovesDoggo Feb 20, 2025
0f24c8b
Merge pull request #2253 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Feb 20, 2025
a06e522
Bump elevenlabs from 1.51.0 to 1.52.0
dependabot[bot] Feb 26, 2025
afc6125
Bump translators from 5.9.5 to 5.9.9
dependabot[bot] Mar 6, 2025
ef1a7ae
Merge pull request #2263 from elebumm/dependabot/pip/develop/translat…
JasonLovesDoggo Mar 7, 2025
caa1ec4
Merge pull request #2258 from elebumm/dependabot/pip/develop/elevenla…
JasonLovesDoggo Mar 7, 2025
b3cafbe
Bump elevenlabs from 1.52.0 to 1.54.0
dependabot[bot] Mar 11, 2025
e137dbb
adding OpenAI TTS API Option
bnfone Mar 16, 2025
6a5fdfd
Merge pull request #2267 from elebumm/dependabot/pip/develop/elevenla…
JasonLovesDoggo Mar 24, 2025
3e4eb17
Bump yt-dlp from 2025.2.19 to 2025.3.21
dependabot[bot] Mar 24, 2025
0aa18ea
feature: OpenAI TTS API - requested changes
bnfone Mar 24, 2025
6755da4
Merge pull request #2271 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Mar 24, 2025
00a3c1b
Merge pull request #2268 from bnfone/master
JasonLovesDoggo Mar 24, 2025
2ed5aa6
fixup: Format Python code with Black
github-actions[bot] Mar 24, 2025
cdd2171
Bump transformers from 4.49.0 to 4.50.2
dependabot[bot] Mar 27, 2025
5e60813
Bump elevenlabs from 1.54.0 to 1.55.0
dependabot[bot] Mar 28, 2025
820471b
Merge pull request #2277 from elebumm/dependabot/pip/develop/elevenla…
JasonLovesDoggo Mar 30, 2025
a9b31fc
Merge pull request #2275 from elebumm/dependabot/pip/develop/transfor…
JasonLovesDoggo Mar 30, 2025
41754ad
Bump yt-dlp from 2025.3.21 to 2025.3.27
dependabot[bot] Mar 30, 2025
5517dd2
Merge pull request #2276 from elebumm/dependabot/pip/develop/yt-dlp-2…
JasonLovesDoggo Mar 30, 2025
c3781d4
Bump elevenlabs from 1.55.0 to 1.57.0
dependabot[bot] Apr 21, 2025
efce2e8
Bump unidecode from 1.3.8 to 1.4.0
dependabot[bot] Apr 24, 2025
6d7ef10
Bump torch from 2.6.0 to 2.7.0
dependabot[bot] Apr 24, 2025
9684f05
Merge pull request #2292 from elebumm/dependabot/pip/develop/elevenla…
JasonLovesDoggo Apr 30, 2025
e34d078
Merge pull request #2294 from elebumm/dependabot/pip/develop/torch-2.7.0
JasonLovesDoggo Apr 30, 2025
a83d637
Merge pull request #2293 from elebumm/dependabot/pip/develop/unidecod…
JasonLovesDoggo Apr 30, 2025
8c69368
Bump transformers from 4.50.2 to 4.51.3 (#2289)
dependabot[bot] Apr 30, 2025
57e8af9
Merge branch 'master' into develop
JasonLovesDoggo Apr 30, 2025
450f5ae
Bump spacy from 3.8.4 to 3.8.7 (#2310)
dependabot[bot] May 23, 2025
a086cf2
Bump transformers from 4.51.3 to 4.52.3 (#2309)
dependabot[bot] May 23, 2025
1f41003
Bump yt-dlp from 2025.3.27 to 2025.5.22 (#2308)
dependabot[bot] May 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
Dockerfile
Dockerfile
results
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.10
60 changes: 47 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,27 +37,61 @@ The only original thing being done is the editing and gathering of all materials

## Installation 👩‍💻

1. Clone this repository
2. Run `pip install -r requirements.txt`
3. Run `python -m playwright install` and `python -m playwright install-deps`
1. Clone this repository:
```sh
git clone https://github.com/elebumm/RedditVideoMakerBot.git
cd RedditVideoMakerBot
```

2. Create and activate a virtual environment:
- On **Windows**:
```sh
python -m venv ./venv
.\venv\Scripts\activate
```
- On **macOS and Linux**:
```sh
python3 -m venv ./venv
source ./venv/bin/activate
```

3. Install the required dependencies:
```sh
pip install -r requirements.txt
```

4. Install Playwright and its dependencies:
```sh
python -m playwright install
python -m playwright install-deps
```

---

**EXPERIMENTAL!!!!**

On macOS and Linux (debian, arch, fedora and centos, and based on those), you can run an install script that will automatically install steps 1 to 3. (requires bash)
- On macOS and Linux (Debian, Arch, Fedora, CentOS, and based on those), you can run an installation script that will automatically install steps 1 to 3. (requires bash)
- `bash <(curl -sL https://raw.githubusercontent.com/elebumm/RedditVideoMakerBot/master/install.sh)`
- This can also be used to update the installation

`bash <(curl -sL https://raw.githubusercontent.com/elebumm/RedditVideoMakerBot/master/install.sh)`
---

This can also be used to update the installation
5. Run the bot:
```sh
python main.py
```

4. Run `python main.py`
5. Visit [the Reddit Apps page.](https://www.reddit.com/prefs/apps), and set up an app that is a "script". Paste any URL in redirect URL. Ex:`https://jasoncameron.dev`
6. The bot will ask you to fill in your details to connect to the Reddit API, and configure the bot to your liking
7. Enjoy 😎
8. If you need to reconfigure the bot, simply open the `config.toml` file and delete the lines that need to be changed. On the next run of the bot, it will help you reconfigure those options.
6. Visit [the Reddit Apps page](https://www.reddit.com/prefs/apps), and set up an app that is a "script". Paste any URL in the redirect URL field, for example: `https://jasoncameron.dev`.

(Note if you got an error installing or running the bot try first rerunning the command with a three after the name e.g. python3 or pip3)
7. The bot will prompt you to fill in your details to connect to the Reddit API and configure the bot to your liking.

If you want to read more detailed guide about the bot, please refer to the [documentation](https://reddit-video-maker-bot.netlify.app/)
8. Enjoy 😎

9. If you need to reconfigure the bot, simply open the `config.toml` file and delete the lines that need to be changed. On the next run of the bot, it will help you reconfigure those options.

(Note: If you encounter any errors installing or running the bot, try using `python3` or `pip3` instead of `python` or `pip`.)

For a more detailed guide about the bot, please refer to the [documentation](https://reddit-video-maker-bot.netlify.app/).

## Video

Expand Down
2 changes: 1 addition & 1 deletion TTS/GTTS.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ def __init__(self):
self.max_chars = 5000
self.voices = []

def run(self, text, filepath):
def run(self, text, filepath, random_voice: bool = False):
tts = gTTS(
text=text,
lang=settings.config["reddit"]["thread"]["post_lang"] or "en",
Expand Down
2 changes: 1 addition & 1 deletion TTS/elevenlabs.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,4 @@ def initialize(self):
def randomvoice(self):
if self.client is None:
self.initialize()
return random.choice(self.client.voices.get_all().voices).voice_name
return random.choice(self.client.voices.get_all().voices).name
28 changes: 17 additions & 11 deletions TTS/engine_wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@

import numpy as np
import translators
from moviepy import AudioFileClip
from moviepy.audio.AudioClip import AudioClip
from moviepy.audio.fx.volumex import volumex
from moviepy.editor import AudioFileClip
from moviepy.audio.fx import MultiplyVolume
from rich.progress import track

from utils import settings
Expand Down Expand Up @@ -112,7 +112,6 @@ def split_post(self, text: str, idx):
]
self.create_silence_mp3()

idy = None
for idy, text_cut in enumerate(split_text):
newtext = process_text(text_cut)
# print(f"{idx}-{idy}: {newtext}\n")
Expand Down Expand Up @@ -144,11 +143,18 @@ def split_post(self, text: str, idx):
print("OSError")

def call_tts(self, filename: str, text: str):
self.tts_module.run(
text,
filepath=f"{self.path}/{filename}.mp3",
random_voice=settings.config["settings"]["tts"]["random_voice"],
)
if settings.config["settings"]["tts"]["voice_choice"] == "googletranslate":
# GTTS does not have the argument 'random_voice'
self.tts_module.run(
text,
filepath=f"{self.path}/{filename}.mp3",
)
else:
self.tts_module.run(
text,
filepath=f"{self.path}/{filename}.mp3",
random_voice=settings.config["settings"]["tts"]["random_voice"],
)
# try:
# self.length += MP3(f"{self.path}/{filename}.mp3").info.length
# except (MutagenError, HeaderNotFoundError):
Expand All @@ -164,12 +170,12 @@ def call_tts(self, filename: str, text: str):
def create_silence_mp3(self):
silence_duration = settings.config["settings"]["tts"]["silence_duration"]
silence = AudioClip(
make_frame=lambda t: np.sin(440 * 2 * np.pi * t),
frame_function=lambda t: np.sin(440 * 2 * np.pi * t),
duration=silence_duration,
fps=44100,
)
silence = volumex(silence, 0)
silence.write_audiofile(f"{self.path}/silence.mp3", fps=44100, verbose=False, logger=None)
silence = silence.with_effects([MultiplyVolume(0)])
silence.write_audiofile(f"{self.path}/silence.mp3", fps=44100, logger=None)


def process_text(text: str, clean: bool = True):
Expand Down
91 changes: 91 additions & 0 deletions TTS/openai_tts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import random

import requests

from utils import settings


class OpenAITTS:
"""
A Text-to-Speech engine that uses an OpenAI-like TTS API endpoint to generate audio from text.

Attributes:
max_chars (int): Maximum number of characters allowed per API call.
api_key (str): API key loaded from settings.
api_url (str): The complete API endpoint URL, built from a base URL provided in the config.
available_voices (list): Static list of supported voices (according to current docs).
"""

def __init__(self):
# Set maximum input size based on API limits (4096 characters per request)
self.max_chars = 4096
self.api_key = settings.config["settings"]["tts"].get("openai_api_key")
if not self.api_key:
raise ValueError(
"No OpenAI API key provided in settings! Please set 'openai_api_key' in your config."
)

# Lese den Basis-URL aus der Konfiguration (z. B. "https://api.openai.com/v1" oder "https://api.openai.com/v1/")
base_url = settings.config["settings"]["tts"].get(
"openai_api_url", "https://api.openai.com/v1"
)
# Entferne ggf. den abschließenden Slash
if base_url.endswith("/"):
base_url = base_url[:-1]
# Hänge den TTS-spezifischen Pfad an
self.api_url = base_url + "/audio/speech"

# Set the available voices to a static list as per OpenAI TTS documentation.
self.available_voices = self.get_available_voices()

def get_available_voices(self):
"""
Return a static list of supported voices for the OpenAI TTS API.

According to the documentation, supported voices include:
"alloy", "ash", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer"
"""
return ["alloy", "ash", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer"]

def randomvoice(self):
"""
Select and return a random voice from the available voices.
"""
return random.choice(self.available_voices)

def run(self, text, filepath, random_voice: bool = False):
"""
Convert the provided text to speech and save the resulting audio to the specified filepath.

Args:
text (str): The input text to convert.
filepath (str): The file path where the generated audio will be saved.
random_voice (bool): If True, select a random voice from the available voices.
"""
# Choose voice based on configuration or randomly if requested.
if random_voice:
voice = self.randomvoice()
else:
voice = settings.config["settings"]["tts"].get("openai_voice_name", "alloy")
voice = str(voice).lower() # Ensure lower-case as expected by the API

# Select the model from configuration; default to 'tts-1'
model = settings.config["settings"]["tts"].get("openai_model", "tts-1")

# Create Payload for API-request
payload = {
"model": model,
"voice": voice,
"input": text,
"response_format": "mp3", # allowed formats: "mp3", "aac", "opus", "flac", "pcm" or "wav"
}
headers = {"Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json"}
try:
response = requests.post(self.api_url, headers=headers, json=payload)
if response.status_code != 200:
raise RuntimeError(f"Error from TTS API: {response.status_code} {response.text}")
# Write response as binary into file.
with open(filepath, "wb") as f:
f.write(response.content)
except Exception as e:
raise RuntimeError(f"Failed to generate audio with OpenAI TTS API: {str(e)}")
23 changes: 14 additions & 9 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from os import name
from pathlib import Path
from subprocess import Popen
from typing import NoReturn
from typing import Dict, NoReturn

from prawcore import ResponseException

Expand All @@ -13,7 +13,7 @@
from utils.cleanup import cleanup
from utils.console import print_markdown, print_step, print_substep
from utils.ffmpeg_install import ffmpeg_install
from utils.id import id
from utils.id import extract_id
from utils.version import checkversion
from video_creation.background import (
chop_background,
Expand All @@ -25,7 +25,7 @@
from video_creation.screenshot_downloader import get_screenshots_of_reddit_posts
from video_creation.voices import save_text_to_mp3

__VERSION__ = "3.3.0"
__VERSION__ = "3.4.0"

print(
"""
Expand All @@ -42,11 +42,15 @@
)
checkversion(__VERSION__)

reddit_id: str
reddit_object: Dict[str, str | list]


def main(POST_ID=None) -> None:
global redditid, reddit_object
global reddit_id, reddit_object
reddit_object = get_subreddit_threads(POST_ID)
redditid = id(reddit_object)
reddit_id = extract_id(reddit_object)
print_substep(f"Thread ID is {reddit_id}", style="bold blue")
length, number_of_comments = save_text_to_mp3(reddit_object)
length = math.ceil(length)
get_screenshots_of_reddit_posts(reddit_object, number_of_comments)
Expand All @@ -64,22 +68,22 @@ def run_many(times) -> None:
for x in range(1, times + 1):
print_step(
f'on the {x}{("th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th")[x % 10]} iteration of {times}'
) # correct 1st 2nd 3rd 4th 5th....
)
main()
Popen("cls" if name == "nt" else "clear", shell=True).wait()


def shutdown() -> NoReturn:
if "redditid" in globals():
if "reddit_id" in globals():
print_markdown("## Clearing temp files")
cleanup(redditid)
cleanup(reddit_id)

print("Exiting...")
sys.exit()


if __name__ == "__main__":
if sys.version_info.major != 3 or sys.version_info.minor not in [10, 11]:
if sys.version_info.major != 3 or sys.version_info.minor not in [10, 11, 12]:
print(
"Hey! Congratulations, you've made it so far (which is pretty rare with no Python 3.10). Unfortunately, this program only works on Python 3.10. Please install Python 3.10 and try again."
)
Expand Down Expand Up @@ -122,6 +126,7 @@ def shutdown() -> NoReturn:
except Exception as err:
config["settings"]["tts"]["tiktok_sessionid"] = "REDACTED"
config["settings"]["tts"]["elevenlabs_api_key"] = "REDACTED"
config["settings"]["tts"]["openai_api_key"] = "REDACTED"
print_step(
f"Sorry, something went wrong with this version! Try again, and feel free to report this issue at GitHub or the Discord community.\n"
f"Version: {__VERSION__} \n"
Expand Down
37 changes: 17 additions & 20 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@
boto3==1.34.127
botocore==1.34.127
gTTS==2.5.1
moviepy==1.0.3
playwright==1.44.0
praw==7.7.1
prawcore~=2.3.0
boto3==1.36.8
botocore==1.36.8
gTTS==2.5.4
moviepy==2.1.2
playwright==1.49.1
praw==7.8.1
requests==2.32.3
rich==13.7.1
rich==13.9.4
toml==0.10.2
translators==5.9.2
pyttsx3==2.90
Pillow==10.3.0
tomlkit==0.12.5
Flask==3.0.3
translators==5.9.9
pyttsx3==2.98
tomlkit==0.13.2
Flask==3.1.0
clean-text==0.6.0
unidecode==1.3.8
spacy==3.7.5
torch==2.3.1
transformers==4.41.2
unidecode==1.4.0
spacy==3.8.7
torch==2.7.0
transformers==4.52.3
ffmpeg-python==0.2.0
elevenlabs==1.3.0
yt-dlp==2024.5.27
numpy==1.26.4
elevenlabs==1.57.0
yt-dlp==2025.5.22
5 changes: 4 additions & 1 deletion utils/.config.template.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ background_thumbnail_font_size = { optional = true, type = "int", default = 96,
background_thumbnail_font_color = { optional = true, default = "255,255,255", example = "255,255,255", explanation = "Font color in RGB format for the thumbnail text" }

[settings.tts]
voice_choice = { optional = false, default = "tiktok", options = ["elevenlabs", "streamlabspolly", "tiktok", "googletranslate", "awspolly", "pyttsx", ], example = "tiktok", explanation = "The voice platform used for TTS generation. " }
random_voice = { optional = false, type = "bool", default = true, example = true, options = [true, false,], explanation = "Randomizes the voice used for each comment" }
elevenlabs_voice_name = { optional = false, default = "Bella", example = "Bella", explanation = "The voice used for elevenlabs", options = ["Adam", "Antoni", "Arnold", "Bella", "Domi", "Elli", "Josh", "Rachel", "Sam", ] }
elevenlabs_api_key = { optional = true, example = "21f13f91f54d741e2ae27d2ab1b99d59", explanation = "Elevenlabs API key" }
Expand All @@ -56,3 +55,7 @@ python_voice = { optional = false, default = "1", example = "1", explanation = "
py_voice_num = { optional = false, default = "2", example = "2", explanation = "The number of system voices (2 are pre-installed in Windows)" }
silence_duration = { optional = true, example = "0.1", explanation = "Time in seconds between TTS comments", default = 0.3, type = "float" }
no_emojis = { optional = false, type = "bool", default = false, example = false, options = [true, false,], explanation = "Whether to remove emojis from the comments" }
openai_api_url = { optional = true, default = "https://api.openai.com/v1/", example = "https://api.openai.com/v1/", explanation = "The API endpoint URL for OpenAI TTS generation" }
openai_api_key = { optional = true, example = "sk-abc123def456...", explanation = "Your OpenAI API key for TTS generation" }
openai_voice_name = { optional = false, default = "alloy", example = "alloy", explanation = "The voice used for OpenAI TTS generation", options = ["alloy", "ash", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "af_heart"] }
openai_model = { optional = false, default = "tts-1", example = "tts-1", explanation = "The model variant used for OpenAI TTS generation", options = ["tts-1", "tts-1-hd", "gpt-4o-mini-tts"] }
Loading
Loading