Vertopal CLI is a small yet powerful utility that allows you to convert digital files into various formats using the Vertopal public API.
You can use Vertopal CLI by either terminal commands or importing as a Python package.
Vertopal CLI is available on PyPI:
python -m pip install vertopal
You can also download the most recent version of Vertopal CLI binaries for macOS, Windows, and Linux from the releases page or the product page.
An automatic installer is available for each different platform. It will run an install script that downloads and copy Vertopal CLI binaries to the correct location.
Using macOS Terminal:
curl https://run.vertopal.com/cli/macos | bash
On Windows using PowerShell:
(curl https://run.vertopal.com/cli/windows).Content | iex
Tip
If you are getting any UnauthorizedAccess
error, then start Windows PowerShell with the "Run as administrator" option and run Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
.
Now rerun the above installation command. To change the Execution Policies to its default, you can run Set-ExecutionPolicy -ExecutionPolicy Default -Scope LocalMachine
.
Using Linux Terminal:
curl https://run.vertopal.com/cli/linux | bash
Starting with Vertopal CLI v2.0 the package ships with a public default credential (app: free
, token: FREE-TOKEN
) so you can try the CLI and Python client without creating an account. This default credential is suitable for personal testing and evaluation and is subject to daily rate limits; if you intend to run production workloads or to exceed the free limits, obtain a private Application ID and Security Token from your Vertopal account and configure them (see the configuration section).
Converting files from the terminal is simple:
vertopal convert report.pdf --to docx
Vertopal CLI supports bulk conversion, allowing you to process multiple files, entire directories, or complex patterns in a single command. You can combine:
- Brace expansion:
{a,b}
,{1..5}
- Bracket expansion:
[abc]
,[0-9]
- Wildcards:
*
,?
- Recursive globs:
**/*
- Exclusion filters:
--exclude
for fine‑grained control - Date filtering:
--modified-since
for time‑based selection
Here are some real‑world examples:
# Convert quarterly reports for multiple years
vertopal convert report_{2022,2023,2024}_{Q1,Q2,Q3,Q4}.pdf --to txt
# Convert files in multiple folders with different extensions
vertopal convert ./{docs,src,tests}/**/*.{txt,md,pdf} --to html
# Convert numbered chapters with exclusions
vertopal convert chapter_{01..20}.docx --exclude "chapter_{05,10,15}.docx" --to txt
# Convert all PDFs recursively, excluding drafts and backups
vertopal convert ./**/*.pdf --exclude "*draft*" "*backup*" --to txt
# Convert only files modified since a given date
vertopal convert **/*.docx --modified-since 2025-01-01 --to pdf
For the complete pattern syntax and advanced usage scenarios, see the Enhanced Pattern Matching Guide.
Vertopal CLI can also read from standard input and write to standard output, making it easy to integrate into pipelines or generate files on the fly without intermediate storage.
# Create a PDF from Markdown text provided via stdin
echo "Vertopal is **AWESOME!**" | vertopal convert - --from md --to pdf --output awesome.pdf
If you have a private Application ID and Security Token (recommended for production), configure them in the user configuration file.
Set credentials using the vertopal config
subcommand:
vertopal config api.app "your-app-id" api.token "your-security-token"
After setting a private credential, the CLI and Python client will use it for authenticated requests. If you do not set credentials, the bundled public credential will be used by default.
Importing vertopal as a Python package makes it easy to implement file conversions in your projects.
The following code illustrates GIF to APNG conversion using the Vertopal Python package.
from vertopal import Converter
from vertopal.io import FileInput, FileOutput
source = FileInput("./MickeyMouse.gif")
sink = FileOutput("./MickeyMouse.apng")
converter = Converter()
conversion = converter.convert(
readable=source,
writable=sink,
output_format="apng",
)
conversion.wait()
if conversion.successful():
conversion.download()