diff --git a/.reuse/dep5 b/.reuse/dep5 index 3c0b7f9d..28d40eef 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -41,6 +41,7 @@ Files: tests/resources/trivial.pdf tests/resources/truetype_font_nomapping.pdf tests/resources/type3_font_nomapping.pdf + misc/screencast/* Copyright: (C) 2022 James R. Barlow License: CC-BY-SA-4.0 diff --git a/README.md b/README.md index 1f24b7b6..9546fb61 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,8 @@ ocrmypdf # it's a scriptable command line program - Scales properly to handle files with thousands of pages - Battle-tested on millions of PDFs +Demo of OCRmyPDF in a terminal session + For details: please consult the [documentation](https://ocrmypdf.readthedocs.io/en/latest/). ## Motivation diff --git a/misc/screencast/README.md b/misc/screencast/README.md new file mode 100644 index 00000000..7c71ea64 --- /dev/null +++ b/misc/screencast/README.md @@ -0,0 +1,31 @@ + + +To regenerate +============= + +Using asciinema and svg-term (`npm install -g svg-term-cli`). + +Create `~/.config/asciinema/config` to disable prompt. + +``` +[record] + +command = fish --init-command 'alias fish_prompt="echo \>\ "' +``` + +Run asciinema + +``` +asciinema rec new_input.cast +``` + +Re-record faster version with fewer pauses + +``` +asciinema rec demo.cast -c "asciinema play new_input.cast --speed 2 --idle-time-limit 0.5" +``` + +Convert to SVG +``` +svg-term --in=misc/screencast/demo.cast --out=misc/screencast/demo.svg --window +``` diff --git a/misc/screencast/demo.cast b/misc/screencast/demo.cast new file mode 100644 index 00000000..929e031b --- /dev/null +++ b/misc/screencast/demo.cast @@ -0,0 +1,65 @@ +{"version": 2, "width": 131, "height": 24, "timestamp": 1687247006, "env": {"SHELL": "/usr/bin/fish", "TERM": "xterm-256color"}} +[0.103649, "o", "\u001b[?2004h\u001b]7; \u0007"] +[0.104223, "o", "\u001b]0;fish \u0007\u001b[30m\u001b(B\u001b[m\r> \u001b[K\r\u001b[C\u001b[C"] +[0.604542, "o", "o\r\u001b[3C\b\u001b[38;2;255;0;0mo\r\u001b[3C\u001b[30m\u001b(B\u001b[m\u001b[38;2;85;85;85mcrmypdf multipage.pdf multipage_with_ocr.pdf\r\u001b[3C\u001b[30m\u001b(B\u001b[m"] +[0.679571, "o", "\u001b[38;2;255;0;0mc\u001b[38;2;85;85;85mrmypdf multipage.pdf multipage_with_ocr.pdf\r\u001b[4C\u001b[30m\u001b(B\u001b[m"] +[0.767271, "o", "\u001b[38;2;255;0;0mr\u001b[38;2;85;85;85mmypdf multipage.pdf multipage_with_ocr.pdf\r\u001b[5C\u001b[30m\u001b(B\u001b[m"] +[0.814505, "o", "\u001b[38;2;255;0;0mm\u001b[38;2;85;85;85mypdf multipage.pdf multipage_with_ocr.pdf\r\u001b[6C\u001b[30m\u001b(B\u001b[m"] +[0.938919, "o", "\u001b[38;2;255;0;0my\u001b[38;2;85;85;85mpdf multipage.pdf multipage_with_ocr.pdf\r\u001b[7C\u001b[30m\u001b(B\u001b[m"] +[0.967347, "o", "\u001b[38;2;255;0;0mp\u001b[38;2;85;85;85mdf multipage.pdf multipage_with_ocr.pdf\r\u001b[8C\u001b[30m\u001b(B\u001b[m"] +[1.009954, "o", "\u001b[38;2;255;0;0md\u001b[38;2;85;85;85mf multipage.pdf multipage_with_ocr.pdf\r\u001b[9C\u001b[30m\u001b(B\u001b[m"] +[1.034488, "o", "\u001b[38;2;255;0;0mf\u001b[38;2;85;85;85m multipage.pdf multipage_with_ocr.pdf\r\u001b[10C\u001b[30m\u001b(B\u001b[m\b\b\b\b\b\b\b\b\u001b[38;2;0;95;215mocrmypdf\u001b[38;2;85;85;85m multipage.pdf multipage_with_ocr.pdf\r\u001b[10C\u001b[30m\u001b(B\u001b[m"] +[1.069226, "o", "\u001b[38;2;0;95;215m \u001b[38;2;85;85;85mmultipage.pdf multipage_with_ocr.pdf\r\u001b[11C\u001b[30m\u001b(B\u001b[m\b \u001b[38;2;85;85;85mmultipage.pdf multipage_with_ocr.pdf\r\u001b[11C\u001b[30m\u001b(B\u001b[m"] +[1.569682, "o", "-\u001b[K\r\u001b[12C\u001b[38;2;85;85;85m-version\r\u001b[12C\u001b[30m\u001b(B\u001b[m\b\u001b[38;2;0;175;255m-\u001b[38;2;85;85;85m-version\r\u001b[12C\u001b[30m\u001b(B\u001b[m"] +[1.642096, "o", "\u001b[38;2;0;175;255m-\u001b[38;2;85;85;85mversion\r\u001b[13C\u001b[30m\u001b(B\u001b[m"] +[1.71793, "o", "\u001b[38;2;0;175;255ms\u001b[30m\u001b(B\u001b[m\u001b[K\r\u001b[14C"] +[1.771483, "o", "\u001b[38;2;0;175;255mk\r\u001b[15C\u001b[30m\u001b(B\u001b[m"] +[1.864664, "o", "\u001b[38;2;0;175;255mi\r\u001b[16C\u001b[30m\u001b(B\u001b[m"] +[1.876085, "o", "\u001b[38;2;0;175;255mp\r\u001b[17C\u001b[30m\u001b(B\u001b[m"] +[2.092979, "o", "\u001b[38;2;0;175;255m-\r\u001b[18C\u001b[30m\u001b(B\u001b[m"] +[2.138821, "o", "\u001b[38;2;0;175;255mt\r\u001b[19C\u001b[30m\u001b(B\u001b[m"] +[2.18017, "o", "\u001b[38;2;0;175;255me\r\u001b[20C\u001b[30m\u001b(B\u001b[m"] +[2.268222, "o", "\u001b[38;2;0;175;255mx\r\u001b[21C\u001b[30m\u001b(B\u001b[m"] +[2.277031, "o", "\u001b[38;2;0;175;255mt\r\u001b[22C\u001b[30m\u001b(B\u001b[m"] +[2.322469, "o", "\u001b[38;2;0;175;255m \r\u001b[23C\u001b[30m\u001b(B\u001b[m\b \r\u001b[23C"] +[2.824696, "o", "m\r\u001b[24C\b\u001b[38;2;0;175;255m\u001b[4mm\r\u001b[24C\u001b[30m\u001b(B\u001b[m\u001b[38;2;85;85;85masks.pdf \r\u001b[24C\u001b[30m\u001b(B\u001b[m"] +[2.923234, "o", "\u001b[38;2;0;175;255m\u001b[4mu\u001b[30m\u001b(B\u001b[m\u001b[K\r\u001b[25C\u001b[38;2;85;85;85mltipage.pdf \r\u001b[25C\u001b[30m\u001b(B\u001b[m"] +[2.960685, "o", "\u001b[38;2;0;175;255m\u001b[4ml\u001b[38;2;85;85;85m\u001b[24mtipage.pdf \r\u001b[26C\u001b[30m\u001b(B\u001b[m"] +[3.03365, "o", "\u001b[38;2;0;175;255m\u001b[4mt\u001b[38;2;85;85;85m\u001b[24mipage.pdf \r\u001b[27C\u001b[30m\u001b(B\u001b[m"] +[3.479338, "o", "\u001b[38;2;0;175;255m\u001b[4mipage.pdf \r\u001b[37C\u001b[30m\u001b(B\u001b[m\b \r\u001b[37C"] +[3.754818, "o", "m\r\u001b[38C\b\u001b[38;2;0;175;255m\u001b[4mm\r\u001b[38C\u001b[30m\u001b(B\u001b[m\u001b[38;2;85;85;85masks.pdf \r\u001b[38C\u001b[30m\u001b(B\u001b[m"] +[3.873318, "o", "\u001b[38;2;0;175;255m\u001b[4mu\u001b[30m\u001b(B\u001b[m\u001b[K\r\u001b[39C\u001b[38;2;85;85;85mltipage.pdf \r\u001b[39C\u001b[30m\u001b(B\u001b[m"] +[3.926829, "o", "\u001b[38;2;0;175;255m\u001b[4ml\u001b[38;2;85;85;85m\u001b[24mtipage.pdf \r\u001b[40C\u001b[30m\u001b(B\u001b[m"] +[4.272251, "o", "\u001b[38;2;0;175;255m\u001b[4mtipage.pdf \r\u001b[51C\u001b[30m\u001b(B\u001b[m\b \r\u001b[51C"] +[4.343464, "o", "\r\u001b[50C"] +[4.416286, "o", "\r\u001b[49C"] +[4.490574, "o", "\r\u001b[48C"] +[4.564115, "o", "\r\u001b[47C"] +[4.630398, "o", "\r\u001b[46C"] +[4.76825, "o", "\u001b[38;2;0;175;255m\u001b[4m_.pd\u001b[30m\u001b(B\u001b[mf \r\u001b[47C\u001b[10D\u001b[38;2;0;175;255mmultipage_.pdf\u001b[30m\u001b(B\u001b[m \r\u001b[47C"] +[5.012506, "o", "\u001b[38;2;0;175;255mo.pd\u001b[30m\u001b(B\u001b[mf \r\u001b[48C\u001b[3C\u001b[38;2;0;175;255mf\u001b[30m\u001b(B\u001b[m \r\u001b[48C"] +[5.053615, "o", "\u001b[38;2;0;175;255mc.pd\u001b[30m\u001b(B\u001b[mf \r\u001b[49C\u001b[3C\u001b[38;2;0;175;255mf\u001b[30m\u001b(B\u001b[m \r\u001b[49C"] +[5.103957, "o", "\u001b[38;2;0;175;255mr.pd\u001b[30m\u001b(B\u001b[mf \r\u001b[50C\u001b[3C\u001b[38;2;0;175;255mf\u001b[30m\u001b(B\u001b[m \r\u001b[50C"] +[5.226183, "o", "\r\u001b[55C"] +[5.728321, "o", "\r\n\u001b[30m\u001b(B\u001b[m\u001b[?2004l\u001b]0;ocrmypdf --skip-text multipage.pdf multipage_ocr.pdf /home/jb/src/ocrmypdf/tests/resources\u0007\u001b[30m\u001b(B\u001b[m\r"] +[5.801032, "o", "\rScanning contents: 0%| | 0/6 [00:00 \u001b[K\r\u001b[C\u001b[C"] +[8.862206, "o", "\r\n\u001b[30m\u001b(B\u001b[m\u001b[30m\u001b(B\u001b[m\u001b[?2004l"] diff --git a/misc/screencast/demo.svg b/misc/screencast/demo.svg new file mode 100644 index 00000000..b14b1a11 --- /dev/null +++ b/misc/screencast/demo.svg @@ -0,0 +1 @@ +>>ocrmypdfmultipage.pdfmultipage_with_ocr.pdf>ocrmypdf--skip-text>ocrmypdf--skip-textmultipage.pdfmultipage.pdf>ocrmypdf--skip-textmultipage.pdfmultipage_ocr.pdfScanningcontents:100%|█████████████████████████████████████████████████████████████████████████|6/6[00:00<00:00,1270.68page/s]Startprocessing6pagesconcurrentlyOCR:0%||0.0/6.0[00:00<?,?page/s]4skippingallprocessingonthispageOCR:100%|█████████████████████████████████████████████████████████████████████████████████████|6.0/6.0[00:06<00:00,1.09s/page]Postprocessing...PDF/Aconversion:100%|████████████████████████████████████████████████████████████████████████████|6/6[00:02<00:00,2.71page/s]SomeinputmetadatacouldnotbecopiedbecauseitisnotpermittedinPDF/A.YoumaywishtoexaminetheoutputPDF'sXMPmetadata.RecompressingJPEGs:0image[00:00,?image/s]DeflatingJPEGs:100%|███████████████████████████████████████████████████████████████████████████|4/4[00:00<00:00,238.28image/s]JBIG2:0item[00:00,?item/s]Imageoptimizationratio:1.01savings:1.3%Totalfilesizeratio:1.02savings:1.6%OutputfileisaPDF/A-2B(asexpected)>ocrmypdfmultipage.pdfmultipage_with_ocr.pdf>ocrmypdfmultipage.pdfmultipage_with_ocr.pdf>ocrmypdfmultipage.pdfmultipage_with_ocr.pdf>ocrmypdfmultipage.pdfmultipage_with_ocr.pdf>ocrmypdfmultipage.pdfmultipage_with_ocr.pdf>ocrmypdfmultipage.pdfmultipage_with_ocr.pdf>ocrmypdfmultipage.pdfmultipage_with_ocr.pdf>ocrmypdf--version>ocrmypdf--version>ocrmypdf--s>ocrmypdf--sk>ocrmypdf--ski>ocrmypdf--skip>ocrmypdf--skip->ocrmypdf--skip-t>ocrmypdf--skip-te>ocrmypdf--skip-tex>ocrmypdf--skip-textmasks.pdf>ocrmypdf--skip-textmultipage.pdf>ocrmypdf--skip-textmultipage.pdf>ocrmypdf--skip-textmultipage.pdf>ocrmypdf--skip-textmultipage.pdf>ocrmypdf--skip-textmultipage.pdfmasks.pdf>ocrmypdf--skip-textmultipage.pdfmultipage.pdf>ocrmypdf--skip-textmultipage.pdfmultipage.pdf>ocrmypdf--skip-textmultipage.pdfmultipage_.pdf>ocrmypdf--skip-textmultipage.pdfmultipage_o.pdf>ocrmypdf--skip-textmultipage.pdfmultipage_oc.pdfScanningcontents:0%||0/6[00:00<?,?page/s]OCR:25%|█████████████████████▎|1.5/6.0[00:00<00:00,8.12page/s]OCR:42%|███████████████████████████████████▍|2.5/6.0[00:00<00:01,3.05page/s]OCR:58%|█████████████████████████████████████████████████▌|3.5/6.0[00:00<00:00,3.39page/s]OCR:75%|███████████████████████████████████████████████████████████████▊|4.5/6.0[00:01<00:00,2.49page/s]PDF/Aconversion:0%||0/6[00:00<?,?page/s]PDF/Aconversion:50%|██████████████████████████████████████|3/6[00:01<00:01,1.61page/s]PDF/Aconversion:83%|███████████████████████████████████████████████████████████████▎|5/6[00:01<00:00,2.90page/s] \ No newline at end of file