Skip to content

Releases: jeiel85/pulpit-ink-desktop

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 22 May 23:19

Added — Tauri 하이브리드 UI 기능 parity 2차 포팅

  • 네이티브 파일/폴더 다이얼로그: tauri-plugin-dialog 도입. 오디오/원문/사용자 사전/모델 캐시 경로 입력을 절대경로 직접 입력 대신 OS 네이티브 다이얼로그로 선택할 수 있는 PathPicker 컴포넌트 신설.
  • Wavesurfer.js 기반 2단 대조 편집기: wavesurfer.js를 React 편집기 상단에 도킹하여 오디오 파형을 실시간 렌더링. 타임스탬프 클릭/더블클릭으로 해당 구간 이동/구간 재생, Tauri convertFileSrc + asset 프로토콜로 로컬 미디어 스트리밍. 세그먼트별 Fuzzy 교정 후보를 팝오버 형태로 노출하고 클릭 한 번에 edited_text에 반영 및 SQLite에 영속화.
  • 배치 큐 UI: 새 STT 변환 시 큐에 누적되고 순차적으로 사이드카에 위임. 개별 항목 진행률·상태 표시, 실패 시에도 다음 항목 계속 진행, 완료/실패 일괄 정리 버튼 제공.
  • YouTube opt-in 동의 모달: 저작권 고지 + 동의 체크박스 + URL 검증 + yt-dlp 진단/원클릭 자동 설치를 묶은 모달. 동의 후 큐에 추가하고 사이드카 transcribe가 URL을 처리.
  • Glossary(사용자 용어 사전) 탭: 사전 항목 추가/수정/삭제/검색 + CSV import/export. 사이드카 user-dict 서브명령으로 위임하며 기본 위치는 %LOCALAPPDATA%/PulpitInk/user_dict.json.
  • 업데이트 알림 배너: 앱 부팅 시 사이드카 update-check --json을 호출해 GitHub Releases 최신 버전을 확인하고, 신규 버전 존재 시 상단 배너로 표시. 사용자 dismiss는 버전 단위로 localStorage에 기록.

Added — 사이드카 IPC 보강

  • pulpit-ink user-dict list/add/remove/import/export/path [--json] — 사용자 사전 CRUD 및 CSV 입출력.
  • pulpit-ink update-check [--force] [--json] — 24시간 캐시 적용된 GitHub Releases 비교.
  • pulpit-ink youtube check/install [--json] — yt-dlp 설치 여부 진단 및 pip 자동 설치.
  • pulpit-ink segments update <id> [--edited-text/--clean-text/--speaker] [--json] — React 편집기가 호출하는 세그먼트 영속화 엔드포인트.

Changed

  • frontend/package.json / Cargo.toml / tauri.conf.json / pyproject.toml / src/pulpit_ink/__init__.py 버전을 0.5.0으로 일제히 범프.
  • Tauri 윈도우 기본 크기를 1180×760 → 1280×820으로 확장 (편집기 + 파형 도킹용 여유 확보).
  • tauri.conf.jsonsecurity.assetProtocol.enable = true로 로컬 미디어 스트리밍 활성화.

Tests

  • tests/test_cli_tauri_helpers.py 신규 8건: user-dict CRUD/CSV 라운드트립, update-check JSON, youtube check/install JSON 게이트 검증.
  • 전체 회귀: pytest 144/144 PASS, ruff 0건.

v0.4.7

Choose a tag to compare

@github-actions github-actions released this 21 May 08:29

Added

  • 프로 검수 단축키 시스템 구현 (QShortcut 기반):
    • Ctrl+Space: 오디오 재생/일시정지 토글 기능 바인딩. 한글/영어 타이핑 텍스트 입력과 충돌을 방지하기 위한 안전 조합 키 적용.
    • Ctrl+← / Ctrl+→: 테이블의 이전/다음 세그먼트(행)로 즉각 행 포커스를 이동하고, 오디오 싱크 플레이어도 해당 세그먼트의 시작 시각으로 즉시 seek 및 자동 재생 처리.
    • Ctrl+P: 현재 활성화된 세그먼트(행)의 오디오 구간만을 정밀 반복 재생.
    • Ctrl+↑ / Ctrl+↓: 재생 속도를 0.5배속에서 2.0배속 범위(0.1배속 단위)로 동적으로 제어.
    • 속도 배지 UI 피드백: 재생 속도 조절 시 플레이어 조작부 옆에 배지(Badge) 스타일로 현재 속도 값을 직관적으로 시각화.
  • Markdown 실시간 HTML 리치 뷰어 도킹:
    • 편집 테이블 하단에 텍스트 편집 영역과 함께 병렬로 작동하는 QTextBrowser 기반 실시간 리치 뷰어 구성.
    • 별도 무거운 외부 파서 라이브러리 없이 Windows SmartScreen 백신 오탐을 차단하고 바이너리 용량을 가볍게 유지하기 위해, 순수 Python 정규식 헬퍼(_markdown_to_html)로 HTML 변환 파이프라인(Bold, Italic, Strikethrough, Inline Code, 개행 및 이스케이프) 구축.
    • 세그먼트 테이블 행 포커스 변경(itemSelectionChanged) 및 사용자의 텍스트 수정(itemChanged) 즉시 실시간 Markdown 파서가 뷰어 내용을 동조/갱신하도록 신호-슬롯(Signal-Slot) 연결.
    • 하단부에 검수 단축키 목록과 속도 단축키 정보를 안내하는 미니 가이드 범례 표시줄 탑재.

Documentation

  • 차기 에이전트 세션용 기술 이관 로드맵 수립:
    • docs/roadmap-tasks.mddocs/decision-log.md 문서 내에 v0.4.7 마일스톤 작업을 전원 완료로 업데이트.
    • GitHub Issue #1 "실시간 마이크 녹음 및 실시간 오프라인 Whisper 스트리밍 STT 연동"에 대비하여, 차기 에이전트 세션이 그대로 이관받아 즉각 개발을 시작할 수 있도록 아주 정밀하고 완벽한 오프라인 아키텍처 가이드라인(sounddevice/PyAudio 하드웨어 드라이버 격리, PCM 링 버퍼 스레드 큐, Whisper 비동기 스트리밍 디코딩 및 10초 주기 원자적 플러시 세이브 세이프 가드) 설계 이관 가이드를 수립.

Tests

  • tests/test_editor_hotkeys.py 신규 추가: Ctrl+Space 재생/일시정지 토글, Ctrl+Up/Down 재생 배속 상/하한선 예외 가드 제어, Ctrl+Left/Right 행 경계 예외 가드 및 순환 제어를 철저히 검증하는 단위 테스트 3건 작성 완료.
  • pytest 전체 회귀 테스트 스위트 100% 통과 완료 (136/136 PASS).
  • ruff check . 정적 린트 경고 0건 (Perfect Clean) 달성.

v0.4.5

Choose a tag to compare

@github-actions github-actions released this 20 May 14:41

Added

  • yt-dlp 자동 진단/원클릭 설치 UI: YouTube 저작권 Disclaimer 다이얼로그에 yt-dlp 라이브러리 설치 상태를 자동 진단하는 상태 라벨과 백그라운드 워커 스레드(YtdlpInstallWorker) 기반의 원클릭 자동 설치 버튼을 추가하여, 사용자가 터미널 명령 없이 GUI에서 직접 pip install yt-dlp를 안전하게 실행할 수 있도록 통합하였습니다. 설치 진행 중에도 UI가 프리즈되지 않습니다.
  • 1시간 오디오 스트레스 테스트 및 실측 성능 프로파일 보고서: scripts/stress_test.py로 3600초 무음 WAV를 합성하여 전체 STT 파이프라인을 구동하고 psutil로 CPU/RSS를 샘플링한 뒤 docs/performance-profile.md로 결과를 자동 출력합니다. tiny 모델 기준 실측 결과는 14.07x 실시간, 평균 CPU 11.84%, 피크 RSS 1014.32 MB입니다.
  • Inno Setup 기반 Windows 인스톨러 빌드 스크립트: scripts/pulpitink.iss(다국어 한국어/영어, 데스크탑 아이콘 옵션, 64bit Program Files 설치)와 scripts/create_installer.ps1(pyproject.toml 버전 자동 감지 후 ISCC.exe 호출, 미설치 시 다운로드 안내)을 추가하여 Portable ZIP 외에 정식 설치 관리자(.exe) 산출물을 생성할 수 있게 되었습니다. 단, 코드 서명은 미적용입니다.

Tests

  • tests/test_youtube.pyinstall_yt_dlp 성공/실패 및 is_yt_dlp_available 진단 경로 단위 테스트 4건 추가.
  • tests/test_i18n.py에 yt-dlp 자동 설치 흐름용 신규 ko↔en 번역 키 회귀 테스트 1건 추가.
  • python -m pytest: 115/115 PASS
  • python -m ruff check .: PASS

v0.4.4

Choose a tag to compare

@github-actions github-actions released this 20 May 14:09

Added

  • Heuristic 화자 분리(Diarization) 파이프라인 구현: 무음구간 갭(gap > 1.5s) 기반 HeuristicDiarizer를 구현하고, CLI --diarize 옵션 및 GUI 변환 설정 체크박스를 연동하여 STT 변환 시 자동으로 화자 태그("화자 1", "화자 2")가 분리되어 할당되도록 구축하였습니다.
  • GUI 편집기 화자 열 연동 및 영속성 저장: TranscriptEditorWidget에 "화자" 편집 열(Column)을 추가하여 사용자가 테이블에서 직접 화자를 수정할 수 있게 하고, 수정 시 즉시 SQLite DB의 segments 테이블 내 speaker 컬럼에 실시간으로 영속화되도록 연동하였습니다.
  • 경량 i18n 번역 프레임워크 구축: src/pulpitink/core/utils/i18n.py에 경량 영한 번역 Dictionary 및 실시간 UI retranslate 기능을 구현하여, GUI "인터페이스 언어" 변경 시 실시간으로 영한 UI 언어가 매끄럽게 토글되도록 구축하였습니다.
  • YouTube URL 비동기 다운로드 및 저작권 Disclaimer UI: yt-dlp 기반의 비동기 오디오 다운로드 파이프라인을 구축하고, GUI 메인 화면에 "YouTube 주소 추가" 버튼 및 저작권 Disclaimer 동의 팝업 창을 추가하여, 동의 후 URL 입력 시 백그라운드 워커 스레드에서 무정지 비동기 다운로드 및 STT 변환이 순차 진행되도록 연동하였습니다.

Tests

  • tests/test_diarizer.py를 신규 추가하여 무음구간 기반 화자 전환 및 예외/빈 입력 처리를 검증하는 단위 테스트 3건 작성 완료.
  • tests/test_youtube.py를 신규 추가하여 yt-dlp 라이브러리 존재 여부별 안전 폴백 및 Mock 기반 비동기 오디오 다운로드 정확도를 검증하는 단위 테스트 2건 작성 완료.
  • tests/test_i18n.py를 신규 추가하여 전역 언어 설정 전환 및 번역/폴백 매핑 정확도를 검증하는 단위 테스트 4건 작성 완료.
  • python -m pytest: 110/110 PASS (총 110개 테스트 완료)
  • python -m ruff check .: PASS

v0.4.3

Choose a tag to compare

@github-actions github-actions released this 20 May 13:59

Added

  • PulpitInk 프리미엄 공식 아이콘 탑재: 강대상, 깃펜, 잉크 및 소리 파형을 미니멀하게 형상화한 고유의 앱 로고 png 리소스를 생성하고, 다중 규격의 pulpitink.ico 파일로 변환하여 src/pulpitink/resources 디렉토리에 통합 탑재하였습니다.
  • PyInstaller 아이콘 연동: pulpitink.specpulpitink-sidecar.spec 스펙 파일의 EXE 정의부에 고유 아이콘 리소스를 바인딩하여, 윈도우용 실행 파일 패키징 시 아이콘이 엠베딩되도록 지정하였습니다.

Fixed

  • 자모 Fuzzy 매칭 2글자 오탐 스톱워드(Stop-words) 가드 도입: 한글 자모 Fuzzy 매칭 스캔 과정 중 "에서", "하고", "그리고", "우리", "그의" 등 단순 조사 및 접속사가 임계값을 넘겨 거짓 양성(False Positive)을 유발하는 문제를 방지하기 위해 DEFAULT_STOP_WORDS 제외 가드를 설계하여 postprocess 로직의 정확도를 대폭 상향시켰습니다.

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 20 May 13:51

Added

  • CI 빌드 및 테스트 자동화 고도화: GitHub Actions Test 워크플로우 실행 시 GUI 테스트에 필수적인 PySide6rapidfuzz를 포함한 옵셔널 의존성을 일괄 설치하도록 구성 (test.yml 수정).

Fixed

  • PySide6 환경 가드 설계: 로컬 및 CLI 가상환경 중 PySide6가 누락된 환경에서도 배치 큐 관련 유닛 테스트 수집(collection) 시 크래시가 발생하지 않고, 정상적으로 스킵 처리되도록 임포트 안전장치 탑재 (tests/test_batch_queue.py 수정).

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 20 May 13:49

Added

  • 실험용/임시 디렉터리 무시 설정: Git 추적 관리를 위해 루트 내 .antigravitycli/frontend/ 디렉터리를 .gitignore에 등록 완료.

Changed

  • 알려진 제한사항 문서 최신화: docs/known-limitations.md 문서에서 0.4.0에 기구현된 최근 작업 기록 비활성화, 오디오 싱크 플레이어, 다중 작업 큐 항목을 "구현 완료 (v0.4.0 완비)" 상태로 정비.
  • 릴리즈 체크리스트 최신화: docs/release/release-checklist.md 문서에서 0.4.0 및 0.4.1 기능들에 대해 완료 체크리스트 항목을 업데이트 처리.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 20 May 13:05

Added

  • 편집기 탭 내 오디오 싱크 플레이어 연동 (Audio Sync Player):
    • TranscriptEditorWidget 내에 PySide6.QtMultimedia 기반 QMediaPlayerQAudioOutput 객체 탑재.
    • 플레이어 제어 바 UI 추가: 재생/일시정지 버튼, 수평 방향 QSlider 진행 바, 재생 시간 표시 레이블, 선택 구간 재생 버튼, 재생 싱크 스크롤 활성화 체크박스.
    • 작업 오디오 소스 자동 매핑: load_job(job_id) 호출 시 cache/jobs/<job_id>/processed.wav (전처리 캐시) 존재를 최우선 점검하고, 미발견 시 SQLite DB에서 job의 source_path를 쿼리하여 원본 미디어 재생 소스로 대체 재생.
    • 세그먼트 테이블 행 더블클릭(cellDoubleClicked) 및 "선택 구간 재생" 시 해당 세그먼트의 start_sec로 플레이어 seek 및 자동 재생.
    • 플레이어 재생 시간 변화(positionChanged) 시 현재 위치에 해당하는 테이블 행을 하이라이트(Select) 처리하며, 스크롤 싱크 옵션이 활성화된 경우 해당 행이 중앙에 오도록 자동 스크롤(scrollToItem) 연동.
  • 메인 화면 다중 작업 배치 큐 UX 개선 (Batch Queue UX):
    • 파일 큐 처리 상태 머신 구현: 대기 목록 내 아이템들에 대기 상태 문자열([대기], [진행 중], [완료], [실패])을 추가하여 실시간 시각화.
    • 순차 처리 기동 루프(_start_next_queue_item): 스레드가 완전히 해제된 시점(_on_thread_finished)에 다음 파일의 변환을 기동시켜 리소스 경합 방지.
    • 연속성 정책 반영: 다중 파일 변환 도중 특정 개별 파일 변환이 실패하더라도 전체 배치 처리를 멈추지 않고, 해당 행만 [실패] 표기 후 다음 작업을 연쇄 변환.
    • 변환 중단(Cancel) 기능: 진행 중 "변환 중단" 버튼 클릭 시 확인 다이얼로그를 통해 대기 중인 모든 큐를 일괄 파기하고 워커 스레드를 정지(terminate()).
    • 변환 진행 중 파일 추가/제거/비우기 동작 시도에 대한 안전 가드 팝업 경고 추가.

Tests

  • tests/test_batch_queue.py를 신규 추가하여, 다중 파일 배치 큐 가동, 순차 변환, 실패 시의 연속성 기동, 변환 중환 및 큐 일괄 파기 등 상태 머신 시뮬레이션 테스트 3건 작성 완료.
  • python -m pytest: 100/100 PASS (총 100개 테스트)
  • python -m ruff check .: PASS

Feature: Delete UX & Privacy Control & Doc Alignment

Added

  • 작업/캐시 삭제 기능 보강 (Delete UX):
    • CLI jobs delete <job_id> 명령어 추가: 지정된 작업 ID의 DB 데이터와 캐시 오디오 디렉터리(cache/jobs/<job_id>)를 재확인 절차를 거쳐 영구 연쇄 삭제합니다.
    • CLI jobs clean-cache 명령어 추가: DB 내 활성 작업 목록과 대조하여 등록되지 않은 방치 캐시 디렉터리(고스트 캐시)만 안전하게 일괄 정리합니다.
    • GUI 최근 작업 목록(recent_list)에 우클릭 컨텍스트 메뉴 및 "작업 및 캐시 삭제" 액션 추가: QMessageBox 대화상자로 안전하게 재확인 후 DB 레코드와 물리 캐시를 연쇄 삭제 처리하고 목록을 자동 갱신합니다.
  • 최근 작업 기록 저장 비활성화 옵션 (Privacy Control):
    • Settings 데이터클래스에 keep_history (기본값: True) 필드를 탑재하고 JSON 설정 파일 연동 및 형변환 가드 처리를 추가했습니다.
    • STT 변환 시(run_transcribe), keep_history가 False이면 persist 매개변수를 강제 비활성화하여 DB 영속화 저장을 전면 우회하도록 처리했습니다.
    • GUI 설정 그룹에 "최근 작업 기록 저장 및 표시" 체크박스 위젯을 추가하여 즉시 저장 및 리프레시되도록 했습니다. 기능 비활성화 시 목록에 고지 문구 노출 및 컨텍스트 메뉴 진입을 차단합니다.

Changed

  • Jamo Fuzzy 매칭 문서 상태 갱신 (Doc Alignment):
    • docs/design/jamo-fuzzy-matching.md 설계 노트의 상태를 구현 완료 (v1.0 완비)로 변경하고 6절에 2글자 단어 한계와 임계값 0.75~0.80 상향 조정 가이드를 보완했습니다.

Tests

  • tests/test_settings_service.pykeep_history 형변환 및 역직렬화 단위 테스트 추가.
  • tests/test_transcribe_persistence.pykeep_history가 False일 때 DB 트랜잭션 및 영속화를 생략하는지에 대한 Mocking 기반 통합 테스트 추가.
  • python -m pytest: 97/97 PASS
  • python -m ruff check .: PASS

Branding: 설교필기 PulpitInk 전체 리네이밍

Changed

  • 프로젝트 전체 브랜딩을 SermonScript에서 설교필기 (PulpitInk) 로 변경했습니다.
  • Python 패키지명: sermonscriptpulpitink, CLI 명령: pulpitink
  • GUI 타이틀바: 설교필기 (PulpitInk), QMessageBox 다이얼로그: 설교필기
  • 클래스: SermonScriptErrorPulpitInkError
  • PyInstaller spec: pulpitink.spec, pulpitink-sidecar.spec
  • 빌드 산출물: PulpitInk_Portable_*.zip, EXE: PulpitInk.exe
  • GitHub 저장소: jeiel85/sermon-scriptjeiel85/pulpitink
  • 데이터 경로: %LOCALAPPDATA%\PulpitInk\PulpitInk\
  • DB/로그: pulpitink.db, pulpitink.log
  • 환경변수: PULPITINK_ROOT

Tests

  • ruff check .: All checks passed
  • pytest: 95/95 passed

Documentation: README repository guide

Changed

  • GitHub Pages 랜딩 페이지가 별도로 생긴 뒤 README를 저장소 안내 문서 역할에 맞게 재정비했습니다.
  • 상단 대형 랜딩 이미지를 제거하고 설치, 사용, 데이터 저장 위치, 개발 검증, 프로젝트 구조 중심으로 구성했습니다.

Documentation: GitHub Pages landing

Added

  • GitHub Pages용 정적 랜딩 페이지 docs/index.html을 추가했습니다.
  • GitHub Pages에서 정적 파일을 그대로 제공하도록 docs/.nojekyll을 추가했습니다.

Changed

  • README와 프로젝트 홈페이지 URL을 https://jeiel85.github.io/pulpitink/ 기준으로 갱신했습니다.

Documentation: GitHub landing page

Changed

  • README.md를 GitHub 랜딩 페이지 역할에 맞게 갱신했습니다.
    사용자가 제공한 랜딩 이미지를 상단에 배치하고, 현재 구현된 GUI/CLI/STT/편집/Export/배포 상태를 기준으로 빠른 시작과 기능표를 정리했습니다.
  • 프로젝트 메타데이터의 GitHub URL을 실제 저장소인 https://github.com/jeiel85/pulpitink로 정정했습니다.

Added

  • docs/assets/pulpitink-landing.png 랜딩 이미지를 추가했습니다.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 20 May 08:06

Added

  • GitHub 태그(v*) push 시 Windows Portable ZIP을 빌드한 뒤 GitHub Release를 자동 생성하도록
    build-windows.yml을 정비했습니다.
  • 릴리즈 산출물과 함께 SHA256SUMS.txt를 생성해 GitHub Release에 첨부합니다.

Changed

  • 참고 프로젝트(claude-usage-tray-windows)와 동일하게 태그를 릴리즈 트리거로 삼고,
    릴리즈 본문은 CHANGELOG.md의 해당 버전 섹션에서 추출합니다.
  • 태그 버전과 pyproject.toml 버전이 다르면 릴리즈 빌드를 중단하도록 검증 단계를 추가했습니다.

Tests

  • 워크플로우 변경은 GitHub Actions 태그 push에서 검증됩니다.