{"id":37909922,"url":"https://github.com/nopol10/nekocap","last_synced_at":"2026-01-16T17:18:34.831Z","repository":{"id":40728546,"uuid":"323021212","full_name":"nopol10/nekocap","owner":"nopol10","description":"Browser extension for creating \u0026 uploading community captions for YouTube, niconico and other video sharing sites.","archived":false,"fork":false,"pushed_at":"2025-11-04T15:31:56.000Z","size":14546,"stargazers_count":85,"open_issues_count":11,"forks_count":9,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-11-04T17:19:57.234Z","etag":null,"topics":["caption","captions","editor","extension","substation-alpha","subtitle","subtitles","typescript"],"latest_commit_sha":null,"homepage":"https://nekocap.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nopol10.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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":"2020-12-20T07:51:52.000Z","updated_at":"2025-11-04T15:31:39.000Z","dependencies_parsed_at":"2024-03-24T02:33:20.156Z","dependency_job_id":"a94ceef5-0152-46da-9ba0-a208356e607f","html_url":"https://github.com/nopol10/nekocap","commit_stats":null,"previous_names":[],"tags_count":73,"template":false,"template_full_name":null,"purl":"pkg:github/nopol10/nekocap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nopol10%2Fnekocap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nopol10%2Fnekocap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nopol10%2Fnekocap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nopol10%2Fnekocap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nopol10","download_url":"https://codeload.github.com/nopol10/nekocap/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nopol10%2Fnekocap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28480097,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["caption","captions","editor","extension","substation-alpha","subtitle","subtitles","typescript"],"created_at":"2026-01-16T17:18:34.751Z","updated_at":"2026-01-16T17:18:34.821Z","avatar_url":"https://github.com/nopol10.png","language":"JavaScript","readme":"\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://nekocap.com/\" target=\"_blank\" rel=\"noopener\"\u003e\n        \u003cimg src=\"https://user-images.githubusercontent.com/314281/102780389-cc03ed00-43d0-11eb-87c3-6d50a2ab5752.png\" width=\"100\" alt=\"NekoCap logo\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\u003cdiv align=\"center\"\u003e\u003csub\u003eLogo by \u003ca href=\"https://twitter.com/Iceikory\" target=\"_blank\" rel=\"noopener\"\u003e@Iceikory\u003c/a\u003e\u003c/sub\u003e\u003c/div\u003e\n\n\u003ch1 align=\"center\"\u003eNekoCap\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n![Editor](docs/editor-screenshot.jpg)\n\n![ASS captions](docs/ass-captions.jpg)\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003eA browser extension for creating, uploading and viewing community created captions on video sharing sites such as YouTube, Vimeo and niconico.\n\u003cbr/\u003e\nGet the extension:\n\u003ca href=\"https://chrome.google.com/webstore/detail/nekocap/gmopgnhbhiniibbiilmbjilcmgaocokj\" target=\"_blank\" rel=\"noopener\"\u003e\n        Chrome / Edge\n\u003c/a\u003e | \n\u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/nekocap/\" target=\"_blank\" rel=\"noopener\"\u003e\n        Firefox\n\u003c/a\u003e\n\u003cbr/\u003e\nWebsite:\n\u003ca href=\"https://nekocap.com/\" target=\"_blank\" rel=\"noopener\"\u003e\n        NekoCap.com\n\u003c/a\u003e\n\u003c/div\u003e\n\u003cbr/\u003e\n\n\u003cdiv align=\"center\"\u003e\u003cfont size=\"3\"\u003eJoin the Discord here:\u003c/font\u003e\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n\n[![Discord Chat](https://img.shields.io/discord/760819014514638888.svg)](https://discord.gg/xZ9YEXY5pd)\n\n\u003c/div\u003e\n\n## Features\n\n### Extension\n\n- Built in caption editor accessible directly from supported video sharing sites\n  - Custom caption positioning\n  - Support for hotkeys from various editing software\n  - Caption file export (SRT)\n  - More to come\n- Caption file loading (SRT, VTT, SBV, SSA, ASS, TXT supported)\n- Caption upload\n- Caption viewing\n- Advanced Substation Alpha (SSA/ASS) caption rendering\n- Caption rating system\n\n### Website\n\n- Captioned video search\n- Captioner profiles\n- Caption review page\n- Captioner moderation tools (verify, reject)\n\n### Supported sites\n\n- YouTube\n- Vimeo\n- bilibili\n- niconico\n- TVer\n- Netflix (editor disabled)\n\n## Setup for local development\n\n### Tested build environment\n\n1. Node 22.14.0\n1. Windows 10\n\n### Steps\n\n1. Run `npm ci`\n1. Copy the contents of `.env.sample` to `.env` and fill in the details.\n   - Firebase variables are used for auth\n1. Run `npm run watch` to start the webpack dev server for both the extension\n   and the NekoCap website\n1. Go to `chrome://extensions` in Chrome and load the unpacked extension from\n   the `dist/extension` folder\n1. Go to `http://localhost:12341` to access the NekoCap website\n\n### Adding fonts to be hosted from the NekoCap site for SSA/ASS rendering\n\n1. Create a folder called `fonts` in the `public` folder.\n1. Add woff2 webfonts that you want to serve from the website into that folder\n1. Modify `src/common/substation-fonts.ts` to assign font names to the\n   corresponding woff2 files in that folder.\n1. Run `npm run fontlist` to generate the `public/fontlist.json` file that will\n   be pulled by the extension and website to know which fonts are available. You\n   can serve this file and the fonts separately so that you don't have to\n   redeploy when new fonts are added.\n\n### Creating a production build\n\n1. Copy the contents of `.env.sample` to `.env.prod` and fill in the details.\n   1. Add `PRODUCTION=1` to the end of the file.\n1. Run `npm run build` to build both the extension and the website\n   - Run `npm run build:ext` to build just the extension\n   - Run `npm run build:web` to build just the website\n1. The output will be in `.next/` and `dist/extension`\n   1. License information of utilized packages will be in \\*.licenses.txt next\n      to the output javascript\n\n### Creating a Firefox extension build\n\n1. Copy the contents of `.env.sample` to `.env.prod` and fill in the details.\n   1. Add `PRODUCTION=1` to the end of the file.\n1. Run `npm run build` to build both the extension and the website\n   - Run `npm run build:ext:firefox` to build just the extension\n1. The output will be `dist/extension`\n\n### If you want to build the NekoCap website Docker image\n\n1. Follow step 1 in [Creating a production build](#creating-a-production-build)\n1. Copy the contents of `Dockerfile.sample` to `Dockerfile` and change whatever\n   is necessary.\n1. Copy the nginx template `docker/default.conf.template` to\n   `docker/default.conf` and change the configuration to suit your needs.\n1. Run `docker build` with your desired options.\n\n## Environment variables\n\nRefer to the list of environment variables\n[here](./docs/environment-variables.md).\n\n## Special thanks\n\nMany great packages helped to bring this to life but extra kudos go to these\nprojects without which NekoCap would not have been the same:\n\n- [SubtitleOctopus](https://github.com/Dador/JavascriptSubtitlesOctopus) - ASS\n  rendering\n- [React Hotkeys](https://github.com/greena13/react-hotkeys) - Easy to use\n  hotkeys (use the latest Github build and not the outdated npm one)\n- [subtitle.js](https://github.com/gsantiago/subtitle.js) - SRT and VTT parsing\n- [ass-compiler](https://github.com/weizhenye/ass-compiler) - ASS parsing\n\nTranslations:\n\n- Arabic: Adnamie\n- French: Adnamie\n- Japanese: rama_onehalf\n- Persian: Pikhosh\n- Vietnamese: Golđén\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnopol10%2Fnekocap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnopol10%2Fnekocap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnopol10%2Fnekocap/lists"}