Comic Viewer Demo

Decrypted plugin sample

Each page is fetched only as an AES-GCM encrypted .encfile. definePlugin() decrypts it before the image is rendered.

Source code

import * as ComicViewer from "@publira/comic-viewer";

const encryptedJpegPlugin = ComicViewer.definePlugin({
  name: "encrypted-jpeg",
  customFetch: ({ signal, url }) =>
    fetch(url, { signal }).then((response) => response.arrayBuffer()),
  afterFetch: ({ buffer }) => decryptPage(buffer),
});

export const Reader = ({ pages }) => (
  <ComicViewer.Root pages={pages} plugins={[encryptedJpegPlugin]}>
    <ComicViewer.Viewport />
    <ComicViewer.Toolbar />
    <ComicViewer.PageNavigation />
  </ComicViewer.Root>
);