[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme:commonforms":3},"\u003Ch1>CommonForms\u003C\u002Fh1>\n\u003Cp>🪄 Automatically convert a PDF into a fillable form.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fdetect.semanticdocs.org\" rel=\"nofollow ugc noopener\">💻 Hosted Models (detect.semanticdocs.org)\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2509.16506\" rel=\"nofollow ugc noopener\">📄 CommonForms Paper\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fjbarrow\u002FCommonForms\" rel=\"nofollow ugc noopener\">🤗 Dataset\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fhuggingface.co\u002Fjbarrow\u002FFFDNet-L\" rel=\"nofollow ugc noopener\">🤗 FFDNet-L\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fhuggingface.co\u002Fjbarrow\u002FFFDNet-S\" rel=\"nofollow ugc noopener\">🤗 FFDNet-S\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fjbarrow\u002Fcommonforms\u002Fmain\u002Fassets\u002Fpipeline.png\" alt=\"Pipeline\" \u002F>\u003C\u002Fp>\n\u003Cp>This repo contains three things:\u003C\u002Fp>\n\u003Col>\n\u003Cli>the pip-installable \u003Ccode>commonforms\u003C\u002Fcode> package, which has a CLI and API for converting PDFs into fillable forms\u003C\u002Fli>\n\u003Cli>the FFDNet-S and FFDNet-L models from the paper \u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2509.16506\" rel=\"nofollow ugc noopener\">CommonForms: A Large, Diverse Dataset for Form Field Detection\u003C\u002Fa> \u003C\u002Fli>\n\u003Cli>the preprocessing code for the CommonForms dataset, which is hosted on HuggingFace: \u003Ca href=\"https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fjbarrow\u002FCommonForms\" rel=\"nofollow ugc noopener\">https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fjbarrow\u002FCommonForms\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2>Installation\u003C\u002Fh2>\n\u003Cp>CommonForms is a CLI tool with a sizable dependency footprint (\u003Ccode>transformers\u003C\u002Fcode>,\n\u003Ccode>torch\u003C\u002Fcode>, \u003Ccode>rfdetr\u003C\u002Fcode>, \u003Ccode>ultralytics\u003C\u002Fcode>, and friends), so the cleanest install is an\n\u003Cstrong>isolated\u003C\u002Fstrong> one that creates a dedicated environment and exposes just the\n\u003Ccode>commonforms\u003C\u002Fcode> command:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sh\">uv tool install commonforms\n# or\npipx install commonforms\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>If you'd rather use it as a \u003Cstrong>library\u003C\u002Fstrong> inside an existing project, install it with\n\u003Ccode>uv\u003C\u002Fcode> or \u003Ccode>pip\u003C\u002Fcode>, feel free to choose your package manager flavor:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sh\">uv pip install commonforms\n# or\npip install commonforms\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>⚠️ A plain \u003Ccode>pip install\u003C\u002Fcode> (or \u003Ccode>uv pip install\u003C\u002Fcode>) installs into your \u003Cstrong>active\u003C\u002Fstrong>\nenvironment. Because the dependency set is large and pins recent versions, this can\nupgrade packages like \u003Ccode>numpy\u003C\u002Fcode>, \u003Ccode>pillow\u003C\u002Fcode>, and \u003Ccode>transformers\u003C\u002Fcode> in place — so install\ninto a dedicated virtualenv\u002Fconda env, not a shared \u003Ccode>base\u003C\u002Fcode>.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Once it's installed, you should be able to run the CLI command on ~any PDF.\u003C\u002Fp>\n\u003Ch2>CommonForms CLI\u003C\u002Fh2>\n\u003Cp>The simplest usage will run inference on your CPU using the default suggested settings:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>commonforms &lt;input.pdf&gt; &lt;output.pdf&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Input\u003C\u002Fth>\n\u003Cth>Output\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fjbarrow\u002Fcommonforms\u002Fmain\u002Fassets\u002Finput.png\" alt=\"Input PDF\" \u002F>\u003C\u002Ftd>\n\u003Ctd>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fjbarrow\u002Fcommonforms\u002Fmain\u002Fassets\u002Foutput.png\" alt=\"Output PDF\" \u002F>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3>Command Line Arguments\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Argument\u003C\u002Fth>\n\u003Cth>Type\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>input\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Path\u003C\u002Ftd>\n\u003Ctd>Required\u003C\u002Ftd>\n\u003Ctd>Path to the input PDF file\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>output\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Path\u003C\u002Ftd>\n\u003Ctd>Required\u003C\u002Ftd>\n\u003Ctd>Path to save the output PDF file\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--model\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>str\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>FFDNet-L\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Model name (FFDNet-L\u002FFFDNet-S) or path to custom .pt file\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--keep-existing-fields\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>flag\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>False\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Keep existing form fields in the PDF\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--use-signature-fields\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>flag\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>False\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Use signature fields instead of text fields for detected signatures\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--device\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>str\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>cpu\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Device for inference (e.g., \u003Ccode>cpu\u003C\u002Fcode>, \u003Ccode>cuda\u003C\u002Fcode>, \u003Ccode>0\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--image-size\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>int\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>1600\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Image size for inference\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--confidence\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>float\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>0.3\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Confidence threshold for detection\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--fast\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>flag\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>False\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>If running on a CPU, you can trade off accuracy for speed and run in about half the time\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--multiline\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>flag\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>False\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>If you want the detected textboxes to allow multiline inputs\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2>CommonForms API\u003C\u002Fh2>\n\u003Cp>In addition to the CLI, you can use\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-py\">from commonforms import prepare_form\n\nprepare_form(\n    \"path\u002Fto\u002Finput.pdf\",\n    \"path\u002Fto\u002Foutput.pdf\"\n)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>All of the above arguments are keyword arguments to the \u003Ccode>prepare_form\u003C\u002Fcode> function.\u003C\u002Fp>\n\u003Ch2>Dataset Prep\u003C\u002Fh2>\n\u003Cp>🚧 Code for dataset prep exists in the \u003Ccode>dataset\u003C\u002Fcode> folder.\u003C\u002Fp>\n\u003Ch1>Citation\u003C\u002Fh1>\n\u003Cp>If you use the tool, models, or code in an academic paper, please cite the CommonForms paper:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>@misc{barrow2025commonforms,\n  title        = {CommonForms: A Large, Diverse Dataset for Form Field Detection},\n  author       = {Barrow, Joe},\n  year         = {2025},\n  eprint       = {2509.16506},\n  archivePrefix= {arXiv},\n  primaryClass = {cs.CV},\n  doi          = {10.48550\u002FarXiv.2509.16506},\n  url          = {https:\u002F\u002Farxiv.org\u002Fabs\u002F2509.165\n\u003C\u002Fcode>\u003C\u002Fpre>\n",1784564567525]