Show HN: Calibre 호환 전자책 관리 앱, Citadel
(github.com/every-day-things)- Citadel은 Calibre가 읽을 수 있는 전자책 라이브러리를 유지하면서 더 좋은 UX와 더 빠른 체감을 목표로 하는 전자책 라이브러리 관리 앱임
- 핵심 목표는 Calibre 역호환성, 사용하기 쉽고 보기 좋은 인터페이스, Calibre보다 훨씬 빠르고 절대 느리지 않은 성능임
- 현재는 초기 소프트웨어라 버그와 기능 부족이 예상되며, 충돌하거나 기본 기능이 빠져 있거나 전자책 라이브러리를 손상시킬 수 있음
- Citadel은 전자책 리더나 전자책 콘텐츠 편집기가 아니며, 파일은 기본 앱으로 열고 제목 같은 메타데이터 관리에 초점을 둠
- 안정 빌드는 Releases, 개발 빌드는 GitHub Actions에서 받을 수 있고, 개발에는 Bun과 Rust가 필요함
Citadel이 하려는 일
- Citadel은 전자책 라이브러리를 관리하는 앱이며, Calibre와의 역호환성을 핵심 전제로 삼음
- Citadel이 수정한 라이브러리는 Calibre가 읽을 수 있어야 함
- 프로젝트 목표는 세 가지임
- Calibre 역호환성: Citadel이 편집한 라이브러리를 Calibre가 읽을 수 있어야 함
- 좋은 UX: 사용하기 쉽고 보기 좋아야 함
- 성능: Calibre보다 훨씬 빠르게 느껴져야 하며, 절대 더 느려서는 안 됨
하지 않는 일
- Citadel은 전자책 리더가 아님
- 이미 좋은 전자책 리더 앱이 있으며, Citadel은 파일을 사용자의 기본 앱에서 열도록 함
- Citadel은 전자책 콘텐츠 편집기가 아님
- 제목 같은 메타데이터가 아니라 전자책 본문 콘텐츠를 편집하는 용도라면 대체재가 아님
- Calibre와 100% 기능 동등성을 목표로 하지 않음
- 주로 플러그인 영역이 해당됨
- Calibre의 일부 고급 기능은 만들지 않을 가능성이 있음
현재 상태와 다운로드
- Citadel은 매우 초기 개발 단계임
- 충돌할 수 있음
- 기본 기능이 빠져 있을 수 있음
- 전자책 라이브러리를 손상시킬 수 있음
- Calibre 라이브러리에 Citadel을 사용할 경우 정기 백업이 필요함
- 반쯤 안정적인 빌드는 Releases에서 받을 수 있음
- 개발 빌드는 GitHub Actions에서 받을 수 있음
- 어떤 버전이든 사용 중 발생한 이슈나 충돌은 보고해 달라고 안내함
macOS 설치 주의점
- macOS 빌드는 아직 서명되지 않음
Citadel.app을 직접 열면 파일이 “damaged”라는 경고가 표시됨- 파일의 Quarantine 속성을 제거하면 해결됨
- 관련 안내: Removing the Quarantine attribute from the file
- 예시 명령:
xattr -d com.apple.quarantine /Applications/Citadel.app/
개발과 빌드
- 개발 전제 조건은 Bun과 Rust 설치임
- 패키지 설치:
bun install - 개발 실행:
bun run dev # or just bun dev - 린트와 포맷 명령은 다음과 같음
- 전체 코드 포맷:
bun format - 전체 코드 포맷 검사:
bun format:check - 전체 코드 린트:
bun lint - 백엔드 포맷:
bun format:backend - 백엔드 린트:
bun lint:backend - 프론트엔드 포맷:
bun format:web - 프론트엔드 린트:
bun lint:web
- 전체 코드 포맷:
- 백엔드 없이 앱 미리보기를 실행할 수 있음
- Rust 백엔드가 없지만 존재한다고 가정하기 때문에 오류가 표시됨
bun dev:app - 프로덕션 빌드는 개발 전제 조건을 갖춘 뒤 다음 명령으로 생성함
bun install bun run build
업데이트와 관련 프로젝트
- Citadel은 앱 업데이트를 확인하고 요청 시 설치할 수 있음
- 자동 업데이트 확인은 Settings의
Auto updates: On/Off에서 비활성화할 수 있음 - 설치는 항상 명시적으로 진행되며, UI 문구는
Install and restart임 - 유지보수자 설정과 릴리스 워크플로 세부사항은
docs/updater-and-releases.md에 있음 - Citadel은 Calibre를 기준점으로 삼고 있으며, Calibre redesign Figma prototype에서 영감을 받음
댓글과 토론
Hacker News 의견들
-
"Calibre Web 같은 기존 프로젝트에 기여하지 않고 왜 새 앱을 만들었나?"라는 질문이 나올 수 있는데, 답은 그냥 만들고 싶어서임
지금은 취미 프로젝트라 기존 프로젝트 확장보다 거칠더라도 재미있게 소프트웨어를 만드는 데 더 관심이 있음. Citadel은 Calibre와 하위 호환되도록 설계돼서 Calibre Web도 계속 쓸 수 있음
백엔드도 Calibre와 맞닿는 코드를 별도 라이브러리로 분리해뒀고, 나중에는 다른 프로젝트에서도 쓸 수 있게 하려 함. Calibre 라이브러리 CLI도 가능할 듯함- 해커 포럼에서조차 이런 해명을 해야 한다는 게 조금 아쉬움. John Carmack 졸업식 연설의 좋아하는 문구가 떠오름:
"많은 분야에서 바퀴를 재발명하지 말라는 말이 거의 상식처럼 받아들여진다. 하지만 가끔은 그래도 해보라고 권하고 싶다. 그 과정만으로도 더 나아지고, 결국 더 나은 바퀴도 그렇게 나온다. 사람들이 그냥 시도하기 때문에."
https://www.youtube.com/watch?v=YOZnqjHkULc - UI를 처음부터 다시 쓰는 일을 주도하는 것도 훨씬 큰 작업일 것 같음
Calibre는 기능을 알아도 쓰기 꽤 고통스러워서, 조부모님이든 기술에 밝은 사람이든 추천하기 어렵게 만듦 - "지금은 취미 프로젝트"라는 말에서 초기 Linus Torvalds 분위기가 조금 남: "그냥 취미이고, gnu처럼 크고 전문적이진 않을 것" [0]
그래도 프로젝트가 잘되길 바람
[0] https://www.cs.cmu.edu/~awb/linux.history.html - Calibre는 전자책 관리 기능 면에서는 강자지만, 사용 경험이나 개발자 측면에서는 만족한 적이 없음. 웹에서 접근하는 호스팅 라이브러리로 설계된 적이 없고, 개인적으로는 경험이 매우 좋지 않음
더 개방적이고 현대적이며 호스팅 라이브러리를 염두에 둔 탄탄한 경쟁자가 있다면 바로 옮겨 쓸 것 같음 - "내 필요에 맞지 않고 백엔드를 완전히 다시 써야 한다"고 말하면 될 듯함. 원하는 앱의 방향이 현재 있는 것과 이렇게 다르면 이런 선택을 굳이 정당화할 필요는 없다고 봄
- 해커 포럼에서조차 이런 해명을 해야 한다는 게 조금 아쉬움. John Carmack 졸업식 연설의 좋아하는 문구가 떠오름:
-
가끔 Calibre가 보기만 더 좋았다면 사람들이 얼마나 대단한지 알아봤을 것 같다는 생각이 듦. 솔직히 그렇게 나쁘진 않고 개인적으로는 좋아하지만, 사람들이 외형을 넘어서지 못하는 듯함
- Calibre는 엄청 느리고 불안정함. 큰 라이브러리, 예를 들면 100GB 규모를 넣는 데 문자 그대로 몇 주가 걸렸고, 조금씩 나눠 추가해야 했음
계속 충돌했고 과정이 너무 느려서 별도 머신으로 옮겼음. 웹 인터페이스로 검색해보니 그것도 매우 느렸음
직관적이지 않은 UI는 말할 것도 없음. 라이브러리 역할을 한다는 것치고는 실제 도서관식 저자 가나다/알파벳 목록에도 한참 못 미침 - 내가 겪는 문제는 Calibre가 전자책 2만 권 이상에서 완전히 무너진다는 점임
대부분은 10~300권 정도일 거라는 건 이해하지만, 나는 큰 라이브러리 몇 개를 Calibre로 쓰려 했고 정말 버티지 못했음
SQLite만 고집하는 결정도 도움이 안 됨. 2016년쯤 PR을 열었지만, 유지보수자는 데이터베이스 계층을 바꾸거나 교체 가능하게 만드는 데 꽤 강하게 반대했음 - 단순히 미관뿐 아니라 전체 UI/UX를 말하는 거라면 동의함. Calibre는 매우 강력하고 기능이 많은 앱이지만, 직관적이지 않고 투박한 UI가 발목을 잡음
- 나쁘지 않은 게 아니라 실제로 나쁨. 공공도서관 같은 걸 관리하면서 모든 세부 사항을 통제하고 싶다면 괜찮을 수 있지만, 개인 라이브러리를 저장하려는 정도라면 매번 "X는 어떻게 하지?"가 너무 많음
게다가 몇 초면 calibre-web 컨테이너를 띄워 깔끔한 UI와 OPDS를 얻을 수 있는데, 왜 굳이 그 "미감"을 감수해야 하는지 모르겠음 - 가벼운 전자책 독자 입장에서 크게 동의함. Calibre에 디자이너 팀이 있었다면 훨씬 더 인기 있고 널리 쓰였을 것 같음
직관적이지 않고 UI/UX가 꽤 나쁨. 강력한 애플리케이션들이 흔히 겪는 저주를 그대로 겪는 편임
그래도 오늘 다시 써보고 익숙해질 수 있는지 보려 함. 특히 고급 사용자에게는 무료 제품치고 정말 훌륭함
- Calibre는 엄청 느리고 불안정함. 큰 라이브러리, 예를 들면 100GB 규모를 넣는 데 문자 그대로 몇 주가 걸렸고, 조금씩 나눠 추가해야 했음
-
좋은 프로젝트임. Calibre 기능은 좋아하지만 UI에는 나도 꽤 답답함을 느껴서, Apple Music 이전 iTunes와 iBooks를 섞은 듯한 인터페이스를 디자인하기 시작했음
아직 화면 하나만 만들었지만 여기서 볼 수 있음: https://www.figma.com/file/m8qaYbPSnxiFPDPbuYtz2w/Calibre-re...
핵심 질문은 Calibre의 주요 기능을 macOS 네이티브처럼 느껴지는 UI로 어떻게 보여줄 수 있을까였음
크로스 플랫폼을 목표로 하지 않는다면, 시간이 날 때 Rust 백엔드와 함께 SwiftUI 앱으로 만들어볼 수도 있겠음
Calibre 개발을 따라가며 유지보수하기는 어려울 수 있지만, 재미있는 취미 프로젝트처럼 보임- 멋져 보임. 나는 디자이너가 아니라서 다른 사람들이 사물을 어떻게 설계하는지 보는 걸 늘 고맙게 생각함. 참고할 만한 다른 작업으로 Calibre 재디자인 프로젝트들이 몇 개 있었음
특히 Kemie Guaida[1]가 Reddit에 올린 재디자인은 큰 디자인 영감이 됐고, 저장소에도 크레딧을 넣어야 해서 곧 반영할 예정임: https://old.reddit.com/r/Calibre/comments/udzumn/testing_a_n...
전체 프로젝트 개요는 여기서 볼 수 있음: https://www.figma.com/file/g4ntqXWa6C0PRGrG3WjyXM/Calibre-pr...
[1]: https://kemielikes.design/
- 멋져 보임. 나는 디자이너가 아니라서 다른 사람들이 사물을 어떻게 설계하는지 보는 걸 늘 고맙게 생각함. 참고할 만한 다른 작업으로 Calibre 재디자인 프로젝트들이 몇 개 있었음
-
어제 깨달았는데, Ubuntu 22.04에서 Kobo 리더를 연결한 뒤
/media/oakhaven/koboreader마운트 지점의root/디렉터리에 epub를 그냥 복사하면 됨. 그러면 기기의 책 목록에 나타남
왠지 Kobo에 책을 올리는 일이 복잡하다고 생각했고, 노트북에서 Kobo로 책을 옮길 때 Calibre만 썼음
Calibre에 다른 기능이 많다는 건 알지만 인터페이스가 마음에 들지 않았고, 이제 더 이상 Calibre나 비슷한 앱을 쓰지 않아도 돼서 좋음- 몇 년 전 Kindle 대신 Kobo를 산 이유 중 하나가 바로 이거였음. 연결하면 일반 USB 대용량 저장장치처럼 마운트되고, 파일을 복사하면 됨
특별한 형식도 필요 없고 ePub 같은 표준 형식이 잘 동작함
그래서 Kindle이 어떻게 계속 그렇게 인기 있는지 궁금했음. 선점 효과인지 모르겠지만, ePub와 PDF를 못 읽는 전자책 리더는 MP3와 AAC를 못 재생하는 오디오 플레이어처럼 느껴짐 - 전자책 리더로 옮기기 전에 epub를 kepubify [1]에 한 번 통과시키는 걸 추천함
[1]: https://pgaskin.net/kepubify/ - 설정한 지 오래됐지만 ssh로도 동기화할 수 있어서, 무선으로 디렉터리를 재귀 동기화할 수 있음
나는 USB로 책을 먼저 넣고, 일간 뉴스와 추가 책은 rsync로 동기화했던 것 같음. 일부 콘텐츠는 자동 수집이나 이메일 구독처럼 자동 생성돼 디렉터리에 들어갔고, 구매 후 새 책을 복사하는 것처럼 수동으로 넣은 것도 있었음
사실 아주 복잡한 문제는 아닌데, Calibre는 책을 특정 폴더 구조에 복사하는 것 말고도 훨씬 많은 일을 함 - 그게 된다는 걸 알았을 때 꽤 놀랐음. Calibre가 뭔가 특별한 일을 하는 줄 알았음. 그래서 Citadel에는 "폴더로 복사" 기능이 있음. 전자책을 외장 드라이브로 복사할 수 있음
그냥 폴더를 열어 복사/붙여넣기 하는 것보다 정말 쉬운지는 모르겠지만, Citadel은 기기에 어떤 책이 있는지 감지할 때 Calibre가 쓰는 메타데이터 파일을 갱신해서 폴더의 모든 파일을 읽지 않아도 되게 함 - Kobo는 사용하려면 계정이 필요한가? 아니면 그냥 사서 epub를 그 디렉터리에 넣고 바로 읽을 수 있나?
- 몇 년 전 Kindle 대신 Kobo를 산 이유 중 하나가 바로 이거였음. 연결하면 일반 USB 대용량 저장장치처럼 마운트되고, 파일을 복사하면 됨
-
좋아 보임. 바로 지난주에 Calibre를 다시 써보려다 그 UI라는 블랙홀에 빠졌음. UI/UX 작업을 기부할까 생각했지만 몇 년짜리 프로젝트가 될 것 같았음
대신 이 프로젝트의 UI/UX를 도울 수 있을지도 모르겠음- 여러 해 지켜본 바로는 Calibre 프로젝트는 개선을 대체로 환영하지 않는다는 인상을 받았음. Kovid Goyal은 이미 자신이 원하는 것을 갖고 있고, 다른 무언가를 원한다면 포크한 뒤 직접 유지보수해야 할 것 같음
그는 놀라운 작업을 해냈지만, 매우 강한 취향을 가진 사람 중 하나라서 다른 사람이 작업하겠다고 해도 어떤 것에는 빠르고 임의적으로 이상하게 적대적이 될 수 있음 - 나는 Calibre UI가 거슬릴 만큼 오래 쓰지 않음. 몇 달에 한 번 최대 10분 정도 씀. Epub를 가져오고, 메타데이터를 갱신하고, 기기로 보냄
몇 달 동안 책을 읽고 다시 가져오기 과정을 반복함 - 다른 관점도 있자면, 나는 Calibre UI에서 문제를 겪은 적이 없고 보통 빠르고 효율적으로 원하는 일을 끝냄
솔직히 궁금한데, Calibre만큼 기능이 풍부하면서 훨씬 더 낫고 쉬운 방식으로 제공하는 네이티브 스마트폰 앱 예시가 있나?
- 여러 해 지켜본 바로는 Calibre 프로젝트는 개선을 대체로 환영하지 않는다는 인상을 받았음. Kovid Goyal은 이미 자신이 원하는 것을 갖고 있고, 다른 무언가를 원한다면 포크한 뒤 직접 유지보수해야 할 것 같음
-
취미 프로젝트를 실제로 출시한 점이 좋음. 보기에도 깔끔함. 그리고 calibre CLI는 확실히 환영받을 듯함. 메뉴를 다섯 단계씩 클릭해 들어가는 게 싫음
"리더"와 "편집기" 영역이 명시적으로 목표가 아니라면, Citadel이 사용자에게 실제로 해주는 일은 무엇인지 궁금함. 주로 책을 보고 정렬하고 클릭하는 포털인가? 더 많은 기능을 구상한 로드맵이 있나?- 내 Calibre 주 사용처는 epub를 한곳에 모으고, 가끔 전자책 리더와 동기화하는 것이었음. 책을 추가할 때는 제목, ISBN 같은 메타데이터를 가져와야 함
Citadel은 책 제목, 저자, 나중에는 태그와 사용자 정의 열 같은 메타데이터 편집을 지원하고 이미 일부 지원함. 이건 확실함. 기기 동기화도 시간이 지나면 들어갈 것이고, 온라인 출처에서 메타데이터를 내려받는 기능도 추가될 예정임
다만 책 내용을 편집하거나 내장 전자책 리더를 넣을 계획은 없음. 이미 훌륭한 전자책 앱과 기기가 많고, epub 편집은 컬렉션 관리에 비해 흔히 쓰인다고 생각하지 않음
로드맵은 없지만 피드백과 아이디어는 늘 열려 있음
추가로 형식 변환과 DRM 제거 같은 기능도 아마 들어갈 것 같음. 이상적으로는 크레이트나 플러그인으로 구현해서 확장을 더 쉽게 만들고 싶음 - Calibre CLI가 책 컬렉션 관리를 뜻하는 것 같지만, 책 변환만 원한다면 Calibre에는 이미
ebook-convert라는 CLI가 있음. epub, pdf, azw3, mobi 등 여러 파일 형식을 지원함
예:
ebook-convert file.epub file.azw3
- 내 Calibre 주 사용처는 epub를 한곳에 모으고, 가끔 전자책 리더와 동기화하는 것이었음. 책을 추가할 때는 제목, ISBN 같은 메타데이터를 가져와야 함
-
정말 멋져 보이고 확인해볼 생각임. 아이러니하게도 최근에 같은 스택, 즉 Rust + Tauri + Svelte로 오디오북 관리용 데스크톱 앱을 만들었음
관심 있는 사람이 있을까 해서 홍보하자면: https://gitlab.com/fonner/audiobook-locker#audiobook-locker- 멋지다. 나도 예전에 몇몇 프로젝트에서 Tauri를 조금 만져봤음
이 프로젝트에 Svelte와 Tauri를 고른 이유가 궁금함. 이미 익숙했나? - 영감을 얻으려고 이 프로젝트를 살펴볼 예정임
- 멋지다. 나도 예전에 몇몇 프로젝트에서 Tauri를 조금 만져봤음
-
곁가지지만 이 실행 방식이 하루를 즐겁게 해줬음
bun dev -- -- -- -- --server ...- 무슨 일이 벌어지는 건지 궁금해졌음
-
흥미로움. 나도 한동안 비슷한 아이디어로 비슷한 프로젝트를 작업하기 시작했지만, 네이티브 앱 대신 SvelteKit과 브라우저를 선택했음
https://github.com/project-kiosk/kiosk
끝낼 만큼 동기를 오래 유지하지 못하고 있음- 좋아 보임. 계속 작업해주면 좋겠고, 써보고 싶음
-
Citadel에 대한 짧은 글: https://denhoff.ca/posts/replacing-calibre