# settings.yml # General application settings app_settings: max_file_size_mb: 2000 # Maximum upload size in Megabytes # Allowed extensions (list will be normalized to a set by the server) allowed_all_extensions: - .pdf - .ps - .eps - .png - .jpg - .jpeg - .tiff - .tif - .gif - .bmp - .webp - .svg - .jxl - .avif - .ppm - .mp3 - .m4a - .ogg - .flac - .opus - .wav - .aac - .mp4 - .mkv - .mov - .webm - .avi - .flv - .md - .txt - .html - .docx - .odt - .rst - .epub - .mobi - .azw3 - .pptx - .xlsx # Settings for Optical Character Recognition (OCR) tasks ocr_settings: ocrmypdf: deskew: true clean: true optimize: 1 force_ocr: true # Settings for audio transcription tasks transcription_settings: whisper: compute_type: "int8" allowed_models: - "tiny" - "base" - "small" - "medium" - "large-v3" - "distil-large-v2" # optional: specify device if workers have GPU (e.g. "cuda" or "cpu") # device: "cpu" # --- Conversion Tool Definitions --- # The server validates placeholders against an allowlist: # {input}, {output}, {output_dir}, {output_ext}, {quality}, {speed}, # {preset}, {device}, {dpi}, {samplerate}, {bitdepth} conversion_tools: libreoffice: name: "LibreOffice" # Use {filter} so we can supply liboffce export filters like "txt:Text" command_template: 'libreoffice --headless --convert-to {filter} --outdir {output_dir} {input}' timeout: 120 # Optional: per-format export filter. If missing for a format, server falls back to the extension. filters: pdf: "pdf" docx: "docx" odt: "odt" html: "html" rtf: "rtf" txt: "txt:Text" xml: "xml" epub: "epub" xlsx: "xlsx" ods: "ods" csv: "csv:Text" pptx: "pptx" odp: "odp" svg: "svg" formats: pdf: "PDF" docx: "Word Document" odt: "OpenDocument Text" html: "HTML" rtf: "Rich Text Format" txt: "Plain Text" xml: "Word 2003 XML" epub: "EPUB" xlsx: "Excel Spreadsheet" ods: "OpenDocument Spreadsheet" csv: "CSV" pptx: "PowerPoint Presentation" odp: "OpenDocument Presentation" svg: "SVG" pandoc: name: "Pandoc" command_template: 'pandoc --standalone {input} -o {output} --to={output_ext} --pdf-engine=xelatex' timeout: 60 formats: docx: "Word Document" odt: "OpenDocument Text" pdf: "PDF" rtf: "Rich Text Format" txt: "Plain Text" tex: "LaTeX" man: "Groff Man Page" epub: "EPUB v3 Book" epub2: "EPUB v2 Book" html: "HTML" html5: "HTML5" pptx: "PowerPoint Presentation" beamer: "Beamer PDF Slides" slidy: "Slidy HTML Slides" md: "Markdown" rst: "reStructuredText" jira: "Jira Wiki Markup" mediawiki: "MediaWiki Markup" ghostscript_pdf: name: "Ghostscript (PDF)" # placeholders used: {preset}, {output}, {input} command_template: 'gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH {preset} -sOutputFile={output} {input}' timeout: 60 formats: screen: "PDF (Optimized for Screen)" ebook: "PDF (Optimized for Ebooks)" printer: "PDF (Optimized for Print)" archive: "PDF/A (for Archiving)" ghostscript_image: name: "Ghostscript (Image)" # placeholders used: {device}, {dpi}, {output}, {input} command_template: 'gs -dNOPAUSE -dBATCH -sDEVICE={device} -r{dpi} -sOutputFile={output} {input}' timeout: 60 formats: jpeg_72: "JPEG Image (72 DPI)" jpeg_300: "JPEG Image (300 DPI)" png16m_150: "PNG Image (150 DPI)" png16m_300: "PNG Image (300 DPI)" tiff24nc_300: "TIFF Image (300 DPI)" tiff24nc_600: "TIFF Image (600 DPI)" calibre: name: "Calibre (ebook-convert)" command_template: 'ebook-convert {input} {output}' timeout: 60 formats: epub: "EPUB" mobi: "MOBI" azw3: "Amazon Kindle" pdf: "PDF" docx: "Word Document" ffmpeg: name: "FFmpeg" command_template: 'ffmpeg -i {input} -y -preset medium {output}' timeout: 300 formats: mp4: "MP4 Video" mkv: "MKV Video" mov: "MOV Video" webm: "WebM Video" mp3: "MP3 Audio" wav: "WAV Audio" flac: "FLAC Audio" gif: "Animated GIF" vips: name: "VIPS" command_template: 'vips copy {input} {output}[Q=90]' timeout: 60 formats: jpg: "JPEG Image (Q90)" png: "PNG Image" webp: "WebP Image (Q90)" tiff: "TIFF Image" avif: "AVIF Image" graphicsmagick: name: "GraphicsMagick" command_template: 'gm convert {input} -quality 90 {output}' timeout: 60 formats: jpg: "JPEG Image (Q90)" png: "PNG Image" webp: "WebP Image" tiff: "TIFF Image" pdf: "PDF from Images" inkscape: name: "Inkscape" command_template: 'inkscape {input} --export-filename={output}' timeout: 30 formats: svg: "SVG (Plain)" png: "PNG Image (96 DPI)" pdf: "PDF Document" libjxl: name: "libjxl (cjxl)" command_template: 'cjxl {input} {output} -q 90' timeout: 30 formats: jxl: "JPEG XL (Q90)" resvg: name: "resvg" command_template: 'resvg {input} {output}' timeout: 30 formats: png: "PNG from SVG" potrace: name: "Potrace" command_template: 'potrace {input} --svg -o {output}' timeout: 30 formats: svg: "SVG from Bitmap" markitdown: name: "Markitdown" command_template: 'markitdown {input} -o {output}' timeout: 30 formats: md: "Markdown from Everything!" pngquant: name: "pngquant" command_template: 'pngquant --quality={quality} --speed {speed} --force --output {output} {input}' timeout: 30 formats: png_hq: "PNG (High Quality Compression)" png_mq: "PNG (Medium Quality Compression)" png_fast: "PNG (Fast Compression)" sox: name: "SoX Audio Converter" command_template: 'sox {input} -r {samplerate} -b {bitdepth} {output}' timeout: 120 formats: wav_48k_24b: "WAV (48kHz, 24-bit)" wav_44k_16b: "WAV (CD, 44.1kHz, 16-bit)" flac_48k_24b: "FLAC (48kHz, 24-bit)" flac_44k_16b: "FLAC (CD, 44.1kHz, 16-bit)" ogg_32k_16b: "Ogg Vorbis (32kHz)" ogg_16k_16b: "Ogg Vorbis (16kHz, Voice)" mozjpeg: name: "MozJPEG" command_template: 'cjpeg -quality {quality} -outfile {output} {input}' timeout: 30 formats: jpg_q85: "JPEG (High Quality)" jpg_q75: "JPEG (Web Quality)" jpg_q60: "JPEG (Aggressive Compression)"