Communitygithub.com

HaoboYang0327/Zotero-to-Notebooklm

로컬 Zotero 첨부 파일을 NotebookLM으로 가져오는 Codex 스킬입니다. 자동 로그인, 제목 필터링, 지원 형식 검증 및 50개 파일 분할 업로드를 지원합니다.

Zotero-to-Notebooklm란 무엇인가요?

이 스킬은 Zotero 컬렉션의 로컬 첨부 파일을 NotebookLM으로 가져오는 프로세스를 자동화하는 Codex 기능입니다. 사용자가 Zotero 데이터베이스에서 컬렉션을 선택하고, 원하는 항목을 제목으로 필터링하거나 지원되는 파일 형식(PDF, DOCX, TXT 등)을 지정할 수 있습니다. 스크립트는 NotebookLM CLI 도구(nlm)의 로그인 상태를 자동으로 확인하고 필요한 경우 재로그인을 수행하며, 최대 50개의 파일을 하나의 노트북으로 분할 업로드하여 NotebookLM의 제한을 준수합니다. 이미 업로드된 파일은 건너뛰는 멱등성(idempotent) 동작을 제공하며, 지원되지 않는 파일 형식은 업로드 전에 로컬에서 즉시 거부하여 오류를 방지합니다. 이 모든 과정은 하나의 명령어로 실행되며, 결과 요약을 통해 업로드된 파일과 건너뛴 파일의 수를 확인할 수 있습니다.

지원 대상~Claude Code✓Codex CLI~Cursor
npx skills add HaoboYang0327/Zotero-to-Notebooklm

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

NotebookLM Zotero 가져오기

Zotero 컬렉션의 로컬 첨부 파일을 NotebookLM으로 가져옵니다. 결정론적 이름 지정, 재실행 안전 동작 및 기본 PDF 필터링을 제공합니다.

워크플로우를 인라인으로 다시 구현하지 말고 번들된 스크립트를 사용하세요.

전제 조건

가져오기 전에 다음 사항을 확인하세요:

  • nlm이 설치되어 있고 PATH에 있어야 합니다.
  • Zotero 데이터가 로컬에 존재해야 합니다. 일반적으로 ~/Zotero/zotero.sqlite 및 ~/Zotero/storage에 위치합니다.

일반 사용 시 인증을 수동으로 미리 확인하지 마세요. 스크립트는 항상 먼저 nlm login --check를 실행하고, 세션이 없거나 만료된 경우 자동으로 nlm login을 실행합니다.

워크플로우

  1. uv run으로 가져오기 도구를 실행합니다.
uv run ~/.codex/skills/notebooklm-zotero-import/scripts/import_zotero_to_notebooklm.py \
  --collection "Limit Order Book" \
  --notebook-base "LOB_TTT"
  1. 스크립트가 전체 워크플로우를 수행하도록 합니다:
  • nlm 로그인 상태 확인 및 필요 시 nlm login 실행
  • Zotero SQLite를 읽기 전용 불변 모드로 열기
  • 정확한 이름으로 컬렉션 찾기
  • 하위 컬렉션 탐색
  • --title-match로 정규화된 제목 부분 문자열을 기준으로 Zotero 항목 선택적 좁히기
  • 각 첨부 파일을 Zotero 스토리지의 실제 파일로 확인
  • NotebookLM이 지원하는 로컬 업로드 확장자만 유지; 기본값 pdf
  • 업로드를 최대 50개 파일의 노트북 샤드로 분할
  • 같은 이름의 기존 노트북이 하나만 존재하면 재사용
  • 정규화된 제목 및 파일 이름을 기준으로 대상 노트북에 이미 있는 파일 건너뛰기
  • nlm source add --file ... --wait를 통해 누락된 파일 업로드

스크립트는 NotebookLM의 공식 로컬 업로드 목록에 없는 확장자에 대해 즉시 실패합니다. 2026년 4월 21일 기준 해당 목록은 다음과 같습니다:

  • 문서: pdf, docx, txt, md, csv, pptx, epub
  • 이미지: avif, bmp, gif, heic, heif, ico, jp2, jpe, jpeg, jpg, png, tif, tiff, webp
  • 오디오 및 미디어: 3g2, 3gp, aac, aif, aifc, aiff, amr, au, avi, cda, m4a, mid, mp3, mp4, mpeg, ogg, opus, ra, ram, snd, wav, wma

이 세트 외부의 확장자(예: mlx)는 업로드 전에 로컬에서 거부됩니다.

  1. 최종 요약에서 다음 내용을 확인합니다:
  • 사용된 노트북
  • 업로드된 파일
  • 이미 존재하여 건너뛴 파일
  • 실패한 경우

이름 지정 규칙

  • 컬렉션이 하나의 노트북에 들어갈 때는 기본 이름을 그대로 사용합니다.
  • 컬렉션에 여러 노트북이 필요할 때는 _01, _02, ... 접미사를 사용합니다.
  • 대상 제목과 정확히 일치하는 노트북이 하나만 있을 때만 기존 노트북을 재사용합니다.
  • Zotero 컬렉션 이름이 모호하거나 여러 노트북이 같은 제목을 공유하는 경우 추측하지 않고 실패합니다.

일반 명령어

컬렉션에서 기본 PDF 일치 항목 모두 가져오기:

uv run ~/.codex/skills/notebooklm-zotero-import/scripts/import_zotero_to_notebooklm.py \
  --collection "Limit Order Book" \
  --notebook-base "LOB_TTT"

컬렉션에서 특정 논문 PDF 가져오기:

uv run ~/.codex/skills/notebooklm-zotero-import/scripts/import_zotero_to_notebooklm.py \
  --collection "Limit Order Book" \
  --title-match "LiT: limit order book transformer" \
  --notebook-base "LOB_TTT_single"

컬렉션에서 특정 항목의 PDF 및 기타 지원 첨부 유형 가져오기:

uv run ~/.codex/skills/notebooklm-zotero-import/scripts/import_zotero_to_notebooklm.py \
  --collection "SGN.300" \
  --title-match "Homework_4" \
  --extension pdf \
  --extension md \
  --notebook-base "SGN300_hw4"

mlx와 같은 지원되지 않는 로컬 형식을 요청하면 스크립트가 명확한 검증 오류와 함께 즉시 중단됩니다.

기본이 아닌 NotebookLM 프로필 사용:

uv run ~/.codex/skills/notebooklm-zotero-import/scripts/import_zotero_to_notebooklm.py \
  --collection "Limit Order Book" \
  --title-match "DeepLOB" \
  --notebook-base "LOB_TTT_deeplob" \
  --profile default

로컬 Zotero 경로 재정의:

uv run ~/.codex/skills/notebooklm-zotero-import/scripts/import_zotero_to_notebooklm.py \
  --collection "Limit Order Book" \
  --notebook-base "LOB_TTT" \
  --zotero-db ~/Zotero/zotero.sqlite \
  --zotero-storage ~/Zotero/storage

리소스

  • scripts/import_zotero_to_notebooklm.py: 종단 간 가져오기 도구
  • references/workflow.md: 동작 세부 정보, 일치 규칙 및 실패 조건

관련 스킬