آخرین به‌روزرسانی: ۲۸ ژوئیه، ۲۰۲۶

Inside the CBZ - Understanding the Anatomy of Digital Comics

TL;DR CBZ (Comic Book Zip) چیزی بیش از یک آرشیو ZIP استاندارد نیست که مجموعه‌ای از فایل‌های تصویری متوالی—به‌همراه متادیتای اختیاری—را در یک محفظهٔ کمیک بدون DRM بسته‌بندی می‌کند. چون بر پایهٔ فرمت ZIP گسترده است، هر ابزار بایگانی می‌تواند آن را باز کند و خوانندگان به سادگی تصاویر را به ترتیب الفبایی مرتب می‌کنند تا صفحات به ترتیب نمایش داده شوند. CBZهای مدرن اغلب ComicInfo.xml را برای داده‌های کتابخانه‌ای غنی شامل می‌شوند، از کدک‌های تصویری کارآمدی مانند WebP/AVIF استفاده می‌کنند و حتی HTML را برای کمیک‌های تعاملی «بهبود یافته» جاسازی می‌کنند.


CBZ دقیقاً چیست؟

  • نام: Comic Book Zip – یک فایل ZIP با پسوند .cbz.
  • نوع MIME: application/vnd.comicbook+zip (در سال ۲۰۱۲ با IANA ثبت شد).
  • منشأ: توسط جامعه ComicRack (۲۰۰۵‑۲۰۰۸) به عنوان یک جایگزین متن‌باز برای فرمت‌های مالکیتی مانند CBR یا PDF محبوب شد.
  • قابل‌استفاده در همه پلتفرم‌ها: قابل باز شدن با هر ابزار سازگار با ZIP (7‑Zip، WinRAR، macOS Archive Utility، Linux unzip). برای بررسی محتوا نیازی به نرم‌افزار خاصی نیست.

در عمل، یک CBZ فقط یک پوشه از تصاویر (JPEG، PNG، WebP و غیره) است که فشرده و نام‌گذاری مجدد شده است. این سادگی دلیل این است که این فرمت به‌عنوان استاندارد غیررسمی برای کمیک‌های دیجیتال بر روی کامپیوترها، تبلت‌ها و تلفن‌ها شناخته می‌شود.


درون یک CBZ: ساختار فایل

یک CBZ به‌خوبی ساختار یافته از یک سلسله‌مراتب صاف پیروی می‌کند—بدون تو در تویی اضافی—تا خوانندگان بتوانند صفحات را فوراً پیدا کنند. در زیر یک نمای درختی معمولی آورده شده است:

MyComic.cbz
│
├─ 001.jpg          ← first page (front cover)
├─ 002.jpg
├─ 003.jpg
│   …
├─ 050.jpg          ← last page (back cover)
├─ ComicInfo.xml    ← optional rich metadata
└─ cover.jpg        ← optional thumbnail for library views

عناصر کلیدی

عنصرچیستچرا مهم است
فایل‌های تصویری متوالیبه‌طوری نام‌گذاری شده‌اند که به‌صورت حروف الفبا مرتب شوند (001.jpg, 002.jpg, …)اطمینان می‌دهد که ترتیب صفحات در تمام خوانندگان صحیح باشد.
قالب تصویرJPEG, PNG, GIF, WebP, AVIF, BMP, TIFFحجم فایل، دقت بصری و سازگاری با دستگاه‌ها را تعیین می‌کند.
ComicInfo.xmlXML اختیاری مطابق با طرح ComicRackعنوان، نویسنده، سری، شمارهٔ شماره، زبان، پرچم‌های نوع‑صفحه و حتی داده‌های تصویر بندانگشتی را ذخیره می‌کند. مدیریت کتابخانه قدرتمند را امکان‌پذیر می‌سازد.
تصویر جلدcover.jpg/cover.png در ریشهدر بسیاری از برنامه‌ها به عنوان تصویر بندانگشتی کمیک در گالری‌ها استفاده می‌شود.
نام‌های فایل یونیکدZIP مدرن از UTF‑8 پشتیبانی می‌کندبرای عناوین غیر لاتین و کمیک‌های بین‌المللی ضروری است.
دایرکتوری مرکزی ZIPنمایه در انتهای آرشیوخوانندگان این را می‌خوانند تا فهرست صفحات را به سرعت بسازند؛ خرابی در اینجا می‌تواند کل CBZ را خراب کند.

از آنجا که آرشیو فقط تصاویر از پیش فشرده را فشرده می‌کند، اندازه نهایی معمولاً فقط مجموع فایل‌های اصلی به‌اضافه چند کیلوبایت سربار ZIP (< 5 ٪) است.


جادوی متادیتا: ComicInfo.xml و پرچم‌های نوع صفحه

در حالی که یک فایل CBZ بدون هیچ فایل اضافی به‌خوبی کار می‌کند، افزودن یک ComicInfo.xml یک پشته ساده از تصاویر را به یک کتاب کمیک قابل جستجو و با توصیف غنی تبدیل می‌کند. در اینجا یک مثال حداقلی آورده شده است:

<?xml version="1.0" encoding="utf-8"?>
<ComicInfo>
  <Title>Starship Voyager</Title>
  <Series>Space Adventures</Series>
  <Number>12</Number>
  <Writer>Jane Doe</Writer>
  <Penciller>John Smith</Penciller>
  <Inker>Alex Lee</Inker>
  <Publisher>Galaxy Press</Publisher>
  <Year>2024</Year>
  <LanguageISO>en</LanguageISO>
  <PageCount>50</PageCount>
  <Pages>
    <Page Image="001.jpg" Type="FrontCover"/>
    <Page Image="002.jpg" Type="Story"/>
    <Page Image="025.jpg" Type="DoublePage"/>
    <Page Image="050.jpg" Type="BackCover"/>
  </Pages>
</ComicInfo>

چرا زحمت کشید؟

  • ابزارهای کتابخانه (ComicRack, Calibre, و غیره) می‌توانند بر اساس این فیلدها مرتب‌سازی، فیلتر و جستجو کنند.
  • پرچم‌های نوع‑صفحه (FrontCover, BackCover, Advert, Deleted, و غیره) به خوانندگان اجازه می‌دهد تبلیغات را مخفی کنند، فقط صفحات داستان را نشان دهند، یا یک تصویر بندانگشتی سفارشی برای جلد نمایش دهند.
  • آینده‌نگری – همان‌طور که ابتکار دیجیتال کمیک‌ها در حال تدوین مشخصات CBZ v2.0 است، ممکن است یک فایل مانیفست (manifest.json) اجباری شود، اما خوانندگان موجود همچنان ComicInfo.xml را رعایت خواهند کرد.

ایجاد و تبدیل فایل‌های CBZ (گام به گام)

1. تصاویر خود را آماده کنید

  • هر صفحهٔ کمیک را به‌صورت تصویر صادر کنید.
  • آنها را با اعداد صفر‑پد (001.jpg, 002.jpg, …) نام‌گذاری کنید تا ترتیب صحیح تضمین شود.
  • کدک مناسب برای مخاطبان خود را انتخاب کنید: JPEG برای کوچک‌ترین حجم، PNG برای هنر بدون افت کیفیت، WebP/AVIF برای فشرده‌سازی مدرن و با کیفیت بالا.

2. (اختیاری) متادیتا تولید کنید

ابزارهایی مانند ComicTagger، cbr2cbz یا اسکریپت‌های سفارشی می‌توانند به‌صورت خودکار ComicInfo.xml را با استفاده از OCR + LLMها پر کنند. این مرحله اختیاری است اما برای کتابخانه‌های بزرگ به‌شدت توصیه می‌شود.

3. فشرده‌سازی کنید

# Navigate to the folder containing the pages
cd /path/to/pages

# Create a CBZ without extra compression (JPEGs are already compressed)
zip -0 -r ../MyComic.cbz *.jpg *.png ComicInfo.xml cover.jpg
# -0 = store (no compression) – speeds up the process

اگر برنامه فشرده‌ساز شما به‌صورت خودکار این کار را انجام نداد، پسوند .zip تولید شده را به .cbz تغییر نام دهید.

4. آرشیو را تأیید کنید

import zipfile, pathlib, sys

def list_pages(cbz_path: pathlib.Path):
    with zipfile.ZipFile(cbz_path, 'r') as z:
        # Guard against zip‑bombs (max 500 MB uncompressed)
        total = sum(z.getinfo(name).file_size for name in z.namelist())
        if total > 500 * 1024 * 1024:
            raise ValueError("Archive too large")
        images = [n for n in z.namelist()
                  if n.lower().endswith(('.jpg', '.jpeg', '.png', '.webp', '.avif'))]
        images.sort()  # natural alphabetical order
        return images

if __name__ == "__main__":
    cbz = pathlib.Path(sys.argv[1])
    for page in list_pages(cbz):
        print(page)

اجرای python list_pages.py MyComic.cbz باید فهرستی تمیز و مرتب از نام فایل‌های صفحات را چاپ کند.

5. تبدیل به PDF (اگر به نسخه قابل چاپ نیاز دارید)

unzip -q MyComic.cbz -d tmp_pages
convert tmp_pages/*.jpg MyComic.pdf   # ImageMagick's `convert`
rm -r tmp_pages

روندها، امنیت، و آینده CBZ

روندچه اتفاقی می‌افتدتأثیر بر CBZ
توزیع وب‑اولناشران CBZها را بر روی ذخیره‌سازی ابری با URLهای پیش‌امضا میزبانی می‌کنند.بارگیری‌های سریع‌تر، بدون DRM؛ انتشار خودکار آسان‌تر.
کامیک‌های ترکیبی/تعامل‌پذیراضافه کردن index.html + دارایی‌ها داخل آرشیو، کامیک‌های “بهبود یافته” (صدا، ویدئو، HTML5) ایجاد می‌کند.خوانندگانی که از نمای وب پشتیبانی می‌کنند می‌توانند لایه‌های چندرسانه‌ای را رندر کنند.
پذیرش WebP و AVIF~15 % از نسخه‌های جدید (2024) از این کدک‌ها استفاده می‌کنند.کاهش حجم 30‑50 % در حالی که کیفیت حفظ می‌شود—حیاتی برای پهنای باند موبایل.
متادیتای تولید شده توسط هوش مصنوعیابزارهایی مانند ComicTagger اکنون از OCR + LLMها برای پر کردن ComicInfo.xml استفاده می‌کنند.قابلیت کشف بهتر، برچسب‌گذاری خودکار و سازماندهی کتابخانه.
برنامه‌های خواندن همگام‌سازی‌ابریChunky، Perfect Viewer و دیگران پیشرفت را از طریق Firebase/iCloud همگام‌سازی می‌کنند.خواندن بدون درز در تلفن‌ها، تبلت‌ها و دسکتاپ‌ها.
پیشنهاد استانداردسازی (CBZ v2.0)DCI یک manifest.json اجباری، دارایی‌های چندرزولوشنی و یک پرچم <DRM> پیشنهاد می‌دهد.این باعث می‌شود CBZ برای دستگاه‌های با DPI بالا مقاوم‌تر باشد و مدیریت حقوق اختیاری فراهم شود.
آگاهی امنیتیحملات زیپ‑بمب (فایل ZIP کوچک → گیگابایت‌ها هنگام استخراج) یک تهدید واقعی هستند.خوانندگان اکنون محدودیت‌های اندازه استخراج را اعمال می‌کنند و از کتابخانه‌های ایمن استفاده می‌نمایند (مثلاً zipfile پایتون با بررسی‌ها).

نکته امنیتی برای توسعه‌دهندگان

همیشه اندازه کل غیر فشرده را قبل از استخراج یک CBZ اعتبارسنجی کنید. یک بررسی ساده (همان‌طور که در قطعه کد پایتون نشان داده شده) از مصرف بیش از حد فضای دیسک یا حافظه توسط آرشیوهای مخرب جلوگیری می‌کند.


چگونه یک خواننده واقعاً یک CBZ را رندر می‌کند

  1. آرشیو را باز کنید – برنامه فهرست مرکزی ZIP را می‌خواند تا یک فهرست سریع از ورودی‌ها به دست آورد.
  2. فیلتر کردن فایل‌های تصویر – ورودی‌های غیر‑تصویری (ComicInfo.xml، __MACOSX/، و غیره) نادیده گرفته می‌شوند.
  3. به ترتیب حروف الفبا مرتب کنید – به دلیل نام‌گذاری با صفر‑پد، لیست مرتب‌شده با ترتیب صفحه مورد نظر مطابقت دارد.
  4. متادیتا را تجزیه کنید – اگر ComicInfo.xml وجود داشته باشد، خواننده پرچم‌های نوع صفحه، عنوان، نویسنده و غیره را استخراج می‌کند و ممکن است صفحات علامت‌گذاری‌شده به عنوان Advert یا Deleted را پنهان کند.
  5. نمایش صفحات – تصاویر با رمزگشایی می‌شوند (اغلب با رمزگشای‌های JPEG/WebP شتاب‌دار سخت‌افزاری در تبلت‌های مدرن e‑ink) و به‌صورت یک‌به‌یک نمایش داده می‌شوند، با پیش‌بارگذاری چند صفحهٔ بعدی برای اسکرول روان.
  6. حفظ وضعیت – موقعیت خواندن، نشانک‌ها و حاشیه‌نویسی‌ها به‌صورت محلی ذخیره یا به ابر همگام‌سازی می‌شوند، بسته به برنامه.

به همین دلیل است که زنجیرهٔ پردازش باعث می‌شود CBZ همانند یک PDF بومی سریع و پاسخگو باشد، در حالی که کاملاً باز و قابل ویرایش باقی می‌ماند.


نتیجه‌گیری: زیبایی CBZ در سادگی آن نهفته است — یک ZIP ساده که هر کسی می‌تواند آن را باز، ویرایش یا باز استفاده کند. با متادیتای اختیاری ComicInfo.xml، کدک‌های تصویر مدرن، و استانداردهای نوظهور، این فرمت به تکامل خود ادامه می‌دهد در حالی که به ریشه‌های بدون DRM و چندپلتفرمی خود وفادار می‌ماند.