Compare commits
3 commits
7e0502ca40
...
53f7750e0d
| Author | SHA1 | Date | |
|---|---|---|---|
| 53f7750e0d | |||
| cfb1f8ffbc | |||
| ab99ac3f34 |
3 changed files with 49 additions and 9 deletions
58
README.md
58
README.md
|
|
@ -25,6 +25,12 @@ configurable media root for security.
|
|||
|
||||

|
||||
|
||||
4. Get an email notification when a compresion run finishes.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Quick start with Docker (recommended)
|
||||
|
|
@ -44,15 +50,20 @@ Step 2. Run — replace `/your/video/path` with the real path on your host
|
|||
|
||||
A. Using `docker run`:
|
||||
|
||||
`mkdir -p data`
|
||||
|
||||
```
|
||||
docker run -d \
|
||||
--name videopress \
|
||||
--restart unless-stopped \
|
||||
-p 8080:8080 \
|
||||
-v /your/video/path:/media \
|
||||
-v ./data:/data \
|
||||
videopress
|
||||
```
|
||||
B. Using Docker Compose
|
||||
|
||||
`mkdir -p data`
|
||||
|
||||
`docker compose up -d`
|
||||
|
||||
|
|
@ -114,6 +125,8 @@ Browser ──HTTP──▶ Gunicorn (gevent worker)
|
|||
└─ POST /api/compress/cancel/<id>
|
||||
```
|
||||
|
||||
|
||||
|
||||
**Why gevent?** SSE (`/api/compress/progress`) is a long-lived streaming
|
||||
response. Standard Gunicorn sync workers block for its entire duration.
|
||||
Gevent workers use cooperative greenlets so a single worker process can
|
||||
|
|
@ -140,17 +153,44 @@ in-process job store with Redis.
|
|||
|
||||
```
|
||||
videocompressor/
|
||||
├── app.py ← Flask application + all API routes
|
||||
├── wsgi.py ← Gunicorn entry point (imports app from app.py)
|
||||
├── gunicorn.conf.py ← Gunicorn configuration (gevent, timeout, logging)
|
||||
├── requirements.txt ← Python dependencies
|
||||
├── Dockerfile ← Two-stage Docker build
|
||||
├── docker-compose.yml ← Volume mapping, port, env vars
|
||||
├── start.sh ← Helper script (dev + prod modes)
|
||||
├── app
|
||||
├── __init__.py
|
||||
├── config.py
|
||||
├── db.py
|
||||
├── jobs.py
|
||||
├── media.py
|
||||
├── notify.py
|
||||
└── routes.py
|
||||
├── wsgi.py
|
||||
├── gunicorn.conf.py
|
||||
├── requirements.txt
|
||||
├── Dockerfile
|
||||
├── docker-compose.yml
|
||||
├── start.sh
|
||||
├── README.md
|
||||
├── templates/
|
||||
│ └── index.html
|
||||
└── static/
|
||||
├── css/main.css
|
||||
└── js/app.js
|
||||
├── css
|
||||
└── main.css
|
||||
└── js
|
||||
├── app.js
|
||||
└── modules
|
||||
├── browser.js
|
||||
├── compress.js
|
||||
├── progress.js
|
||||
├── scan.js
|
||||
├── session.js
|
||||
├── settings.js
|
||||
├── state.js
|
||||
├── stream.js
|
||||
├── theme.js
|
||||
└── utils.js
|
||||
```
|
||||
|
||||
## Contribute
|
||||
Feel free to clone the repository, make updates, and submit a pull request to make this more feature rich.
|
||||
|
||||
Keep in mind, I like to keep things fairly simple to use.
|
||||
|
||||
If you need to know too much about ffmpeg and how to configure the perfect compression, then that may be too much for this app, but feel free to fork this repository and make your own as well.
|
||||
BIN
screens/VideoPress_Screen_4.png
Normal file
BIN
screens/VideoPress_Screen_4.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 64 KiB |
BIN
screens/VideoPress_Screen_5.png
Normal file
BIN
screens/VideoPress_Screen_5.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
Loading…
Add table
Add a link
Reference in a new issue