AeternaLabsHQ/pullmd

Self-hosted URL- and file-to-Markdown service for humans and AI agents - web pages, documents, images, audio, YouTube. PWA + REST + MCP + Claude Code skill, Reddit-aware, refreshable share links.

PullMD – 셀프 호스팅 URL-to-Markdown 서비스

기능 설명

PullMD는 공개 URL(또는 업로드된 파일)을 깔끔한 Markdown으로 변환하는 셀프 호스팅 웹 서비스입니다. 다음 소스를 지원합니다:

  • 일반 웹 페이지(Cloudflare Markdown, Mozilla Readability, Trafilatura 또는 헤드리스 Chromium 폴백 사용)
  • 전체 댓글 트리가 포함된 Reddit 및 Hacker News 스레드
  • PDF, Word, PowerPoint, Excel, EPUB과 같은 문서
  • 이미지 및 오디오(OpenAI 호환 비전 또는 음성 모델을 통한 캡션/전사)
  • YouTube 동영상(제목, 설명, 전사) 결과는 메타데이터(소스 URL, 가져온 날짜, 작성자 등)를 포함하는 YAML 프론트매터가 포함된 Markdown으로 반환됩니다. 32자 공유 ID를 사용하여 1시간 후 자동으로 새로 고쳐지는 캐시된 버전을 검색할 수 있습니다.

대상 사용자

  • 토큰 효율적인 일반 텍스트 표현이 필요한 AI 에이전트
  • 온프레미스에서 콘텐츠를 가져와 정규화하려는 RAG 파이프라인을 구축하는 개발자
  • 광고와 보일러플레이트를 제거하는 개인 '나중에 읽기' 서비스를 원하는 파워 유저
  • 공개 요약 서비스에 대한 프라이빗하고 제어 가능한 대안이 필요한 팀

시작하기

  1. Docker Compose를 설치합니다.
  2. README에 제공된 원라이너를 실행합니다:
    mkdir pullmd && cd pullmd
    curl -O https://raw.githubusercontent.com/AeternaLabsHQ/pullmd/main/docker-compose.yml
    docker compose up -d
    
  3. 브라우저에서 http://localhost:3000을 엽니다. .env 파일은 필요하지 않으며 기본적으로 포트 3000에서 수신 대기합니다.
  4. (선택 사항) 인증, OCR 키 또는 프록시 설정을 사용자 지정하려면 .env를 추가합니다.

주요 기술 세부 사항

  • 아키텍처 – 기본 PullMD 컨테이너는 세 가지 선택적 사이드카 서비스를 조정합니다:
    • trafilatura – 정적 HTML에서 기본 기사 본문을 추출합니다.
    • playwright – JavaScript가 많은 페이지용 헤드리스 Chromium/Firefox/WebKit 렌더러.
    • markitdown – 업로드된 문서, 이미지, 오디오 및 YouTube 동영상을 Markdown으로 변환합니다. 이러한 사이드카는 기본적으로 시작되지만 일반 웹 페이지 추출만 필요한 경우 생략할 수 있습니다.
  • 출력 형식(v3) – 기본적으로 Markdown 본문에는 제목과 콘텐츠만 포함됩니다. 기타 모든 정보(URL, 가져온 날짜, Reddit 통계, OCR/모델 사용 등)는 YAML 프론트매터에 저장되어 다운스트림 LLM 호출의 토큰 수를 줄입니다. 레거시 인라인 헤더는 PULLMD_SOURCE_HEADER=true로 다시 활성화할 수 있습니다.
  • 보안 – 내장 SSRF 보호 기능이 사설 네트워크 대상을 차단합니다. 속도 제한, 인증 모드(disabled, single-admin, multi-user) 및 선택적 가입 제어는 환경 변수로 구성할 수 있습니다.
  • 확장성 – 사용자는 사용자 지정 사이트 레시피(JSON-LD를 프론트매터로, 사용자 지정 선택기)를 추가하고 PULLMD_FRONTMATTER_FIELDS로 출력되는 프론트매터 필드를 제어할 수 있습니다.
  • 성능 – 캐시는 SQLite 파일(/data/cache.db)에 결과를 저장합니다. 캐시 보존 기간, 크기 제한 및 너무 짧은 추출을 감지하는 '커버리지 가드'는 모두 조정할 수 있습니다.

대안을 고려해야 할 경우

  • 빠른 일회성 변환만 필요한 경우 Mercury 또는 브라우저 확장 프로그램과 같은 공개 서비스가 더 빠를 수 있습니다.
  • 대규모 고처리량 크롤링에는 전용 스크래퍼 프레임워크(예: Scrapy)를 별도의 Markdown 렌더러와 결합하는 것이 더 적합할 수 있습니다.
  • 원시 Markdown보다 심층적인 의미 요약이 필요한 경우 PullMD 출력 위에 LLM이 필요합니다.

위 정보는 모두 리포지토리의 README에서 직접 가져온 것이며 외부 가정은 추가되지 않았습니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트