Skip to content

Latest commit

 

History

History

examples

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

README.md

Examples

Shell

Thumbnail the first page of a PDF:

deckrender report.pdf --page 1 --width 640 -o thumb.png

Web-ready frames from a deck:

deckrender deck.pptx --profile web -o frames/

Ship a page range as one archive:

deckrender deck.pptx --pages 1-10 --image-format webp -o preview.zip

Screenshot a live page:

deckrender https://example.com -o shot.png

Render HTML produced by another process:

my-generator | deckrender - --from html -o slide.png

Scripting

Capture the output path:

FIRST=$(deckrender deck.pptx --json | jq -r '.outputs[0].file')

Inspect the backend task chain a render used:

deckrender report.docx --format image --json | jq -r '.route | join(" -> ")'
# convertor.doc2pdf -> convertor.pdf2image

Branch on the failure kind:

if ! deckrender "$INPUT" -o out.pdf --json 2> err.json; then
  case "$(jq -r '.error.code' err.json)" in
    unsupported_format) echo "cannot render $INPUT to pdf" ;;
    auth_error)         echo "run: deckrender auth login" ;;
    *)                  jq -r '.error.message' err.json ;;
  esac
fi

Check what a file can become before trying:

deckrender formats --json | jq -r '.matrix.docx | to_entries[] | select(.value.supported) | .key'
# image
# pdf

Library

import { render } from '@deckflow/deckrender';

const result = await render({
  input: 'deck.pptx',
  format: 'image',
  pages: '1-10',
  imageFormat: 'webp',
  out: 'frames/',
});

console.log(result.route);   // ['convertor.ppt2image', 'image.convertWebp']
console.log(result.pages);   // total pages, before --pages filtering

Reuse configuration across renders and surface warnings:

import { createRenderer } from '@deckflow/deckrender';

const renderer = createRenderer({
  apiKey: process.env.DECKFLOW_API_KEY,
  onWarning: (message) => console.warn(message),
});

for (const file of files) {
  await renderer.render({ input: file, format: 'pdf' });
}

Handle failures by code:

import { render, isDeckRenderError } from '@deckflow/deckrender';

try {
  await render({ input: 'report.pdf', format: 'video' });
} catch (error) {
  if (isDeckRenderError(error) && error.code === 'unsupported_format') {
    console.error(error.message, error.hint);
  } else {
    throw error;
  }
}

Ask what is possible without rendering:

import { supportedTargets, findRoute } from '@deckflow/deckrender';

supportedTargets('docx');          // ['image', 'pdf']
findRoute('docx', 'image')?.kind;  // 'derived'