{"id":50141990,"url":"https://github.com/techsquidtv/cliparr","last_synced_at":"2026-06-06T02:09:02.415Z","repository":{"id":351386778,"uuid":"1210100679","full_name":"TechSquidTV/Cliparr","owner":"TechSquidTV","description":"Create clips from media on your personal media server","archived":false,"fork":false,"pushed_at":"2026-05-31T03:57:44.000Z","size":9161,"stargazers_count":48,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-31T04:04:22.653Z","etag":null,"topics":["jellyfin","media-server","plex","radarr","self-hosted","sonarr","video-editing"],"latest_commit_sha":null,"homepage":"https://cliparr.dev/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TechSquidTV.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-14T04:54:43.000Z","updated_at":"2026-05-31T03:57:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/TechSquidTV/Cliparr","commit_stats":null,"previous_names":["techsquidtv/cliparr"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/TechSquidTV/Cliparr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechSquidTV%2FCliparr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechSquidTV%2FCliparr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechSquidTV%2FCliparr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechSquidTV%2FCliparr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TechSquidTV","download_url":"https://codeload.github.com/TechSquidTV/Cliparr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechSquidTV%2FCliparr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33750474,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jellyfin","media-server","plex","radarr","self-hosted","sonarr","video-editing"],"created_at":"2026-05-24T02:01:01.070Z","updated_at":"2026-05-31T22:00:57.676Z","avatar_url":"https://github.com/TechSquidTV.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cliparr\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./.github/img/logo.png\" alt=\"Cliparr Logo\" width=\"150px\" /\u003e\n \u003ch3\u003eInstant media clipper for your personal media server.\u003c/h3\u003e\n  \u003cp\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Support-Plex-e5a00d?style=for-the-badge\u0026logo=plex\u0026logoColor=white\" alt=\"Plex Support\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Support-Jellyfin-00a4dc?style=for-the-badge\u0026logo=jellyfin\u0026logoColor=white\" alt=\"Jellyfin Support\" /\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/techsquidtv/cliparr?style=for-the-badge\" alt=\"License\" /\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n**Cliparr** is a streamlined media clipper that allows you to quickly create and download clips from the media currently playing on your Plex or Jellyfin server, or from a local video file opened directly in your browser.\n\n\u003cimg src=\"./.github/img/screenshot.webp\" alt=\"Cliparr editor showing a video preview, timeline clip selection, and subtitle controls.\" width=\"100%\" /\u003e\n\n## Features\n\n\u003c!-- CLIPARR_DOCS_SYNC:features:start --\u003e\n\n- **Instant session discovery**: Automatically loads your media player's currently playing file.\n- **Open local videos**: Open a local file or direct media URL before or after connecting a provider.\n- **Intuitive timeline editor**: Familiar editing controls for choosing the exact clip range.\n- **Browser transcoding**: Powered by \u003ca href=\"https://mediabunny.dev/\" target=\"_blank\" rel=\"noreferrer\"\u003eMediabunny\u003c/a\u003e, video is transcoded in your browser.\n- **Metadata included**: Exports can include season, episode, and timing metadata from your source.\n- **Subtitle burn-in**: Burn in supported subtitles with customizable styling and local font support in Chromium.\n\u003c!-- CLIPARR_DOCS_SYNC:features:end --\u003e\n\n## Getting Started\n\n### Quick Start with Docker\n\n\u003c!-- CLIPARR_DOCS_SYNC:docker-quick-start:start --\u003e\n\nThe fastest way to get Cliparr running is via the GitHub Container Registry.\n\n**macOS / Linux**\n\n```bash\ndocker run -d \\\n  --name cliparr \\\n  -p 7171:7171 \\\n  -e APP_KEY=\"your-32-char-stable-random-secret\" \\\n  -v cliparr-data:/data \\\n  ghcr.io/techsquidtv/cliparr:latest\n```\n\n**PowerShell**\n\n```powershell\ndocker run -d `\n  --name cliparr `\n  -p 7171:7171 `\n  -e APP_KEY=\"your-32-char-stable-random-secret\" `\n  -v cliparr-data:/data `\n  ghcr.io/techsquidtv/cliparr:latest\n```\n\nOn Windows, run this from Docker Desktop or another Docker engine using Linux containers. Cliparr publishes Linux container images for linux/amd64 and linux/arm64.\n\n\u003e [!IMPORTANT]\n\u003e **Stable APP_KEY required**: Cliparr uses APP_KEY to encrypt provider credentials at rest. Use a stable random secret at least 32 characters long. If you change it later, you will need to re-authenticate your media servers.\n\n\u003e [!IMPORTANT]\n\u003e **Use HTTPS for editing**: Cliparr's editor uses browser WebCodecs. Supporting browsers require a secure context, so use HTTPS through a reverse proxy or open Cliparr on localhost or 127.0.0.1.\n\n\u003c!-- CLIPARR_DOCS_SYNC:docker-quick-start:end --\u003e\n\n### Local Videos\n\nUse **Open Video** on the connect screen or dashboard to open a file from your device or a direct media URL. Files are read by the browser with Mediabunny and are not uploaded to the Cliparr server. Browsers that support persistent file handles can reopen the selected file after refresh once you grant permission again; other file input and drag-and-drop sessions stay available only while the tab is open.\n\nURL media streams through Cliparr's media proxy. The URL must use HTTP or HTTPS, be reachable from the Cliparr server, and not point at a blocked internal address. For smooth seeking and clipping, use URLs that support byte-range requests. HLS `.m3u8` URLs can be opened when Cliparr can fetch the playlist and its segment URLs.\n\n### Using Docker Compose\n\nFor a persistent setup, we recommend using Docker Compose:\n\n```yaml\nservices:\n  cliparr:\n    image: ghcr.io/techsquidtv/cliparr:latest\n    container_name: cliparr\n    ports:\n      - \"7171:7171\"\n    environment:\n      - APP_KEY=replace-this-with-a-32-character-secure-random-string\n    volumes:\n      - cliparr-data:/data\n    restart: unless-stopped\n\nvolumes:\n  cliparr-data:\n```\n\n## Configuration\n\n\u003c!-- CLIPARR_DOCS_SYNC:configuration:start --\u003e\n\n| Variable                               | Description                                                                                                                        | Default                  |\n| :------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- | :----------------------- |\n| `APP_KEY`                              | Required secret for credential encryption. Must be at least 32 characters long.                                                    | `-`                      |\n| `PORT`                                 | Internal port for the Express server.                                                                                              | `7171 prod / 3000 dev`   |\n| `CLIPARR_DATA_DIR`                     | Directory for SQLite storage.                                                                                                      | `/data`                  |\n| `CLIPARR_LOG_LEVEL`                    | Server log level. Supports trace, debug, info, warning, error, and fatal. Defaults to debug in development and info in production. | `debug/info`             |\n| `CLIPARR_LOG_FORMAT`                   | Production server console log format. Development console logs are always JSON.                                                    | `json dev / pretty prod` |\n| `CLIPARR_LOG_FILE`                     | Optional path for a rotating server log file. Relative paths resolve from the server working directory.                            | `-`                      |\n| `CLIPARR_LOG_FILE_FORMAT`              | Optional log file format. Defaults to CLIPARR_LOG_FORMAT when set, otherwise json.                                                 | `json`                   |\n| `CLIPARR_LOG_FILE_MAX_SIZE`            | Maximum size for each rotating server log file. Supports kb, mb, and gb suffixes.                                                  | `10mb`                   |\n| `CLIPARR_LOG_FILE_MAX_FILES`           | Total number of rotating server log files to keep, including the active file.                                                      | `5`                      |\n| `CLIPARR_ALLOW_LOOPBACK_JELLYFIN_URLS` | Allow Jellyfin URLs that resolve to localhost or loopback. Use only for trusted self-hosted setups.                                | `false`                  |\n\n\u003c!-- CLIPARR_DOCS_SYNC:configuration:end --\u003e\n\nWhen running behind a reverse proxy, preserve the `Host` header and pass `X-Forwarded-Proto`. Cliparr trusts loopback, link-local, and private-LAN proxy ranges directly in the app, so typical Caddy/Nginx/Traefik setups on the same network do not need extra app configuration. Caddy already forwards the needed headers.\n\nCliparr does not include a full app-level user or permission system. If you need to limit who can open the app, keep it on a trusted network or put it behind an authenticated reverse proxy. See the [access control guide](https://cliparr.dev/docs/access-control) for recommended deployment patterns.\n\n## Development\n\nWe welcome contributions! To get started with a local development environment:\n\n1. **Clone**: `git clone https://github.com/techsquidtv/cliparr.git`\n2. **Setup**: `cp .env.example .env` (and fill in `APP_KEY`)\n3. **Install**: `pnpm install`\n4. **Run**: `pnpm dev`\n\nThe optional Docker dev stack (`docker-compose.dev.yml`) seeds Plex and Jellyfin with Sintel, a Blender open movie with embedded subtitle tracks. Run `pnpm docker:dev:build` after Dockerfile or dependency changes, then `pnpm docker:dev:up` to start the stack. The seed is skipped when `CI=true` or `GITHUB_ACTIONS=true` so CI jobs do not download the large test movie. If you previously used the old Big Buck Bunny seed, recreate the `cliparr-dev-media`, `plex-config`, and `jellyfin-config` Docker volumes to force a clean library scan.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for more detailed guidance.\n\n## License\n\nCliparr is released under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechsquidtv%2Fcliparr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftechsquidtv%2Fcliparr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechsquidtv%2Fcliparr/lists"}