first commit
This commit is contained in:
149
README.md
Normal file
149
README.md
Normal file
@@ -0,0 +1,149 @@
|
||||
# Ticky - Self-Hosted TikTok-Style Video Scroller
|
||||
|
||||
A mobile and desktop-friendly infinite scrolling video player built with Python/FastAPI backend and vanilla JavaScript frontend.
|
||||
|
||||
## Features
|
||||
|
||||
- 🎬 Infinite scroll with lazy loading
|
||||
- 📱 Mobile-friendly swipe navigation
|
||||
- ⌨️ Keyboard and mouse wheel support
|
||||
- 🖥️ Responsive design (portrait and landscape)
|
||||
- 📡 REST API for video management
|
||||
- 🐳 Docker Compose setup for easy deployment
|
||||
- ⚡ Fast performance with minimal dependencies
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Docker and Docker Compose
|
||||
|
||||
### Setup
|
||||
|
||||
1. **Place your videos** in the `videos/` folder:
|
||||
```bash
|
||||
cp /path/to/your/videos/*.mp4 ./videos/
|
||||
```
|
||||
|
||||
2. **Start the application**:
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
3. **Access the app**:
|
||||
- Frontend: http://localhost:3000
|
||||
- Backend API: http://localhost:3001/api/videos
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
ticky/
|
||||
├── backend/ # Python/FastAPI backend
|
||||
│ ├── main.py # FastAPI application
|
||||
│ ├── requirements.txt # Python dependencies
|
||||
│ ├── Dockerfile # Backend Docker image
|
||||
│ └── .dockerignore
|
||||
├── frontend/ # Vanilla JavaScript frontend
|
||||
│ ├── index.html # Main HTML file
|
||||
│ ├── styles.css # Responsive styles
|
||||
│ ├── app.js # Infinite scroll logic
|
||||
│ ├── Dockerfile # Frontend Docker image
|
||||
│ └── package.json
|
||||
├── videos/ # Video storage (volume mount)
|
||||
└── docker-compose.yml # Docker Compose configuration
|
||||
```
|
||||
|
||||
## Navigation
|
||||
|
||||
### Mobile
|
||||
- **Swipe up**: Next video
|
||||
- **Swipe down**: Previous video
|
||||
|
||||
### Desktop
|
||||
- **Scroll wheel**: Navigate through videos
|
||||
- **Arrow keys**: Up/Down navigation
|
||||
- **Space**: Next video
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Get Random Videos
|
||||
```
|
||||
GET /api/videos?limit=10
|
||||
```
|
||||
|
||||
Response:
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "unique-id",
|
||||
"filename": "video.mp4",
|
||||
"url": "/videos/video.mp4",
|
||||
"title": "video title"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### Health Check
|
||||
```
|
||||
GET /api/health
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Backend Environment Variables
|
||||
|
||||
- `VIDEOS_DIR`: Path to videos directory (default: `/videos`)
|
||||
- `PORT`: Server port (default: `3001`)
|
||||
|
||||
### Supported Video Formats
|
||||
|
||||
- MP4
|
||||
- WebM
|
||||
- OGG
|
||||
- MOV
|
||||
- AVI
|
||||
- MKV
|
||||
|
||||
## Performance Optimizations
|
||||
|
||||
- **Lazy loading**: Only current and adjacent videos are rendered
|
||||
- **Preloading**: Next video is preloaded for smooth transitions
|
||||
- **Muted autoplay**: Videos start muted to allow autoplay
|
||||
- **Efficient DOM**: Minimal DOM manipulation for better performance
|
||||
|
||||
## Customization
|
||||
|
||||
### Styling
|
||||
|
||||
Edit `frontend/styles.css` to customize:
|
||||
- Colors and themes
|
||||
- Control button positions
|
||||
- Video aspect ratio handling
|
||||
- Animation speeds
|
||||
|
||||
### Backend
|
||||
|
||||
Modify `backend/main.py` to:
|
||||
- Add video metadata (duration, thumbnails)
|
||||
- Implement video filtering/sorting
|
||||
- Add authentication
|
||||
- Cache results
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### No videos loading
|
||||
- Ensure videos are in the `videos/` folder
|
||||
- Check supported formats (mp4, webm, ogg, mov, avi, mkv)
|
||||
- Verify permissions: `docker exec ticky-backend ls -la /videos`
|
||||
|
||||
### Videos not playing
|
||||
- Check browser console for CORS errors
|
||||
- Verify backend is running: `curl http://localhost:3001/api/health`
|
||||
|
||||
### Build issues
|
||||
- Rebuild images: `docker-compose down && docker-compose up --build`
|
||||
- Check Docker logs: `docker-compose logs`
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user