A Python package for document conversion and text extraction.
- Convert various document formats (DOCX, ODT, PPT, etc.) to PDF
- Extract text from PDF, Markdown, IMAGE, and audio files
- Support for both local files and S3/GCS cloud storage
- Multiple PDF parsing backends (PyPDF, PyMuPDF)
- Transcribe audio & video files (local or cloud) to text/markdown
- Extract YouTube video transcripts
- Extract text from URLs
# Library only – assumes system requirements are already present
pip install polytextHeads-up: Polytext’s PDF generator relies on [WeasyPrint] under the hood.
The PyPI wheel contains only Python code; you still need WeasyPrint’s native libraries (Pango, Cairo, GDK-PixBuf, HarfBuzz, Fontconfig) installed at the OS level.
| Requirement | Notes | macOS (Homebrew) | Ubuntu / Debian |
|---|---|---|---|
| Python | Supported on 3.11 – 3.13 WeasyPrint still requires its native libraries |
brew install python@3.11 |
sudo apt install python3.11 |
| WeasyPrint – native stack | installs Pango, Cairo, etc. | brew install weasyprint |
sudo apt install weasyprint |
| LibreOffice | used for Office → PDF conversion | brew install --cask libreoffice |
sudo apt install libreoffice |
Converting Documents to PDF
from polytext import convert_to_pdf, ConversionError
try:
# Convert a document to PDF
pdf_path = convert_to_pdf('input.docx', 'output.pdf')
print(f"PDF saved to: {pdf_path}")
except ConversionError as e:
print(f"Conversion failed: {e}")Features that require the API key for Google Gemini are:
- audio
- video
- image
- youtube
from polytext.loader.base import BaseLoader
llm_api_key = "your_google_gemini_api_key" # Set your Google Gemini API key here
# Instantiate the loader
loader = BaseLoader(llm_api_key=llm_api_key)Text or Markdown Extraction
from polytext.loader.base import BaseLoader
markdown_output = False # Change if you want to extract text as markdown
source = "local" # Change to "cloud" if you want to extract from cloud storage (s3 or GCS)
# Instantiate the loader (optionally set markdown_output, llm_api_key, etc.)
loader = BaseLoader(markdown_output=markdown_output, source=source)
# Extract text from a local file
result = loader.get_text(input_list=["/path/to/document.docx"])
print(result["text"])
# Extract text from cloud file
result = loader.get_text(input_list=["s3://your-bucket/path/to/document.docx"])
print(result["text"])
# Extract text from a markdown file (local)
result = loader.get_text(input_list=["/path/to/document.md"])
print(result["text"])
# Extract text from cloud file
result = loader.get_text(input_list=["s3://your-bucket/path/to/document.md"])
print(result["text"])
# Extract text from an audio file (local)
result = loader.get_text(input_list=["/path/to/audio.mp3"])
print(result["text"])
# Extract text from cloud file
result = loader.get_text(input_list=["s3://your-bucket/path/to/audio.mp3"])
print(result["text"])
# Extract text from a video file (local)
result = loader.get_text(input_list=["/path/to/video.mp4"])
print(result["text"])
# Extract text from cloud file
result = loader.get_text(input_list=["s3://your-bucket/path/to/video.mp4"])
print(result["text"])
# Extract text from Image (local)
result = loader.get_text(input_list=["/path/to/image.jpg"])
print(result["text"])
# Extract text from cloud file
result = loader.get_text(input_list=["s3://your-bucket/path/to/image.jpg"])
print(result["text"])
# Extract transcript from a YouTube video
result = loader.get_text(input_list=["https://www.youtube.com/watch?v=xxxx"])
print(result["text"])
# Extract text from a URL
result = loader.get_text(input_list=["https://www.domain-name.com/path"])
print(result["text"])By default, Polytext uses the standard boto3 credential chain when loading s3:// inputs
(environment variables, AWS profiles, IAM roles, and other boto3-supported providers).
For runtimes that need to assume an AWS role through Google OIDC, STS web identity authentication can be enabled explicitly:
from polytext.loader.base import BaseLoader
loader = BaseLoader(
aws_auth_mode="sts_web_identity",
aws_role_arn="arn:aws:iam::111122223333:role/ExampleRole",
aws_region="eu-central-1",
aws_role_session_name="polytext-session",
gcp_id_token_audience="example-gcp-audience",
)The same configuration can also come from environment variables:
POLYTEXT_AWS_AUTH_MODE=sts_web_identity
AWS_ROLE_ARN=arn:aws:iam::111122223333:role/ExampleRole
AWS_REGION=eu-central-1
AWS_ROLE_SESSION_NAME=polytext-session
GCP_ID_TOKEN_AUDIENCE=example-gcp-audience
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service_account.jsonPolytext uses the temporary STS credentials only to create the S3 client. It does not
export them to os.environ and does not reset boto3's global session.
MIT Licence
