유튜브 영상에 타임싱크 가사·번역·발음·가라오케 음정 바를 얹어 주는 로컬 서버 + Chrome 확장.
가사 텍스트만 있으면 CTC 강제 정렬(GPU 가속)로 줄·글자 단위 타이밍을 만들고, LLM으로 자연스러운 가사체 번역과 한글 독음을 붙이고, 보컬 멜로디(f0)를 전사해 노래방 스타일 음정 바까지 그려 줍니다.

가라오케 모드(PiP) — 멜로디 노트·계이름·한글 독음·가사체 번역:

┌────────────────┐ 가사 검색/생성/번역 ┌───────────────────────────┐
│ Chrome 확장 │ ◄───────────────────► │ Everyric2 서버 (FastAPI) │
│ (유튜브 오버레이) │ │ CTC 정렬 · demucs · RMVPE │
└────────────────┘ │ LLM 번역/독음 · yt-dlp │
└───────────────────────────┘
Everyric-Chrome-<버전>.zip을 받아 압축을 풉니다.chrome://extensions를 입력하고 우측 상단 개발자 모드를 켭니다.유튜브에서 곡 영상을 열면 가사 패널이 자동으로 뜹니다. 서버에 이미 등록된 곡은 즉시 표시되고, 처음 보는 곡이면 패널의 ✨ 싱크 생성 버튼으로 만들 수 있습니다. 번역을 보려면 패널 설정(⚙)에서 가사 번역 표시를 켜고 언어(한국어·English·日本語)를 고르세요 — 이후엔 제목바의 언어 칩을 눌러 언제든 바로 전환할 수 있습니다.
기본 서버 주소는 https://everyric.moref.co이며 API 키를 입력할 필요가 없습니다 — 설정의 키 칸은 비워 두세요. 가사 조회는 무제한이고, 새 싱크 생성만 이용자당 하루 15건으로 제한됩니다.
직접 서버를 구동하고 싶다면 아래 자체 호스팅 절을 참고하세요.
개인정보처리방침: https://everyric.moref.co/privacy
Everyric-Chrome-<version>.zip from Releases and unzip it.chrome://extensions and turn on Developer mode (top right).Open a song's video on YouTube and the lyrics panel opens automatically. Songs the server already knows show up instantly; for a new one, use the ✨ Generate sync button in the panel. To see translations, open the panel's settings (⚙), turn on Show translation, and pick a language (한국어 · English · 日本語) — after that, switch languages anytime with the chips in the title bar.
The default server is https://everyric.moref.co and no API key is required — leave the key field empty. Lookups are unlimited; generating a new sync is capped at 15 per user per day.
Want to run your own server instead? See Self-Hosting below.
Privacy policy: https://everyric.moref.co/privacy
Everyric-Chrome-<バージョン>.zipをダウンロードして解凍します。chrome://extensionsを開き、右上のデベロッパーモードをオンにします。YouTubeで曲の動画を開くと、歌詞パネルが自動で表示されます。サーバーに既に登録されている曲はすぐに表示され、初めての曲はパネルの**✨ 同期を生成ボタンで作成できます。 翻訳を表示するには、パネルの設定(⚙)で歌詞の翻訳を表示**をオンにし、言語(한국어・English・日本語)を選んでください — その後はタイトルバーの言語チップでいつでも切り替えられます。
デフォルトのサーバーはhttps://everyric.moref.coで、APIキーの入力は不要です — 設定のキー欄は空のままにしてください。歌詞の検索は無制限、新規同期の生成のみ1ユーザーあたり1日15件までです。
自分でサーバーを立てたい場合は、下記のセルフホスティングを参照してください。
プライバシーポリシー: https://everyric.moref.co/privacy
everyric2-chrome/)everyric2/)AE 플러그인은 별도 비공개 저장소로 이전되었습니다. 이 저장소에서는 AE 소스와 ZXP를 배포하지 않습니다.
빌드된 배포본은 Releases에서 받을 수 있습니다:
| 구성 요소 | 파일 | 설치 |
|---|---|---|
| Chrome 확장 | Everyric-Chrome-<버전>.zip | 압축 해제 → chrome://extensions → 개발자 모드 → 압축해제된 확장 프로그램 로드 |
| 서버/엔진 | everyric2-<버전>-py3-none-any.whl | pip install <경로/URL> (소스 설치는 아래 자체 호스팅 참고) |
기본 서버(everyric.moref.co) 대신 직접 서버를 구동하고 싶은 경우입니다. 그냥 확장을 쓰고
싶다면 위 설치 안내만으로 충분합니다 — 이 절은 필요 없습니다.
요구 사항: Python 3.10+, ffmpeg, (권장) CUDA GPU
git clone https://github.com/onpe5679/Everyric2.git
cd Everyric2
pip install uv && uv sync # 또는 pip install -e ".[all]"
# GPU (RTX 50xx는 cu128 필수)
uv pip install "torch==2.8.0+cu128" --index-url https://download.pytorch.org/whl/cu128
# 멜로디 전사용 RMVPE 가중치 (선택 — 없으면 FCPE 자동 폴백)
# hf_hub_download("lj1995/VoiceConversionWebUI", "rmvpe.pt") → models/rmvpe/rmvpe.pt
uv run uvicorn everyric2.server.main:app --port 8000 # 기본 127.0.0.1(로컬 전용)
번역·독음을 쓰려면 API 키 하나를 설정합니다 (없으면 무료 웹 번역 폴백 — 발음표기 불가):
# 둘 중 하나
export GEMINI_API_KEY=...
export NVIDIA_API_KEY=nvapi-... # 또는 저장소 루트에 nvapi.txt (gitignore됨)
⚠️ 보안 경고 — 외부에 노출하기 전에 반드시 읽으세요
서버 기본 bind는
127.0.0.1(로컬 전용, 인증 없음)입니다.--host 0.0.0.0등으로 LAN·공인망에 노출한다면EVERYRIC_SERVER_API_KEY를 반드시 설정하세요. CORS 설정(chrome-extension://오리진만 허용)은 브라우저가 보내는 요청만 막을 뿐,curl이나 스크립트로 직접 호출하는 요청은 Origin 헤더 자체가 없어 CORS와 무관하게 통과합니다 — 즉 CORS는 노출된 서버를 지켜주지 않습니다.공개 배포에는 추가로
EVERYRIC_SERVER_ADMIN_API_KEY와EVERYRIC_SERVER_DAILY_DESTRUCTIVE_LIMIT(기본 2)를 함께 설정하는 것을 권장합니다 — 강제 재생성·싱크 초기화 같은 파괴적 행위를 영상당 하루 한도로 제한하고, 어드민 키 보유자만 무제한으로 둘 수 있습니다.
자체 서버를 확장에 연결하려면 소스에서 빌드하거나(아래) Releases의
Everyric-Chrome-<버전>.zip을 그대로 씁니다:
cd everyric2-chrome
npm install && npm run build
chrome://extensions → 개발자 모드 → 압축해제된 확장 프로그램 로드 → everyric2-chrome/dist 선택.
설정(⚙)에서 서버 URL을 자체 서버 주소로 바꾸고, 처음 한 번은 확장의 권한 설정 페이지에서
로컬(또는 자체 도메인) 접근을 허용해야 합니다 — 기본 서버(everyric.moref.co)만 쓰는 대부분의
설치에는 필요 없는 절차입니다.
Windows에서 서버 URL은
http://127.0.0.1:8000을 쓰세요 —localhost는 IPv6 선시도로 요청당 ~2초 지연될 수 있습니다.
| 메서드 | 경로 | 설명 |
|---|---|---|
| GET | /health | 상태·GPU 확인 |
| GET | /api/sync/{video_id} | 저장된 싱크 조회 (템포·키·사용자 오프셋 포함) |
| POST | /api/sync/generate | 싱크 생성 잡 등록 (같은 영상·가사 진행 중이면 합류) |
| POST | /api/sync/regenerate | 캐시 무시 재생성 (force) |
| DELETE | /api/sync/{video_id} | 이 영상 싱크 초기화 |
| POST/DELETE | /api/sync/link | inst·커버 → 원본 싱크 링크/해제 (rate: 원곡 대비 재생 배속, nightcore 커버용, 기본 1.0) |
| PUT | /api/sync/offset/{video_id} | 영상별 사용자 오프셋 저장 |
| GET | /api/job/{job_id} | 잡 진행률 (단계명 + 단계 내 %) |
| POST | /api/job/{job_id}/cancel | 진행/대기 중 잡 취소 (단계 경계에서 중단) |
| POST | /api/translate | LLM 번역 + 한글 독음 (가나 혼입 자동 검증·재시도, 입력 상한 400줄/줄당 1000자/전체 15000자 — 초과 시 422) |
| GET | /api/captions/{video_id} | 유튜브 자막 트랙 목록 (yt-dlp 경유) |
다운로드(yt-dlp) → 캐시 확인 → 보컬 분리(demucs)
→ 전사 정렬(CTC, 보컬 스템에서) → 타이밍 보정(VAD)
→ 멜로디 분석(RMVPE f0 → 노트·키) → 저장
보컬 분리를 정렬보다 먼저 수행해 CTC가 반주 없는 깨끗한 보컬 스템으로 정렬합니다 (EVERYRIC_ALIGNMENT_ALIGN_ON_VOCALS, 기본 true — demucs 미가용 시 원본 믹스로 폴백). 분리 결과는 타이밍 보정(VAD)과 멜로디 전사에도 그대로 재사용됩니다.
접두사별 pydantic-settings — 전체 목록은 everyric2/config/settings.py.
| 변수 | 기본 | 설명 |
|---|---|---|
EVERYRIC_ALIGNMENT_USE_PRONUNCIATION | true | 독음(ko) 정렬 경로 (발음 커버리지 ≥90%일 때) |
EVERYRIC_ALIGNMENT_ALIGN_ON_VOCALS | true | demucs 보컬 스템으로 CTC 정렬 (원 설계 복원 — false면 원본 믹스로 정렬) |
EVERYRIC_ALIGNMENT_STAR_GUARD_SPLICE | true | star-swallow 가드 발동 시 전곡 폴백 대신 간주 전 ko + 간주 후 원문 정렬 스플라이스 |
EVERYRIC_MELODY_ENABLED | true | 멜로디 노트 전사 |
EVERYRIC_MELODY_F0_MODEL | rmvpe | f0 백엔드 (rmvpe/fcpe) |
EVERYRIC_MELODY_KEY_DETECT / KEY_SNAP | true | 곡 키 추정 / 스케일 기반 노트 보정 |
EVERYRIC_TRANSLATION_ENGINE | gemini | gemini / nvidia / openai / local (키 없으면 자동 전환) |
EVERYRIC_AUDIO_SOURCE_ADDRESS | - | 다운로드 회선 바인딩 (403 스로틀 우회) |
EVERYRIC_SERVER_API_KEY | - | 설정 시 모든 /api 요청에 X-API-Key 헤더 요구 (/health 제외). 공인망 노출 시 필수 |
EVERYRIC_SERVER_MAX_JOB_AUDIO_SEC | 1800 | 싱크 생성 허용 최대 오디오 길이(초). 초과 영상은 다운로드 직후 친절히 실패 (0=무제한) |
EVERYRIC_SERVER_ADMIN_API_KEY | - | 설정 시 파괴적 행위(재생성·초기화)에 일일 한도 적용, 이 키는 면제 |
EVERYRIC_SERVER_DAILY_DESTRUCTIVE_LIMIT | 2 | 비어드민의 영상당 24시간 한도 |
공개 배포 시 권장 설정은 위의 보안 경고 참고.
파일 기반 워크플로도 그대로 지원합니다:
# 정렬 + 번역 + 발음 + 디버그 출력
everyric2 sync audio.wav lyrics.txt --engine ctc --language ja --translate --pronunciation --debug
# 프로젝트 파일(.everyric.json)로 재분할 (정렬 재실행 없이)
everyric2 reprocess output.everyric.json --segment-mode word
SRT(원본/번역/발음/통합) 다중 출력, Line/Word/Character 분할, 무성 간격 병합, 간주 감지, 로컬 LLM(Ollama/LM Studio) 연동 등 — 전체 옵션은 everyric2 sync --help.
가사는 실제로 불리는 내용과 일치해야 합니다. 다음 경우 정렬이 어려울 수 있습니다:
uv run pytest tests -q # 서버 테스트
uv run ruff check everyric2 # 린트
cd everyric2-chrome && npm run build # 확장 (tsc + vite)
docs/research/docs/PRD_CHROME_EXTENSION.md, 고급 기능 스펙: docs/advanced-features-spec.mdperion5679@naver.com · 디스코드 onpe (라이선스 조건이 아닌 비구속 요청 — NOTICE 참고 / This is a non-binding courtesy request, not a license condition — see NOTICE)16 commits
9 commits
Python
73.8%
TypeScript
16.1%
JavaScript
7.4%
CSS
1.4%
유튜브 영상에 타임싱크 가사·번역·발음·가라오케 음정 바를 얹어 주는 로컬 서버 + Chrome 확장.
가사 텍스트만 있으면 CTC 강제 정렬(GPU 가속)로 줄·글자 단위 타이밍을 만들고, LLM으로 자연스러운 가사체 번역과 한글 독음을 붙이고, 보컬 멜로디(f0)를 전사해 노래방 스타일 음정 바까지 그려 줍니다.

가라오케 모드(PiP) — 멜로디 노트·계이름·한글 독음·가사체 번역:

┌────────────────┐ 가사 검색/생성/번역 ┌───────────────────────────┐
│ Chrome 확장 │ ◄───────────────────► │ Everyric2 서버 (FastAPI) │
│ (유튜브 오버레이) │ │ CTC 정렬 · demucs · RMVPE │
└────────────────┘ │ LLM 번역/독음 · yt-dlp │
└───────────────────────────┘
Everyric-Chrome-<버전>.zip을 받아 압축을 풉니다.chrome://extensions를 입력하고 우측 상단 개발자 모드를 켭니다.유튜브에서 곡 영상을 열면 가사 패널이 자동으로 뜹니다. 서버에 이미 등록된 곡은 즉시 표시되고, 처음 보는 곡이면 패널의 ✨ 싱크 생성 버튼으로 만들 수 있습니다. 번역을 보려면 패널 설정(⚙)에서 가사 번역 표시를 켜고 언어(한국어·English·日本語)를 고르세요 — 이후엔 제목바의 언어 칩을 눌러 언제든 바로 전환할 수 있습니다.
기본 서버 주소는 https://everyric.moref.co이며 API 키를 입력할 필요가 없습니다 — 설정의 키 칸은 비워 두세요. 가사 조회는 무제한이고, 새 싱크 생성만 이용자당 하루 15건으로 제한됩니다.
직접 서버를 구동하고 싶다면 아래 자체 호스팅 절을 참고하세요.
개인정보처리방침: https://everyric.moref.co/privacy
Everyric-Chrome-<version>.zip from Releases and unzip it.chrome://extensions and turn on Developer mode (top right).Open a song's video on YouTube and the lyrics panel opens automatically. Songs the server already knows show up instantly; for a new one, use the ✨ Generate sync button in the panel. To see translations, open the panel's settings (⚙), turn on Show translation, and pick a language (한국어 · English · 日本語) — after that, switch languages anytime with the chips in the title bar.
The default server is https://everyric.moref.co and no API key is required — leave the key field empty. Lookups are unlimited; generating a new sync is capped at 15 per user per day.
Want to run your own server instead? See Self-Hosting below.
Privacy policy: https://everyric.moref.co/privacy
Everyric-Chrome-<バージョン>.zipをダウンロードして解凍します。chrome://extensionsを開き、右上のデベロッパーモードをオンにします。YouTubeで曲の動画を開くと、歌詞パネルが自動で表示されます。サーバーに既に登録されている曲はすぐに表示され、初めての曲はパネルの**✨ 同期を生成ボタンで作成できます。 翻訳を表示するには、パネルの設定(⚙)で歌詞の翻訳を表示**をオンにし、言語(한국어・English・日本語)を選んでください — その後はタイトルバーの言語チップでいつでも切り替えられます。
デフォルトのサーバーはhttps://everyric.moref.coで、APIキーの入力は不要です — 設定のキー欄は空のままにしてください。歌詞の検索は無制限、新規同期の生成のみ1ユーザーあたり1日15件までです。
自分でサーバーを立てたい場合は、下記のセルフホスティングを参照してください。
プライバシーポリシー: https://everyric.moref.co/privacy
everyric2-chrome/)everyric2/)AE 플러그인은 별도 비공개 저장소로 이전되었습니다. 이 저장소에서는 AE 소스와 ZXP를 배포하지 않습니다.
빌드된 배포본은 Releases에서 받을 수 있습니다:
| 구성 요소 | 파일 | 설치 |
|---|---|---|
| Chrome 확장 | Everyric-Chrome-<버전>.zip | 압축 해제 → chrome://extensions → 개발자 모드 → 압축해제된 확장 프로그램 로드 |
| 서버/엔진 | everyric2-<버전>-py3-none-any.whl | pip install <경로/URL> (소스 설치는 아래 자체 호스팅 참고) |
기본 서버(everyric.moref.co) 대신 직접 서버를 구동하고 싶은 경우입니다. 그냥 확장을 쓰고
싶다면 위 설치 안내만으로 충분합니다 — 이 절은 필요 없습니다.
요구 사항: Python 3.10+, ffmpeg, (권장) CUDA GPU
git clone https://github.com/onpe5679/Everyric2.git
cd Everyric2
pip install uv && uv sync # 또는 pip install -e ".[all]"
# GPU (RTX 50xx는 cu128 필수)
uv pip install "torch==2.8.0+cu128" --index-url https://download.pytorch.org/whl/cu128
# 멜로디 전사용 RMVPE 가중치 (선택 — 없으면 FCPE 자동 폴백)
# hf_hub_download("lj1995/VoiceConversionWebUI", "rmvpe.pt") → models/rmvpe/rmvpe.pt
uv run uvicorn everyric2.server.main:app --port 8000 # 기본 127.0.0.1(로컬 전용)
번역·독음을 쓰려면 API 키 하나를 설정합니다 (없으면 무료 웹 번역 폴백 — 발음표기 불가):
# 둘 중 하나
export GEMINI_API_KEY=...
export NVIDIA_API_KEY=nvapi-... # 또는 저장소 루트에 nvapi.txt (gitignore됨)
⚠️ 보안 경고 — 외부에 노출하기 전에 반드시 읽으세요
서버 기본 bind는
127.0.0.1(로컬 전용, 인증 없음)입니다.--host 0.0.0.0등으로 LAN·공인망에 노출한다면EVERYRIC_SERVER_API_KEY를 반드시 설정하세요. CORS 설정(chrome-extension://오리진만 허용)은 브라우저가 보내는 요청만 막을 뿐,curl이나 스크립트로 직접 호출하는 요청은 Origin 헤더 자체가 없어 CORS와 무관하게 통과합니다 — 즉 CORS는 노출된 서버를 지켜주지 않습니다.공개 배포에는 추가로
EVERYRIC_SERVER_ADMIN_API_KEY와EVERYRIC_SERVER_DAILY_DESTRUCTIVE_LIMIT(기본 2)를 함께 설정하는 것을 권장합니다 — 강제 재생성·싱크 초기화 같은 파괴적 행위를 영상당 하루 한도로 제한하고, 어드민 키 보유자만 무제한으로 둘 수 있습니다.
자체 서버를 확장에 연결하려면 소스에서 빌드하거나(아래) Releases의
Everyric-Chrome-<버전>.zip을 그대로 씁니다:
cd everyric2-chrome
npm install && npm run build
chrome://extensions → 개발자 모드 → 압축해제된 확장 프로그램 로드 → everyric2-chrome/dist 선택.
설정(⚙)에서 서버 URL을 자체 서버 주소로 바꾸고, 처음 한 번은 확장의 권한 설정 페이지에서
로컬(또는 자체 도메인) 접근을 허용해야 합니다 — 기본 서버(everyric.moref.co)만 쓰는 대부분의
설치에는 필요 없는 절차입니다.
Windows에서 서버 URL은
http://127.0.0.1:8000을 쓰세요 —localhost는 IPv6 선시도로 요청당 ~2초 지연될 수 있습니다.
| 메서드 | 경로 | 설명 |
|---|---|---|
| GET | /health | 상태·GPU 확인 |
| GET | /api/sync/{video_id} | 저장된 싱크 조회 (템포·키·사용자 오프셋 포함) |
| POST | /api/sync/generate | 싱크 생성 잡 등록 (같은 영상·가사 진행 중이면 합류) |
| POST | /api/sync/regenerate | 캐시 무시 재생성 (force) |
| DELETE | /api/sync/{video_id} | 이 영상 싱크 초기화 |
| POST/DELETE | /api/sync/link | inst·커버 → 원본 싱크 링크/해제 (rate: 원곡 대비 재생 배속, nightcore 커버용, 기본 1.0) |
| PUT | /api/sync/offset/{video_id} | 영상별 사용자 오프셋 저장 |
| GET | /api/job/{job_id} | 잡 진행률 (단계명 + 단계 내 %) |
| POST | /api/job/{job_id}/cancel | 진행/대기 중 잡 취소 (단계 경계에서 중단) |
| POST | /api/translate | LLM 번역 + 한글 독음 (가나 혼입 자동 검증·재시도, 입력 상한 400줄/줄당 1000자/전체 15000자 — 초과 시 422) |
| GET | /api/captions/{video_id} | 유튜브 자막 트랙 목록 (yt-dlp 경유) |
다운로드(yt-dlp) → 캐시 확인 → 보컬 분리(demucs)
→ 전사 정렬(CTC, 보컬 스템에서) → 타이밍 보정(VAD)
→ 멜로디 분석(RMVPE f0 → 노트·키) → 저장
보컬 분리를 정렬보다 먼저 수행해 CTC가 반주 없는 깨끗한 보컬 스템으로 정렬합니다 (EVERYRIC_ALIGNMENT_ALIGN_ON_VOCALS, 기본 true — demucs 미가용 시 원본 믹스로 폴백). 분리 결과는 타이밍 보정(VAD)과 멜로디 전사에도 그대로 재사용됩니다.
접두사별 pydantic-settings — 전체 목록은 everyric2/config/settings.py.
| 변수 | 기본 | 설명 |
|---|---|---|
EVERYRIC_ALIGNMENT_USE_PRONUNCIATION | true | 독음(ko) 정렬 경로 (발음 커버리지 ≥90%일 때) |
EVERYRIC_ALIGNMENT_ALIGN_ON_VOCALS | true | demucs 보컬 스템으로 CTC 정렬 (원 설계 복원 — false면 원본 믹스로 정렬) |
EVERYRIC_ALIGNMENT_STAR_GUARD_SPLICE | true | star-swallow 가드 발동 시 전곡 폴백 대신 간주 전 ko + 간주 후 원문 정렬 스플라이스 |
EVERYRIC_MELODY_ENABLED | true | 멜로디 노트 전사 |
EVERYRIC_MELODY_F0_MODEL | rmvpe | f0 백엔드 (rmvpe/fcpe) |
EVERYRIC_MELODY_KEY_DETECT / KEY_SNAP | true | 곡 키 추정 / 스케일 기반 노트 보정 |
EVERYRIC_TRANSLATION_ENGINE | gemini | gemini / nvidia / openai / local (키 없으면 자동 전환) |
EVERYRIC_AUDIO_SOURCE_ADDRESS | - | 다운로드 회선 바인딩 (403 스로틀 우회) |
EVERYRIC_SERVER_API_KEY | - | 설정 시 모든 /api 요청에 X-API-Key 헤더 요구 (/health 제외). 공인망 노출 시 필수 |
EVERYRIC_SERVER_MAX_JOB_AUDIO_SEC | 1800 | 싱크 생성 허용 최대 오디오 길이(초). 초과 영상은 다운로드 직후 친절히 실패 (0=무제한) |
EVERYRIC_SERVER_ADMIN_API_KEY | - | 설정 시 파괴적 행위(재생성·초기화)에 일일 한도 적용, 이 키는 면제 |
EVERYRIC_SERVER_DAILY_DESTRUCTIVE_LIMIT | 2 | 비어드민의 영상당 24시간 한도 |
공개 배포 시 권장 설정은 위의 보안 경고 참고.
파일 기반 워크플로도 그대로 지원합니다:
# 정렬 + 번역 + 발음 + 디버그 출력
everyric2 sync audio.wav lyrics.txt --engine ctc --language ja --translate --pronunciation --debug
# 프로젝트 파일(.everyric.json)로 재분할 (정렬 재실행 없이)
everyric2 reprocess output.everyric.json --segment-mode word
SRT(원본/번역/발음/통합) 다중 출력, Line/Word/Character 분할, 무성 간격 병합, 간주 감지, 로컬 LLM(Ollama/LM Studio) 연동 등 — 전체 옵션은 everyric2 sync --help.
가사는 실제로 불리는 내용과 일치해야 합니다. 다음 경우 정렬이 어려울 수 있습니다:
uv run pytest tests -q # 서버 테스트
uv run ruff check everyric2 # 린트
cd everyric2-chrome && npm run build # 확장 (tsc + vite)
docs/research/docs/PRD_CHROME_EXTENSION.md, 고급 기능 스펙: docs/advanced-features-spec.mdperion5679@naver.com · 디스코드 onpe (라이선스 조건이 아닌 비구속 요청 — NOTICE 참고 / This is a non-binding courtesy request, not a license condition — see NOTICE)16 commits
9 commits
Python
73.8%
TypeScript
16.1%
JavaScript
7.4%
CSS
1.4%