|
|
@@ -2,33 +2,6 @@
|
|
|
|
|
|
A modern, full-stack video processing system built with Turborepo. Automatically monitors directories, processes videos with HandBrake, and provides a complete web interface for management.
|
|
|
|
|
|
-## Features
|
|
|
-
|
|
|
-- **File Watching**: Automatic detection and processing of new video files
|
|
|
-- **Video Processing**: HandBrake integration with configurable presets
|
|
|
-- **Web Interface**: Modern Next.js dashboard for monitoring and management
|
|
|
-- **REST API**: NestJS backend with WebSocket real-time updates
|
|
|
-- **CLI Tool**: Command-line interface for automation and scripting
|
|
|
-- **Task Queue**: Background processing with progress tracking
|
|
|
-- **Maintenance Tools**: Cleanup, purge, and prune operations
|
|
|
-- **SQLite Database**: Centralized data storage for files, tasks, and settings
|
|
|
-
|
|
|
-## Architecture
|
|
|
-
|
|
|
-This monorepo contains:
|
|
|
-
|
|
|
-### Apps
|
|
|
-
|
|
|
-- **`apps/web`**: Next.js 14 web interface with real-time updates
|
|
|
-- **`apps/service`**: NestJS API server with WebSocket support
|
|
|
-- **`apps/cli`**: Node.js command-line interface
|
|
|
-
|
|
|
-### Packages
|
|
|
-
|
|
|
-- **`packages/eslint-config`**: Shared ESLint configurations
|
|
|
-- **`packages/typescript-config`**: Shared TypeScript configurations
|
|
|
-- **`packages/ui`**: Shared React components (stub)
|
|
|
-
|
|
|
## Quick Start
|
|
|
|
|
|
```bash
|
|
|
@@ -44,179 +17,25 @@ pnpm run service # API server on :3001
|
|
|
pnpm run cli # Interactive CLI
|
|
|
```
|
|
|
|
|
|
-## Development
|
|
|
-
|
|
|
-### Prerequisites
|
|
|
-
|
|
|
-- Node.js 20+
|
|
|
-- pnpm package manager
|
|
|
-- HandBrake CLI (installed automatically in Docker)
|
|
|
-
|
|
|
-### Available Scripts
|
|
|
-
|
|
|
-- `pnpm run dev` - Start all services with hot reload
|
|
|
-- `pnpm run build` - Build all apps
|
|
|
-- `pnpm run lint` - Run ESLint
|
|
|
-- `pnpm run test` - Run tests
|
|
|
-
|
|
|
-### Docker Support
|
|
|
-
|
|
|
-```bash
|
|
|
-docker build .
|
|
|
-docker-compose up
|
|
|
-```
|
|
|
-
|
|
|
-## Configuration
|
|
|
-
|
|
|
-Dataset configurations are stored in the SQLite database. Each dataset defines:
|
|
|
-
|
|
|
-- Watch directories
|
|
|
-- Output destinations
|
|
|
-- File extensions to process
|
|
|
-- HandBrake presets
|
|
|
-- Filename cleaning rules
|
|
|
-
|
|
|
-## API Endpoints
|
|
|
-
|
|
|
-- `GET /files` - List processed files
|
|
|
-- `POST /watcher/start` - Start file monitoring
|
|
|
-- `GET /tasks` - View processing queue
|
|
|
-- `POST /maintenance/cleanup` - Clean up files
|
|
|
-- WebSocket events for real-time updates
|
|
|
-
|
|
|
-## CLI Usage
|
|
|
-
|
|
|
-```bash
|
|
|
-# Interactive mode (recommended)
|
|
|
-pnpm run cli
|
|
|
-
|
|
|
-# Direct commands
|
|
|
-pnpm run cli files:list --dataset movies
|
|
|
-pnpm run cli task:list
|
|
|
-pnpm run cli config:get datasets
|
|
|
-```
|
|
|
-
|
|
|
-## Database
|
|
|
-
|
|
|
-SQLite database stored at `data/database.db` containing:
|
|
|
-
|
|
|
-- **files**: Processed video metadata
|
|
|
-- **tasks**: Processing queue
|
|
|
-- **settings**: Configuration data
|
|
|
-
|
|
|
-See `data/README.md` for schema details.
|
|
|
-
|
|
|
## Documentation
|
|
|
|
|
|
-- **API Docs**: See `apps/service/README.md`
|
|
|
-- **Web Interface**: See `apps/web/README.md`
|
|
|
-- **CLI Guide**: See `apps/cli/README.md`
|
|
|
-- **Development**: See `docs/DEVELOPMENT_NOTES.md`
|
|
|
-
|
|
|
-This Turborepo has some additional tools already setup for you:
|
|
|
-
|
|
|
-- [TypeScript](https://www.typescriptlang.org/) for static type checking
|
|
|
-- [ESLint](https://eslint.org/) for code linting
|
|
|
-- [Prettier](https://prettier.io) for code formatting
|
|
|
-
|
|
|
-### Build
|
|
|
-
|
|
|
-To build all apps and packages, run the following command:
|
|
|
+For detailed information, see:
|
|
|
|
|
|
-```
|
|
|
-cd my-turborepo
|
|
|
-
|
|
|
-# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
|
|
|
-turbo build
|
|
|
-
|
|
|
-# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
|
|
|
-npx turbo build
|
|
|
-yarn dlx turbo build
|
|
|
-pnpm exec turbo build
|
|
|
-```
|
|
|
-
|
|
|
-You can build a specific package by using a [filter](https://turborepo.com/docs/crafting-your-repository/running-tasks#using-filters):
|
|
|
-
|
|
|
-```
|
|
|
-# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
|
|
|
-turbo build --filter=web
|
|
|
-
|
|
|
-# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
|
|
|
-npx turbo build --filter=web
|
|
|
-yarn exec turbo build --filter=web
|
|
|
-pnpm exec turbo build --filter=web
|
|
|
-```
|
|
|
+- **[Web Interface](apps/web/README.md)** - Next.js dashboard documentation
|
|
|
+- **[API Service](apps/service/README.md)** - NestJS backend and API reference
|
|
|
+- **[CLI Tool](apps/cli/README.md)** - Command-line interface guide
|
|
|
+- **[Database Schema](data/README.md)** - SQLite database structure
|
|
|
+- **[Development Notes](docs/DEVELOPMENT_NOTES.md)** - Setup and development guide
|
|
|
|
|
|
-### Develop
|
|
|
-
|
|
|
-To develop all apps and packages, run the following command:
|
|
|
+## Project Structure
|
|
|
|
|
|
```
|
|
|
-cd my-turborepo
|
|
|
-
|
|
|
-# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
|
|
|
-turbo dev
|
|
|
-
|
|
|
-# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
|
|
|
-npx turbo dev
|
|
|
-yarn exec turbo dev
|
|
|
-pnpm exec turbo dev
|
|
|
+├── apps/
|
|
|
+│ ├── web/ # Next.js web interface
|
|
|
+│ ├── service/ # NestJS API server
|
|
|
+│ └── cli/ # Command-line interface
|
|
|
+├── packages/ # Shared configurations
|
|
|
+├── data/ # SQLite database
|
|
|
+├── docs/ # Documentation
|
|
|
+└── scripts/ # Build scripts
|
|
|
```
|
|
|
-
|
|
|
-You can develop a specific package by using a [filter](https://turborepo.com/docs/crafting-your-repository/running-tasks#using-filters):
|
|
|
-
|
|
|
-```
|
|
|
-# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
|
|
|
-turbo dev --filter=web
|
|
|
-
|
|
|
-# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
|
|
|
-npx turbo dev --filter=web
|
|
|
-yarn exec turbo dev --filter=web
|
|
|
-pnpm exec turbo dev --filter=web
|
|
|
-```
|
|
|
-
|
|
|
-### Remote Caching
|
|
|
-
|
|
|
-> [!TIP]
|
|
|
-> Vercel Remote Cache is free for all plans. Get started today at [vercel.com](https://vercel.com/signup?/signup?utm_source=remote-cache-sdk&utm_campaign=free_remote_cache).
|
|
|
-
|
|
|
-Turborepo can use a technique known as [Remote Caching](https://turborepo.com/docs/core-concepts/remote-caching) to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines.
|
|
|
-
|
|
|
-By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can [create one](https://vercel.com/signup?utm_source=turborepo-examples), then enter the following commands:
|
|
|
-
|
|
|
-```
|
|
|
-cd my-turborepo
|
|
|
-
|
|
|
-# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
|
|
|
-turbo login
|
|
|
-
|
|
|
-# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
|
|
|
-npx turbo login
|
|
|
-yarn exec turbo login
|
|
|
-pnpm exec turbo login
|
|
|
-```
|
|
|
-
|
|
|
-This will authenticate the Turborepo CLI with your [Vercel account](https://vercel.com/docs/concepts/personal-accounts/overview).
|
|
|
-
|
|
|
-Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo:
|
|
|
-
|
|
|
-```
|
|
|
-# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
|
|
|
-turbo link
|
|
|
-
|
|
|
-# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
|
|
|
-npx turbo link
|
|
|
-yarn exec turbo link
|
|
|
-pnpm exec turbo link
|
|
|
-```
|
|
|
-
|
|
|
-## Useful Links
|
|
|
-
|
|
|
-Learn more about the power of Turborepo:
|
|
|
-
|
|
|
-- [Tasks](https://turborepo.com/docs/crafting-your-repository/running-tasks)
|
|
|
-- [Caching](https://turborepo.com/docs/crafting-your-repository/caching)
|
|
|
-- [Remote Caching](https://turborepo.com/docs/core-concepts/remote-caching)
|
|
|
-- [Filtering](https://turborepo.com/docs/crafting-your-repository/running-tasks#using-filters)
|
|
|
-- [Configuration Options](https://turborepo.com/docs/reference/configuration)
|
|
|
-- [CLI Usage](https://turborepo.com/docs/reference/command-line-reference)
|