# ๐Ÿš„ Subway Surfers Text-to-Video Converter
Skip the fairy-tale, just give me the code already --> [Click Here](https://teb.codes/2-Code/Docker/Subway-Surfers#using-docker-compose-like-a-true-king)

Inspired by the absolute legend [danielbonkowsky/subwaysurfers-text](https://github.com/danielbonkowsky/subwaysurfers-text), this project throws some sauce on the original concept. If this container saves you time (or your sanity), go drop a star on his project already, damn it.
## ๐Ÿš€ What the Hell Is This?  
You ever try to focus on an article and your brain taps out after the second paragraph? Same. This little monster extracts text from a webpage and slaps it onto hyperactive **Subway Surfers** gameplay footageโ€”turning dry, boring content into something your scrolling-addicted brain can actually sit through. Perfect for TikTok, ADHD, or just making studying suck less.
You get:  
๐Ÿง  smart content + ๐ŸŽฎ mindless gameplay = โœ… actual retention (probably)
## ๐Ÿ“ธ Screenshot
![Generate](./Screenshot_2025-07-12_at_5.17.25_PM.png)
![Link](./Screenshot_2025-07-12_at_9.14.47_PM.png)
![Progress Bar](./Screenshot_2025-07-12_at_9.11.06_PM.png)
![View Current 1](./Screenshot_2025-07-12_at_9.12.03_PM.png)
![View Current 2](./Screenshot_2025-07-12_at_5.17.41_PM.png)
![Browse](./Screenshot_2025-07-12_at_9.29.02_PM.png)
## ๐ŸŽฏ Oh Hell Yeah, Features  
- Converts your average web article into a **Subway Surfers-screaming-TikTok-style video**  
- Rips text straight from URLs  
- Slaps it on top of fast-ass gameplay  
- Bonus points: **speech-to-text powered by Vosk API**  
- Built with **Flask + OpenCV + goose3 + Python + zero chill**
---
## ๐Ÿณ Running This Beast with Docker  
**Step 1:** Pull the image, because we're not building this crap from scratch:  
```sh
docker pull tebwritescode/subwaysurfers-text20:latest
```
**Step 2:** Get the Vosk brain model and unzip it:  
```sh
wget https://alphacephei.com/vosk/models/vosk-model-en-us-0.22.zip
unzip vosk-model-en-us-0.22.zip -d ./
rm vosk-model-en-us-0.22.zip
```
**Step 3:** Drop a gameplay video into `./sources` โ€” any `.mp4` will do. More videos = more fun. Only one? It'll reuse that sucker on every run.

**Step 4:** Let's ride:  
```sh
docker run -d --name subwaysurfers-text \
  -v ./subwaysurfers/sources:/app/sources \
  -v ./subwaysurfers/vosk-model-en-us-0.22:/app/static/vosk-model-en-us-0.22 \
  -p 5000:5000 \
  tebwritescode/subwaysurfers-text20:latest
```
**Step 5:** Fire up your browser and hit:  
```
http://localhost:5000
```
Get ready to weep tears of productivity as your article runs across a CGI train track.
---
## ๐Ÿ”ง Environment Variables For Control Freaks
Want to make this thing dance to your tune? Here are the variables you can tweak:

```sh
# Path to the Vosk TTS model
MODEL_PATH=static/vosk-model-en-us-0.22

# Where your Subway Surfers gameplay videos live
SOURCE_VIDEO_DIR=sources

# Pick a random source video each time? 
# Set to "false" if you want to use a specific file for SOURCE_VIDEO_DIR(sources/myfile.mp4)
RANDOM_SOURCE=true
```

Add them to your docker run command like a boss:

```sh
docker run -d --name subwaysurfers-text \
  -e MODEL_PATH=static/custom-model \
  -e RANDOM_SOURCE=false \
  -e SOURCE_VIDEO_DIR=sources/myfile.mp4 \
  -v ./subwaysurfers/sources:/app/sources \
  -v ./subwaysurfers/vosk-model-en-us-0.22:/app/static/vosk-model-en-us-0.22 \
  -p 5000:5000 \
  tebwritescode/subwaysurfers-text20:latest
```

Or in your docker-compose like a champion:

```yaml
services:
  subwaysurfers-text:
    image: tebwritescode/subwaysurfers-text20:latest
    environment:
      - MODEL_PATH=static/vosk-model-en-us-0.22
      - SOURCE_VIDEO_DIR=sources
      - RANDOM_SOURCE=true
    volumes:
      - <HOSTPATH>/sources:/app/sources
      - <HOSTPATH>/vosk-model-en-us-0.22:/app/static/vosk-model-en-us-0.22
    ports:
      - "5000:5000"
```
---
## ๐Ÿ›  Using Docker Compose Like a True King ๐Ÿ‘‘
Replace `<HOSTPATH>` with the full path to where your god-tier video and Vosk model live.
```yaml
services:
  subwaysurfers-text:
    image: tebwritescode/subwaysurfers-text20:latest
    volumes:
      - <HOSTPATH>/sources:/app/sources
      - <HOSTPATH>/vosk-model-en-us-0.22:/app/static/vosk-model-en-us-0.22
    ports:
      - "5000:5000"
```
Start it up:  
```sh
docker-compose up -d
```
Fun fact: if you only mount one `.mp4`, the app will always use that. Mount a folder of them? It picks a random vid each time. ๐ŸŽฒ
---
## ๐Ÿ The Dockerfile Straight-Up Breakdown  
- Uses a slimmed-down official Python image  
- Installs all the nasty dependencies (yes, even ffmpeg and build tools)  
- Brings in Homebrew in case you're feeling fancy  
- Copies the app, installs Python and brew packages  
- Runs Flask like it means it  
- Your container, your rules
---
## ๐Ÿ”ฎ Shit I Still Wanna Add  
- Drop-down to select different AI voices (because not every AI wants to sound like Siri on Ambien)  
- ~NVIDIA GPU acceleration (because some of you have beefy rigs)~  Nixed this shit, GPU transcoding is slow AF
- ~Fix that annoying subtitle-stuck bug nobody asked for~ I think I squashed this fucker
---
## ๐Ÿง  Want to Run It Without Docker?  
You rebel. Here's the repo for bare-metal installs:  
๐Ÿ‘‰ https://github.com/tebwritescode/subwaysurfers-text-multi  
---
## ๐Ÿ† Big-Ass Credit Section  
Massive props to [danielbonkowsky](https://github.com/danielbonkowsky/subwaysurfers-text) for the core idea. This is just a remixed, Dockerized, slightly louder sibling. Go say thanks.
---
## โš ๏ธ Final Note from His Royal Freshnessโ„ข  
Yeah, the container works. It does the job. But it's packing a little extra weight and could use a clean-up. If trimming containers gives you a tech boner, PRs are wide open.
Enjoy learning like a hyper-caffeinated teenager on TikTok ๐Ÿš€
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9