Show HN: Citadel แอปจัดการอีบุ๊กที่เข้ากันได้กับ Calibre
(github.com/every-day-things)- Citadel เป็นแอปจัดการคลังอีบุ๊กที่มุ่งเน้น UX ที่ดีกว่าและความรู้สึกที่ลื่นไหลกว่า โดยยังคงรักษาคลังอีบุ๊กที่ Calibre สามารถอ่านได้
- เป้าหมายหลักคือ ความเข้ากันได้ย้อนหลังกับ Calibre, อินเทอร์เฟซที่ใช้งานง่ายและดูดี, และประสิทธิภาพที่ต้องรู้สึกว่าเร็วกว่า Calibre มากและต้องไม่ช้ากว่าเด็ดขาด
- ขณะนี้ยังเป็น ซอฟต์แวร์ระยะเริ่มต้น จึงอาจมีบั๊กและฟีเจอร์ไม่ครบ อาจแครช ขาดความสามารถพื้นฐาน หรือทำให้คลังอีบุ๊กเสียหายได้
- Citadel ไม่ใช่โปรแกรมอ่านอีบุ๊กหรือเครื่องมือแก้ไขเนื้อหาอีบุ๊ก แต่จะเปิดไฟล์ด้วยแอปเริ่มต้น และเน้นจัดการ metadata เช่น ชื่อเรื่อง
- ดาวน์โหลด stable build ได้จาก Releases, development build ได้จาก GitHub Actions และการพัฒนาต้องใช้ Bun กับ Rust
สิ่งที่ Citadel ต้องการทำ
- Citadel เป็นแอปสำหรับจัดการคลังอีบุ๊ก และตั้งต้นโดยให้ความเข้ากันได้ย้อนหลังกับ Calibre เป็นหลัก
- คลังที่ Citadel แก้ไขแล้ว Calibre ต้องสามารถอ่านได้
- เป้าหมายของโครงการมีสามข้อ
- ความเข้ากันได้ย้อนหลังกับ Calibre: Calibre ต้องสามารถอ่านคลังที่ Citadel แก้ไขได้
- UX ที่ดี: ต้องใช้งานง่ายและดูดี
- ประสิทธิภาพ: ต้องให้ความรู้สึกว่าเร็วกว่า Calibre มาก และห้ามช้ากว่าโดยเด็ดขาด
สิ่งที่ไม่ทำ
- Citadel ไม่ใช่ โปรแกรมอ่านอีบุ๊ก
- มีแอปอ่านอีบุ๊กที่ดีอยู่แล้ว และ Citadel จะเปิดไฟล์ด้วยแอปเริ่มต้นของผู้ใช้
- Citadel ไม่ใช่ เครื่องมือแก้ไขเนื้อหา อีบุ๊ก
- ถ้าต้องการแก้ไขเนื้อหาภายในตัวอีบุ๊ก ไม่ใช่ metadata อย่างชื่อเรื่อง ก็ไม่ใช่ตัวเลือกทดแทน
- ไม่ได้ตั้งเป้าให้เทียบเท่า Calibre แบบ ฟีเจอร์ครบ 100%
- โดยหลักจะเป็นส่วนของปลั๊กอิน
- ฟีเจอร์ขั้นสูงบางอย่างของ Calibre อาจจะไม่ถูกสร้างขึ้นมา
สถานะปัจจุบันและการดาวน์โหลด
- Citadel ยังอยู่ใน ช่วงพัฒนาเริ่มต้นมาก
- อาจแครชได้
- อาจขาดฟีเจอร์พื้นฐาน
- อาจทำให้คลังอีบุ๊กเสียหายได้
- หากใช้ Citadel กับคลัง Calibre ควร สำรองข้อมูลเป็นประจำ
- ดาวน์โหลด build ที่ค่อนข้างเสถียรได้จาก Releases
- ดาวน์โหลด development build ได้จาก GitHub Actions
- ขอให้รายงานปัญหาหรือการแครชที่พบไม่ว่าจะใช้เวอร์ชันใดก็ตาม
ข้อควรระวังในการติดตั้งบน macOS
- build สำหรับ macOS ยัง ไม่ได้เซ็นรับรอง
- หากเปิด
Citadel.appโดยตรง จะมีคำเตือนว่าไฟล์ “damaged” - แก้ได้โดยลบคุณสมบัติ Quarantine ของไฟล์
- คำแนะนำที่เกี่ยวข้อง: Removing the Quarantine attribute from the file
- คำสั่งตัวอย่าง:
xattr -d com.apple.quarantine /Applications/Citadel.app/
การพัฒนาและการ build
- ข้อกำหนดเบื้องต้นสำหรับการพัฒนาคือ ติดตั้ง Bun และ Rust
- ติดตั้งแพ็กเกจ:
bun install - รันสำหรับพัฒนา:
bun run dev # or just bun dev - คำสั่ง lint และ format มีดังนี้
- format โค้ดทั้งหมด:
bun format - ตรวจสอบ format โค้ดทั้งหมด:
bun format:check - lint โค้ดทั้งหมด:
bun lint - format ฝั่ง backend:
bun format:backend - lint ฝั่ง backend:
bun lint:backend - format ฝั่ง frontend:
bun format:web - lint ฝั่ง frontend:
bun lint:web
- format โค้ดทั้งหมด:
- สามารถรันตัวอย่างแอปได้โดยไม่ต้องมี backend
- จะมี error แสดง เพราะสมมติว่ามี Rust backend อยู่ทั้งที่ไม่มีจริง
bun dev:app - production build สร้างได้ด้วยคำสั่งต่อไปนี้หลังเตรียมข้อกำหนดสำหรับการพัฒนาแล้ว
bun install bun run build
การอัปเดตและโครงการที่เกี่ยวข้อง
- Citadel สามารถตรวจสอบอัปเดตของแอปและติดตั้งได้เมื่อผู้ใช้ร้องขอ
- ปิดการตรวจสอบอัปเดตอัตโนมัติได้ที่ Settings >
Auto updates: On/Off - การติดตั้งจะเกิดขึ้นเมื่อผู้ใช้สั่งอย่างชัดเจนเสมอ โดยข้อความใน UI คือ
Install and restart - รายละเอียดการตั้งค่าสำหรับผู้ดูแลและ workflow ของ release อยู่ใน
docs/updater-and-releases.md - Citadel ใช้ Calibre เป็นจุดอ้างอิง และได้รับแรงบันดาลใจจาก Calibre redesign Figma prototype
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
อาจมีคำถามว่า “ทำไมถึงสร้างแอปใหม่ แทนที่จะไปมีส่วนร่วมกับโปรเจกต์เดิมอย่าง Calibre Web?” คำตอบคือ ก็แค่อยากทำ
ตอนนี้มันเป็นโปรเจกต์งานอดิเรก เลยสนใจการทำซอฟต์แวร์ให้สนุก แม้จะยังหยาบกว่าการต่อยอดโปรเจกต์เดิมก็ตาม Citadel ถูกออกแบบให้เข้ากันได้ย้อนหลังกับ Calibre ดังนั้นก็ยังใช้ Calibre Web ต่อไปได้
ฝั่งแบ็กเอนด์ก็แยกโค้ดที่เชื่อมกับ Calibre ออกมาเป็นไลบรารีต่างหากแล้ว และตั้งใจว่าภายหลังจะให้โปรเจกต์อื่นนำไปใช้ได้ด้วย CLI สำหรับไลบรารี Calibre ก็น่าจะเป็นไปได้
“ในหลายสาขา คำว่าอย่าประดิษฐ์ล้อขึ้นมาใหม่แทบจะถูกยอมรับเป็นสามัญสำนึก แต่บางครั้งผมก็อยากแนะนำว่าให้ลองทำอยู่ดี แค่กระบวนการนั้นก็ทำให้เราเก่งขึ้น และสุดท้ายล้อที่ดีกว่าก็เกิดขึ้นแบบนั้น เพราะผู้คนแค่ลงมือลองทำ”
https://www.youtube.com/watch?v=YOZnqjHkULc
Calibre แม้จะรู้ฟีเจอร์แล้วก็ยังใช้งานค่อนข้างทรมาน ทำให้แนะนำให้ใครใช้ได้ยาก ไม่ว่าจะเป็นปู่ย่าตายายหรือคนที่เชี่ยวชาญเทคโนโลยี
ยังไงก็หวังว่าโปรเจกต์จะไปได้ดี
[0] https://www.cs.cmu.edu/~awb/linux.history.html
ถ้ามีคู่แข่งที่แข็งแรงกว่า เปิดกว้างกว่า ทันสมัยกว่า และคิดเผื่อ ไลบรารีแบบโฮสต์ ตั้งแต่แรก ก็น่าจะย้ายไปใช้ทันที
บางครั้งก็คิดว่าถ้า Calibre แค่หน้าตาดีกว่านี้ ผู้คนคงเห็นว่ามันยอดเยี่ยมแค่ไหน เอาจริง ๆ มันก็ไม่ได้แย่ขนาดนั้น และส่วนตัวก็ชอบ แต่ดูเหมือนผู้คนจะมองข้าม รูปลักษณ์ภายนอก ไปไม่ได้
มันแครชอยู่เรื่อย ๆ และกระบวนการช้ามากจนต้องย้ายไปทำบนเครื่องแยกต่างหาก พอลองค้นหาผ่านเว็บอินเทอร์เฟซก็ช้ามากเช่นกัน
ยังไม่ต้องพูดถึง UI ที่ไม่เป็นธรรมชาติเลยด้วยซ้ำ สำหรับสิ่งที่ทำหน้าที่เป็นไลบรารี มันยังห่างไกลจากรายการผู้แต่งแบบเรียง ก-ฮ/ตัวอักษรตามสไตล์ห้องสมุดจริง ๆ มาก
เข้าใจว่าคนส่วนใหญ่น่าจะมีประมาณ 10–300 เล่ม แต่ผมพยายามใช้ Calibre กับไลบรารีใหญ่หลายชุด และมันรับไม่ไหวจริง ๆ
การตัดสินใจยึดติดกับ SQLite อย่างเดียวก็ไม่ได้ช่วยอะไร ราวปี 2016 ผมเคยเปิด PR แต่ผู้ดูแลค่อนข้างคัดค้านอย่างหนักต่อการเปลี่ยนชั้นฐานข้อมูลหรือทำให้สลับเปลี่ยนได้
แถมถ้าใช้เวลาไม่กี่วินาทีก็รันคอนเทนเนอร์ calibre-web เพื่อได้ UI ที่สะอาดตาและ OPDS แล้ว ทำไมต้องทนกับ “รสนิยมด้านภาพ” แบบนั้นด้วยก็ไม่รู้
มันไม่เป็นธรรมชาติ และ UI/UX ค่อนข้างแย่ เป็นคำสาปที่แอปทรงพลังมักเจอกัน
ถึงอย่างนั้นวันนี้จะลองกลับไปใช้อีกครั้ง ดูว่าจะทำความคุ้นเคยได้ไหม โดยเฉพาะสำหรับผู้ใช้ระดับสูงแล้ว ถือว่าเป็นผลิตภัณฑ์ฟรีที่ยอดเยี่ยมจริง ๆ
เป็นโปรเจกต์ที่ดี ผมชอบฟีเจอร์ของ Calibre แต่ UI ก็ทำให้ผมรู้สึกอึดอัดพอสมควรเหมือนกัน เลยเริ่มออกแบบอินเทอร์เฟซที่เหมือนเอา iTunes ก่อนยุค Apple Music มาผสมกับ iBooks
ตอนนี้ทำไว้แค่หน้าจอเดียว แต่ดูได้ที่นี่: https://www.figma.com/file/m8qaYbPSnxiFPDPbuYtz2w/Calibre-re...
คำถามหลักคือจะนำเสนอฟีเจอร์หลักของ Calibre ใน UI ที่ให้ความรู้สึกเหมือนเป็นเนทีฟของ macOS ได้อย่างไร
ถ้าไม่ได้ตั้งเป้าให้เป็นครอสแพลตฟอร์ม ถ้ามีเวลาว่างก็อาจลองทำเป็นแอป SwiftUI พร้อมแบ็กเอนด์ Rust ได้
การพัฒนาให้ตาม Calibre และดูแลรักษาอาจยาก แต่ดูเป็นโปรเจกต์งานอดิเรกที่น่าสนุก
โดยเฉพาะรีดีไซน์ที่ Kemie Guaida[1] โพสต์ใน Reddit เป็นแรงบันดาลใจด้านการออกแบบอย่างมาก และต้องใส่เครดิตไว้ใน repository ด้วย เดี๋ยวจะอัปเดตเร็ว ๆ นี้: https://old.reddit.com/r/Calibre/comments/udzumn/testing_a_n...
ดูภาพรวมโปรเจกต์ทั้งหมดได้ที่นี่: https://www.figma.com/file/g4ntqXWa6C0PRGrG3WjyXM/Calibre-pr...
[1]: https://kemielikes.design/
เพิ่งนึกได้เมื่อวานว่า บน Ubuntu 22.04 หลังจากต่อเครื่องอ่าน Kobo แล้ว แค่คัดลอก epub ไปไว้ในไดเรกทอรี
root/ของจุดเมานต์/media/oakhaven/koboreaderก็พอ จากนั้นมันจะปรากฏในรายการหนังสือของอุปกรณ์ไม่รู้ทำไมถึงเคยคิดว่าการเอาหนังสือลง Kobo เป็นเรื่องซับซ้อน และตอนย้ายหนังสือจากแล็ปท็อปไป Kobo ก็ใช้แต่ Calibre
ผมรู้ว่า Calibre มีฟีเจอร์อื่น ๆ อีกมาก แต่ไม่ชอบอินเทอร์เฟซของมัน และตอนนี้ก็ดีใจที่ไม่ต้องใช้ Calibre หรือแอปคล้าย ๆ กันอีกแล้ว
ไม่ต้องมีฟอร์แมตพิเศษ และฟอร์แมตมาตรฐานอย่าง ePub ก็ทำงานได้ดี
ผมเลยสงสัยว่า Kindle ยังได้รับความนิยมขนาดนั้นได้อย่างไร อาจเป็นผลจากการมาก่อนหรือเปล่าไม่รู้ แต่เครื่องอ่านอีบุ๊กที่อ่าน ePub กับ PDF ไม่ได้ ให้ความรู้สึกเหมือนเครื่องเล่นเสียงที่เล่น MP3 กับ AAC ไม่ได้
[1]: https://pgaskin.net/kepubify/
ผมคิดว่าตอนนั้นใส่หนังสือชุดแรกผ่าน USB แล้วซิงก์ข่าวรายวันกับหนังสือเพิ่มเติมด้วย rsync เนื้อหาบางส่วนถูกสร้างอัตโนมัติแล้วใส่ลงไดเรกทอรี เช่น จากการดึงข้อมูลอัตโนมัติหรือการสมัครรับทางอีเมล และบางส่วนก็ใส่เองด้วยมือ เช่น คัดลอกหนังสือใหม่หลังซื้อมา
จริง ๆ แล้วมันไม่ใช่ปัญหาที่ซับซ้อนมาก แต่ Calibre ทำอะไรได้มากกว่าการคัดลอกหนังสือไปยังโครงสร้างโฟลเดอร์เฉพาะเยอะ
ไม่แน่ใจว่ามันง่ายกว่าการเปิดโฟลเดอร์แล้วคัดลอก/วางเองจริงไหม แต่เวลา Citadel ตรวจจับว่ามีหนังสืออะไรอยู่บนอุปกรณ์ มันจะอัปเดต ไฟล์เมทาดาทา ที่ Calibre ใช้ ทำให้ไม่ต้องอ่านไฟล์ทั้งหมดในโฟลเดอร์
ดูดีเลย เมื่อสัปดาห์ที่แล้วผมเพิ่งลองกลับไปใช้ Calibre อีกครั้ง แล้วก็หล่นลงไปในหลุมดำที่เรียกว่า UI นั่น ผมเคยคิดจะอาสาช่วยงาน UI/UX แต่ดูเหมือนจะกลายเป็นโปรเจกต์ยาวหลายปี
แทนที่จะทำแบบนั้น ผมอาจช่วยเรื่อง UI/UX ของโปรเจกต์นี้ได้
เขาทำผลงานที่น่าทึ่งมาก แต่เป็นหนึ่งในคนที่มีรสนิยมแรงมาก จนแม้คนอื่นจะเสนอตัวทำงานให้ เขาก็อาจแสดงท่าทีเป็นปฏิปักษ์อย่างรวดเร็ว ตามอำเภอใจ และแปลก ๆ กับบางเรื่องได้
อ่านหนังสือไปสองสามเดือน แล้วค่อยทำขั้นตอนนำเข้าใหม่อีกครั้ง
ถามด้วยความสงสัยจริง ๆ มีตัวอย่าง แอปสมาร์ตโฟนแบบเนทีฟ ที่มีฟีเจอร์ครบเท่า Calibre แต่เสนอออกมาในรูปแบบที่ดีกว่าและใช้ง่ายกว่ามากไหม?
ชอบตรงที่นำโปรเจกต์งานอดิเรกออกมาเปิดตัวจริง ดูสะอาดตาดีด้วย และ calibre CLI ก็น่าจะได้รับการต้อนรับแน่นอน ไม่ชอบต้องคลิกเมนูเข้าไปทีละห้าชั้น
ถ้าไม่ได้ตั้งเป้าไว้อย่างชัดเจนในส่วน “reader” และ “editor” ก็สงสัยว่า Citadel ทำอะไรให้ผู้ใช้จริง ๆ กันแน่ เป็นพอร์ทัลสำหรับดู จัดเรียง และคลิกหนังสือเป็นหลักหรือเปล่า? มีโรดแมปที่คิดฟีเจอร์เพิ่มเติมไว้ไหม?
Citadel จะรองรับการแก้ไขเมทาดาต้าอย่างชื่อหนังสือ ผู้เขียน และในอนาคตก็แท็กกับคอลัมน์กำหนดเอง และตอนนี้ก็รองรับบางส่วนแล้ว เรื่องนี้แน่นอน การซิงก์อุปกรณ์ก็น่าจะมีตามมาเมื่อเวลาผ่านไป และจะเพิ่มฟีเจอร์ดาวน์โหลดเมทาดาต้าจากแหล่งออนไลน์ด้วย
แต่ไม่มีแผนจะแก้ไขเนื้อหาในหนังสือหรือใส่เครื่องอ่านอีบุ๊กในตัว เพราะมีแอปและอุปกรณ์อ่านอีบุ๊กดี ๆ อยู่มากแล้ว และคิดว่าการแก้ไข epub ไม่ได้ใช้กันบ่อยเท่าการจัดการคอลเลกชัน
ยังไม่มีโรดแมป แต่เปิดรับฟีดแบ็กและไอเดียเสมอ
เพิ่มเติมคือฟีเจอร์อย่างการแปลงฟอร์แมตและการลบ DRM ก็น่าจะเข้ามาด้วย อุดมคติคืออยากทำเป็น crate หรือปลั๊กอิน เพื่อให้ขยายความสามารถได้ง่ายขึ้น
ebook-convertอยู่แล้ว รองรับไฟล์หลายฟอร์แมต เช่น epub, pdf, azw3, mobi เป็นต้นตัวอย่าง:
ebook-convert file.epub file.azw3ดูเจ๋งมาก และตั้งใจว่าจะลองดู น่าขำตรงที่เมื่อไม่นานมานี้ผมเพิ่งทำแอปเดสก์ท็อปสำหรับจัดการหนังสือเสียงด้วยสแต็กเดียวกันคือ Rust + Tauri + Svelte
ขอโปรโมตเผื่อมีคนสนใจ: https://gitlab.com/fonner/audiobook-locker#audiobook-locker
อยากรู้ว่าทำไมถึงเลือก Svelte และ Tauri สำหรับโปรเจกต์นี้ คุ้นเคยอยู่แล้วหรือเปล่า?
นอกเรื่องนิดหน่อย แต่วิธีรันแบบนี้ทำให้วันของผมสดใสขึ้นเลย
bun dev -- -- -- -- --server ...น่าสนใจ ผมเองก็เริ่มทำโปรเจกต์คล้าย ๆ กันด้วยไอเดียคล้ายกันอยู่พักหนึ่ง แต่เลือกใช้ SvelteKit กับเบราว์เซอร์ แทนแอปเนทีฟ
https://github.com/project-kiosk/kiosk
ยังรักษาแรงจูงใจไว้นานพอที่จะทำให้เสร็จไม่ได้
บทความสั้น ๆ เกี่ยวกับ Citadel: https://denhoff.ca/posts/replacing-calibre