UploadAssistSubmission-ready LaTeX project packaging. |
UploadAssist packages the local files used by a LaTeX document into a clean submission directory and .tar.gz archive. It is designed for journal, conference, and repository submission systems, many of which require a flat source bundle.
Version 1.0 is a modern, dependency-free successor to arxiv-collector. It supports Python 3.9 and newer.
Highlights
- Recursively discovers
\input,\include,\subfile, import-family commands, graphics, bibliographies, and local classes/styles. - Flattens the bundle by default and rewrites source references accordingly.
- Detects duplicate basenames before flattening instead of silently overwriting files.
- Strips LaTeX comments by default while preserving escaped percent signs.
- Replaces stale output atomically and creates a ready-to-upload archive.
- Requires no Python dependencies and no TeX installation.
Installation
python -m pip install uploadassist
Usage
Run the command from the directory containing your main document:
uploadassist
If there is one .tex file, it is selected automatically. If there are several, main.tex or paper.tex is preferred when unambiguous. You can always specify the document:
uploadassist path/to/main.tex
The default output is output/ next to the main document, plus output.tar.gz.
Common options:
uploadassist --noflatten main.tex # preserve directories
uploadassist --no-strip-comments main.tex # retain comments
uploadassist --no-archive main.tex # omit the tar.gz file
uploadassist -o submission main.tex # choose the output directory
uploadassist --include journal-template.sty main.tex
uploadassist --include extra-files/ main.tex # repeatable
uploadassist --version
To extract only cited BibTeX entries:
uploadassist --extract-bib references.bib main.tex > cited.bib
Run uploadassist --help for the complete command reference.
Python API
from uploadassist import collect, get_deps
dependencies = get_deps("main.tex")
files = collect("main.tex", "submission", flatten=True)
collect returns the generated file paths. Pass create_archive=False to omit the archive.
Discovery and limitations
UploadAssist uses static source discovery so it can run without compiling the document. This covers conventional literal paths in common LaTeX commands. Paths assembled through custom macros, generated during compilation, or selected only through TeX conditionals cannot be inferred; add those files with --include.
Flattening changes every dependency to its basename. If two used files have the same basename, UploadAssist stops with an actionable error; rename one file or use --noflatten. Always compile and inspect the generated bundle before submitting it.
Development
python -m pip install -e ".[dev]"
ruff check uploadassist tests examples
ruff format --check uploadassist tests examples
python -m pytest
python -m build
python -m twine check dist/*
Bug reports are welcome in the issue tracker. Maintainers can use the release checklist for PyPI publishing.
License
UploadAssist is distributed under the BSD 3-Clause License. See LICENSE.
Release files for uploadassist 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| uploadassist-1.0.0.tar.gz | 17.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| uploadassist-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.4 kB
Release files / uploadassist-1.0.0.tar.gz
| Download URL | uploadassist-1.0.0.tar.gz |
|---|---|
| Size | 17.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c06899a05bb9d3721d31a6842ebca9cbb7edc39210865ed1a3523548332abda9
|
|
BLAKE2b-256 checksum How to use checksums |
a84bff42783caf8419b575dc2de64c2ce90c1e7fa7c1bbbafa626cc4cc54dee8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 16, 2026.
Transparency logRelease files / uploadassist-1.0.0-py3-none-any.whl
| Download URL | uploadassist-1.0.0-py3-none-any.whl |
|---|---|
| Size | 11.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0ac9901580618c463b6c1875e68451d1677615dd9ed43ae8f2ed94aa3493ac0a
|
|
BLAKE2b-256 checksum How to use checksums |
2dba7cda4d8cad99c3d18542a3d74857b1bbd2b38f82a893580fae2ac2005c02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 16, 2026.
Transparency log