Repository files navigation

Document Processor Service

A powerful document processing service built on Docling that converts various document formats (PDF, DOCX, PPTX, images, etc.) into structured text with advanced enrichments like table extraction, formula recognition, and image analysis.

✨ Features

Document Format Support

  • PDF Documents - Advanced processing with OCR, table extraction, and layout analysis
  • Microsoft Office - Word (DOCX), PowerPoint (PPTX), Excel (XLSX)
  • Images - PNG, JPEG with vision-language model processing
  • Text/Markup - Markdown, HTML, AsciiDoc
  • Structured Data - CSV, JSON
  • Scientific - USPTO Patents (XML), JATS XML
  • Audio - Audio file processing

Advanced Processing Capabilities

  • 🔍 OCR - Text extraction from images and scanned documents
  • 📊 Table Structure - Intelligent table detection and extraction
  • 🧮 Formula Recognition - Mathematical formula detection and conversion
  • 🖼️ Image Analysis - Picture classification and description using vision models
  • 📝 Code Detection - Code block identification and extraction
  • 📄 Layout Analysis - Document structure understanding

Output Formats

  • Markdown - Clean, structured markdown output
  • HTML - Rich HTML with preserved formatting
  • JSON - Structured data with metadata
  • Plain Text - Simple text extraction

🚀 Deployment Options

1. RunPod Serverless (Recommended)

Deploy as a serverless worker on RunPod for automatic scaling and GPU acceleration.

# Build and deploy
docker build --platform linux/amd64 -t your-registry/doc-processor .
docker push your-registry/doc-processor

2. FastAPI Service

Run as a standalone web service with REST API.

# Install dependencies
pip install -r requirements.txt
# Download models (first time only)
python preloader.py
# Start the service
python app.py

3. Docker Container

# Build
docker build -t doc-processor .# Run FastAPI service
docker run -p 8000:8000 -e SERVICE=fastapi doc-processor
# Run RunPod handler
docker run -e SERVICE=runpod doc-processor

📖 API Usage

RunPod Serverless

importrunpod# Submit jobjob=runpod.submit({
"input": {
"document_url": "https://example.com/document.pdf"
}
})
# Get resultresult=runpod.get_job(job['id'])
print(result['output']['content']) # Processed document content

FastAPI Service

# Health check
curl http://localhost:8000/
# Process document
curl -X POST "http://localhost:8000/process" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{ "document_url": "https://example.com/document.pdf" }'
importhttpx# Using Python clientasyncwithhttpx.AsyncClient() asclient:
response=awaitclient.post(
"http://localhost:8000/process",
headers={"Authorization": "Bearer your-api-key"},
json={"document_url": "https://example.com/document.pdf"}
)
result=response.json()
print(result['result']['content'])

⚙️ Configuration

Environment Variables

VariableDefaultDescription
DEVICE_CAPABILITYhighProcessing capability level (low, medium, high)
API_KEYadminAPI authentication key for FastAPI service
SERVICErunpodService mode (runpod or fastapi)
WORKERS1Number of FastAPI workers

Device Capability Levels

low - Minimal Resource Usage

  • ✅ Basic OCR and table extraction
  • ❌ Formula recognition disabled
  • ❌ Image classification disabled
  • ❌ Picture description disabled
  • 💡 Best for: Simple text extraction, resource-constrained environments

medium - Balanced Processing

  • ✅ Code and formula enrichment
  • ✅ Advanced OCR and table structure
  • ❌ Image processing disabled
  • 💡 Best for: Most document types without heavy image analysis

high - Full Processing (Default)

  • ✅ All enrichments enabled
  • ✅ Vision-language model for image description
  • ✅ Advanced table analysis with cell matching
  • ✅ High-resolution image generation
  • 💡 Best for: Complete document understanding, research papers

📊 Response Format

{
"content": "# Document Title\n\nProcessed content in markdown...",
"metadata": {
"source": "https://example.com/document.pdf",
"filename": "document.pdf",
"page_count": 10,
"export_format": "markdown",
"device_capability": "high",
"enrichments_applied": {
"code_enrichment": true,
"formula_enrichment": true,
"picture_classification": true,
"picture_description": true,
"table_structure": true,
"ocr": true
},
"enrichment_stats": {
"code_blocks": 5,
"formulas": 12,
"images": 8,
"tables": 3
}
},
"status": "success"
}

🛠️ Development

Local Testing

# Test with sample input
python handler.py
# Custom test inputecho'{"input": {"document_url": "your-url-here"}}'> test_input.json
python handler.py

Model Management

# Download all models (required for first run)pythonpreloader.py# Models are stored in ./models/ directory# Includes: layout detection, table extraction, OCR, vision models

Dependencies

Core dependencies:

  • docling - Document processing framework
  • fastapi - Web framework for API service
  • runpod - Serverless platform integration
  • httpx - HTTP client for document downloading
  • uvicorn - ASGI server

🔧 System Requirements

Minimum Requirements

  • Memory: 8GB RAM
  • Storage: 10GB for models
  • Python: 3.12+

Recommended for GPU Acceleration

  • GPU: NVIDIA GPU with CUDA support
  • VRAM: 8GB+ for full capability mode
  • CUDA: 12.6+ (included in Docker image)

📝 Example Use Cases

Research Paper Processing

# Process arXiv paperresult=process_document("http://arxiv.org/pdf/1706.03762")
# Extracts: formulas, tables, figures, code snippets, references

Business Document Analysis

# Process financial reports, contracts, presentationsresult=process_document("https://company.com/annual-report.pdf")
# Extracts: structured tables, charts, key metrics

Multi-format Conversion

# Convert between formats while preserving structure# PDF → Markdown, DOCX → HTML, etc.

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test with different document types
  5. Submit a pull request

📄 License

This project is part of the larger application ecosystem. See the main repository for license information.

🔗 Related Links

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Document Processor Service

A powerful document processing service built on Docling that converts various document formats (PDF, DOCX, PPTX, images, etc.) into structured text with advanced enrichments like table extraction, formula recognition, and image analysis.

✨ Features

Document Format Support

  • PDF Documents - Advanced processing with OCR, table extraction, and layout analysis
  • Microsoft Office - Word (DOCX), PowerPoint (PPTX), Excel (XLSX)
  • Images - PNG, JPEG with vision-language model processing
  • Text/Markup - Markdown, HTML, AsciiDoc
  • Structured Data - CSV, JSON
  • Scientific - USPTO Patents (XML), JATS XML
  • Audio - Audio file processing

Advanced Processing Capabilities

  • 🔍 OCR - Text extraction from images and scanned documents
  • 📊 Table Structure - Intelligent table detection and extraction
  • 🧮 Formula Recognition - Mathematical formula detection and conversion
  • 🖼️ Image Analysis - Picture classification and description using vision models
  • 📝 Code Detection - Code block identification and extraction
  • 📄 Layout Analysis - Document structure understanding

Output Formats

  • Markdown - Clean, structured markdown output
  • HTML - Rich HTML with preserved formatting
  • JSON - Structured data with metadata
  • Plain Text - Simple text extraction

🚀 Deployment Options

1. RunPod Serverless (Recommended)

Deploy as a serverless worker on RunPod for automatic scaling and GPU acceleration.

# Build and deploy
docker build --platform linux/amd64 -t your-registry/doc-processor .
docker push your-registry/doc-processor

2. FastAPI Service

Run as a standalone web service with REST API.

# Install dependencies
pip install -r requirements.txt
# Download models (first time only)
python preloader.py
# Start the service
python app.py

3. Docker Container

# Build
docker build -t doc-processor .# Run FastAPI service
docker run -p 8000:8000 -e SERVICE=fastapi doc-processor
# Run RunPod handler
docker run -e SERVICE=runpod doc-processor

📖 API Usage

RunPod Serverless

importrunpod# Submit jobjob=runpod.submit({
"input": {
"document_url": "https://example.com/document.pdf"
}
})
# Get resultresult=runpod.get_job(job['id'])
print(result['output']['content']) # Processed document content

FastAPI Service

# Health check
curl http://localhost:8000/
# Process document
curl -X POST "http://localhost:8000/process" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{ "document_url": "https://example.com/document.pdf" }'
importhttpx# Using Python clientasyncwithhttpx.AsyncClient() asclient:
response=awaitclient.post(
"http://localhost:8000/process",
headers={"Authorization": "Bearer your-api-key"},
json={"document_url": "https://example.com/document.pdf"}
)
result=response.json()
print(result['result']['content'])

⚙️ Configuration

Environment Variables

VariableDefaultDescription
DEVICE_CAPABILITYhighProcessing capability level (low, medium, high)
API_KEYadminAPI authentication key for FastAPI service
SERVICErunpodService mode (runpod or fastapi)
WORKERS1Number of FastAPI workers

Device Capability Levels

low - Minimal Resource Usage

  • ✅ Basic OCR and table extraction
  • ❌ Formula recognition disabled
  • ❌ Image classification disabled
  • ❌ Picture description disabled
  • 💡 Best for: Simple text extraction, resource-constrained environments

medium - Balanced Processing

  • ✅ Code and formula enrichment
  • ✅ Advanced OCR and table structure
  • ❌ Image processing disabled
  • 💡 Best for: Most document types without heavy image analysis

high - Full Processing (Default)

  • ✅ All enrichments enabled
  • ✅ Vision-language model for image description
  • ✅ Advanced table analysis with cell matching
  • ✅ High-resolution image generation
  • 💡 Best for: Complete document understanding, research papers

📊 Response Format

{
"content": "# Document Title\n\nProcessed content in markdown...",
"metadata": {
"source": "https://example.com/document.pdf",
"filename": "document.pdf",
"page_count": 10,
"export_format": "markdown",
"device_capability": "high",
"enrichments_applied": {
"code_enrichment": true,
"formula_enrichment": true,
"picture_classification": true,
"picture_description": true,
"table_structure": true,
"ocr": true
},
"enrichment_stats": {
"code_blocks": 5,
"formulas": 12,
"images": 8,
"tables": 3
}
},
"status": "success"
}

🛠️ Development

Local Testing

# Test with sample input
python handler.py
# Custom test inputecho'{"input": {"document_url": "your-url-here"}}'> test_input.json
python handler.py

Model Management

# Download all models (required for first run)pythonpreloader.py# Models are stored in ./models/ directory# Includes: layout detection, table extraction, OCR, vision models

Dependencies

Core dependencies:

  • docling - Document processing framework
  • fastapi - Web framework for API service
  • runpod - Serverless platform integration
  • httpx - HTTP client for document downloading
  • uvicorn - ASGI server

🔧 System Requirements

Minimum Requirements

  • Memory: 8GB RAM
  • Storage: 10GB for models
  • Python: 3.12+

Recommended for GPU Acceleration

  • GPU: NVIDIA GPU with CUDA support
  • VRAM: 8GB+ for full capability mode
  • CUDA: 12.6+ (included in Docker image)

📝 Example Use Cases

Research Paper Processing

# Process arXiv paperresult=process_document("http://arxiv.org/pdf/1706.03762")
# Extracts: formulas, tables, figures, code snippets, references

Business Document Analysis

# Process financial reports, contracts, presentationsresult=process_document("https://company.com/annual-report.pdf")
# Extracts: structured tables, charts, key metrics

Multi-format Conversion

# Convert between formats while preserving structure# PDF → Markdown, DOCX → HTML, etc.

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test with different document types
  5. Submit a pull request

📄 License

This project is part of the larger application ecosystem. See the main repository for license information.

🔗 Related Links

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Document Processor Service

A powerful document processing service built on Docling that converts various document formats (PDF, DOCX, PPTX, images, etc.) into structured text with advanced enrichments like table extraction, formula recognition, and image analysis.

✨ Features

Document Format Support

  • PDF Documents - Advanced processing with OCR, table extraction, and layout analysis
  • Microsoft Office - Word (DOCX), PowerPoint (PPTX), Excel (XLSX)
  • Images - PNG, JPEG with vision-language model processing
  • Text/Markup - Markdown, HTML, AsciiDoc
  • Structured Data - CSV, JSON
  • Scientific - USPTO Patents (XML), JATS XML
  • Audio - Audio file processing

Advanced Processing Capabilities

  • 🔍 OCR - Text extraction from images and scanned documents
  • 📊 Table Structure - Intelligent table detection and extraction
  • 🧮 Formula Recognition - Mathematical formula detection and conversion
  • 🖼️ Image Analysis - Picture classification and description using vision models
  • 📝 Code Detection - Code block identification and extraction
  • 📄 Layout Analysis - Document structure understanding

Output Formats

  • Markdown - Clean, structured markdown output
  • HTML - Rich HTML with preserved formatting
  • JSON - Structured data with metadata
  • Plain Text - Simple text extraction

🚀 Deployment Options

1. RunPod Serverless (Recommended)

Deploy as a serverless worker on RunPod for automatic scaling and GPU acceleration.

# Build and deploy
docker build --platform linux/amd64 -t your-registry/doc-processor .
docker push your-registry/doc-processor

2. FastAPI Service

Run as a standalone web service with REST API.

# Install dependencies
pip install -r requirements.txt
# Download models (first time only)
python preloader.py
# Start the service
python app.py

3. Docker Container

# Build
docker build -t doc-processor .# Run FastAPI service
docker run -p 8000:8000 -e SERVICE=fastapi doc-processor
# Run RunPod handler
docker run -e SERVICE=runpod doc-processor

📖 API Usage

RunPod Serverless

importrunpod# Submit jobjob=runpod.submit({
"input": {
"document_url": "https://example.com/document.pdf"
}
})
# Get resultresult=runpod.get_job(job['id'])
print(result['output']['content']) # Processed document content

FastAPI Service

# Health check
curl http://localhost:8000/
# Process document
curl -X POST "http://localhost:8000/process" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{ "document_url": "https://example.com/document.pdf" }'
importhttpx# Using Python clientasyncwithhttpx.AsyncClient() asclient:
response=awaitclient.post(
"http://localhost:8000/process",
headers={"Authorization": "Bearer your-api-key"},
json={"document_url": "https://example.com/document.pdf"}
)
result=response.json()
print(result['result']['content'])

⚙️ Configuration

Environment Variables

VariableDefaultDescription
DEVICE_CAPABILITYhighProcessing capability level (low, medium, high)
API_KEYadminAPI authentication key for FastAPI service
SERVICErunpodService mode (runpod or fastapi)
WORKERS1Number of FastAPI workers

Device Capability Levels

low - Minimal Resource Usage

  • ✅ Basic OCR and table extraction
  • ❌ Formula recognition disabled
  • ❌ Image classification disabled
  • ❌ Picture description disabled
  • 💡 Best for: Simple text extraction, resource-constrained environments

medium - Balanced Processing

  • ✅ Code and formula enrichment
  • ✅ Advanced OCR and table structure
  • ❌ Image processing disabled
  • 💡 Best for: Most document types without heavy image analysis

high - Full Processing (Default)

  • ✅ All enrichments enabled
  • ✅ Vision-language model for image description
  • ✅ Advanced table analysis with cell matching
  • ✅ High-resolution image generation
  • 💡 Best for: Complete document understanding, research papers

📊 Response Format

{
"content": "# Document Title\n\nProcessed content in markdown...",
"metadata": {
"source": "https://example.com/document.pdf",
"filename": "document.pdf",
"page_count": 10,
"export_format": "markdown",
"device_capability": "high",
"enrichments_applied": {
"code_enrichment": true,
"formula_enrichment": true,
"picture_classification": true,
"picture_description": true,
"table_structure": true,
"ocr": true
},
"enrichment_stats": {
"code_blocks": 5,
"formulas": 12,
"images": 8,
"tables": 3
}
},
"status": "success"
}

🛠️ Development

Local Testing

# Test with sample input
python handler.py
# Custom test inputecho'{"input": {"document_url": "your-url-here"}}'> test_input.json
python handler.py

Model Management

# Download all models (required for first run)pythonpreloader.py# Models are stored in ./models/ directory# Includes: layout detection, table extraction, OCR, vision models

Dependencies

Core dependencies:

  • docling - Document processing framework
  • fastapi - Web framework for API service
  • runpod - Serverless platform integration
  • httpx - HTTP client for document downloading
  • uvicorn - ASGI server

🔧 System Requirements

Minimum Requirements

  • Memory: 8GB RAM
  • Storage: 10GB for models
  • Python: 3.12+

Recommended for GPU Acceleration

  • GPU: NVIDIA GPU with CUDA support
  • VRAM: 8GB+ for full capability mode
  • CUDA: 12.6+ (included in Docker image)

📝 Example Use Cases

Research Paper Processing

# Process arXiv paperresult=process_document("http://arxiv.org/pdf/1706.03762")
# Extracts: formulas, tables, figures, code snippets, references

Business Document Analysis

# Process financial reports, contracts, presentationsresult=process_document("https://company.com/annual-report.pdf")
# Extracts: structured tables, charts, key metrics

Multi-format Conversion

# Convert between formats while preserving structure# PDF → Markdown, DOCX → HTML, etc.

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test with different document types
  5. Submit a pull request

📄 License

This project is part of the larger application ecosystem. See the main repository for license information.

🔗 Related Links

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Document Processor Service

A powerful document processing service built on Docling that converts various document formats (PDF, DOCX, PPTX, images, etc.) into structured text with advanced enrichments like table extraction, formula recognition, and image analysis.

✨ Features

Document Format Support

  • PDF Documents - Advanced processing with OCR, table extraction, and layout analysis
  • Microsoft Office - Word (DOCX), PowerPoint (PPTX), Excel (XLSX)
  • Images - PNG, JPEG with vision-language model processing
  • Text/Markup - Markdown, HTML, AsciiDoc
  • Structured Data - CSV, JSON
  • Scientific - USPTO Patents (XML), JATS XML
  • Audio - Audio file processing

Advanced Processing Capabilities

  • 🔍 OCR - Text extraction from images and scanned documents
  • 📊 Table Structure - Intelligent table detection and extraction
  • 🧮 Formula Recognition - Mathematical formula detection and conversion
  • 🖼️ Image Analysis - Picture classification and description using vision models
  • 📝 Code Detection - Code block identification and extraction
  • 📄 Layout Analysis - Document structure understanding

Output Formats

  • Markdown - Clean, structured markdown output
  • HTML - Rich HTML with preserved formatting
  • JSON - Structured data with metadata
  • Plain Text - Simple text extraction

🚀 Deployment Options

1. RunPod Serverless (Recommended)

Deploy as a serverless worker on RunPod for automatic scaling and GPU acceleration.

# Build and deploy
docker build --platform linux/amd64 -t your-registry/doc-processor .
docker push your-registry/doc-processor

2. FastAPI Service

Run as a standalone web service with REST API.

# Install dependencies
pip install -r requirements.txt
# Download models (first time only)
python preloader.py
# Start the service
python app.py

3. Docker Container

# Build
docker build -t doc-processor .# Run FastAPI service
docker run -p 8000:8000 -e SERVICE=fastapi doc-processor
# Run RunPod handler
docker run -e SERVICE=runpod doc-processor

📖 API Usage

RunPod Serverless

importrunpod# Submit jobjob=runpod.submit({
"input": {
"document_url": "https://example.com/document.pdf"
}
})
# Get resultresult=runpod.get_job(job['id'])
print(result['output']['content']) # Processed document content

FastAPI Service

# Health check
curl http://localhost:8000/
# Process document
curl -X POST "http://localhost:8000/process" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{ "document_url": "https://example.com/document.pdf" }'
importhttpx# Using Python clientasyncwithhttpx.AsyncClient() asclient:
response=awaitclient.post(
"http://localhost:8000/process",
headers={"Authorization": "Bearer your-api-key"},
json={"document_url": "https://example.com/document.pdf"}
)
result=response.json()
print(result['result']['content'])

⚙️ Configuration

Environment Variables

VariableDefaultDescription
DEVICE_CAPABILITYhighProcessing capability level (low, medium, high)
API_KEYadminAPI authentication key for FastAPI service
SERVICErunpodService mode (runpod or fastapi)
WORKERS1Number of FastAPI workers

Device Capability Levels

low - Minimal Resource Usage

  • ✅ Basic OCR and table extraction
  • ❌ Formula recognition disabled
  • ❌ Image classification disabled
  • ❌ Picture description disabled
  • 💡 Best for: Simple text extraction, resource-constrained environments

medium - Balanced Processing

  • ✅ Code and formula enrichment
  • ✅ Advanced OCR and table structure
  • ❌ Image processing disabled
  • 💡 Best for: Most document types without heavy image analysis

high - Full Processing (Default)

  • ✅ All enrichments enabled
  • ✅ Vision-language model for image description
  • ✅ Advanced table analysis with cell matching
  • ✅ High-resolution image generation
  • 💡 Best for: Complete document understanding, research papers

📊 Response Format

{
"content": "# Document Title\n\nProcessed content in markdown...",
"metadata": {
"source": "https://example.com/document.pdf",
"filename": "document.pdf",
"page_count": 10,
"export_format": "markdown",
"device_capability": "high",
"enrichments_applied": {
"code_enrichment": true,
"formula_enrichment": true,
"picture_classification": true,
"picture_description": true,
"table_structure": true,
"ocr": true
},
"enrichment_stats": {
"code_blocks": 5,
"formulas": 12,
"images": 8,
"tables": 3
}
},
"status": "success"
}

🛠️ Development

Local Testing

# Test with sample input
python handler.py
# Custom test inputecho'{"input": {"document_url": "your-url-here"}}'> test_input.json
python handler.py

Model Management

# Download all models (required for first run)pythonpreloader.py# Models are stored in ./models/ directory# Includes: layout detection, table extraction, OCR, vision models

Dependencies

Core dependencies:

  • docling - Document processing framework
  • fastapi - Web framework for API service
  • runpod - Serverless platform integration
  • httpx - HTTP client for document downloading
  • uvicorn - ASGI server

🔧 System Requirements

Minimum Requirements

  • Memory: 8GB RAM
  • Storage: 10GB for models
  • Python: 3.12+

Recommended for GPU Acceleration

  • GPU: NVIDIA GPU with CUDA support
  • VRAM: 8GB+ for full capability mode
  • CUDA: 12.6+ (included in Docker image)

📝 Example Use Cases

Research Paper Processing

# Process arXiv paperresult=process_document("http://arxiv.org/pdf/1706.03762")
# Extracts: formulas, tables, figures, code snippets, references

Business Document Analysis

# Process financial reports, contracts, presentationsresult=process_document("https://company.com/annual-report.pdf")
# Extracts: structured tables, charts, key metrics

Multi-format Conversion

# Convert between formats while preserving structure# PDF → Markdown, DOCX → HTML, etc.

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test with different document types
  5. Submit a pull request

📄 License

This project is part of the larger application ecosystem. See the main repository for license information.

🔗 Related Links

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Document Processor Service

A powerful document processing service built on Docling that converts various document formats (PDF, DOCX, PPTX, images, etc.) into structured text with advanced enrichments like table extraction, formula recognition, and image analysis.

✨ Features

Document Format Support

  • PDF Documents - Advanced processing with OCR, table extraction, and layout analysis
  • Microsoft Office - Word (DOCX), PowerPoint (PPTX), Excel (XLSX)
  • Images - PNG, JPEG with vision-language model processing
  • Text/Markup - Markdown, HTML, AsciiDoc
  • Structured Data - CSV, JSON
  • Scientific - USPTO Patents (XML), JATS XML
  • Audio - Audio file processing

Advanced Processing Capabilities

  • 🔍 OCR - Text extraction from images and scanned documents
  • 📊 Table Structure - Intelligent table detection and extraction
  • 🧮 Formula Recognition - Mathematical formula detection and conversion
  • 🖼️ Image Analysis - Picture classification and description using vision models
  • 📝 Code Detection - Code block identification and extraction
  • 📄 Layout Analysis - Document structure understanding

Output Formats

  • Markdown - Clean, structured markdown output
  • HTML - Rich HTML with preserved formatting
  • JSON - Structured data with metadata
  • Plain Text - Simple text extraction

🚀 Deployment Options

1. RunPod Serverless (Recommended)

Deploy as a serverless worker on RunPod for automatic scaling and GPU acceleration.

# Build and deploy
docker build --platform linux/amd64 -t your-registry/doc-processor .
docker push your-registry/doc-processor

2. FastAPI Service

Run as a standalone web service with REST API.

# Install dependencies
pip install -r requirements.txt
# Download models (first time only)
python preloader.py
# Start the service
python app.py

3. Docker Container

# Build
docker build -t doc-processor .# Run FastAPI service
docker run -p 8000:8000 -e SERVICE=fastapi doc-processor
# Run RunPod handler
docker run -e SERVICE=runpod doc-processor

📖 API Usage

RunPod Serverless

importrunpod# Submit jobjob=runpod.submit({
"input": {
"document_url": "https://example.com/document.pdf"
}
})
# Get resultresult=runpod.get_job(job['id'])
print(result['output']['content']) # Processed document content

FastAPI Service

# Health check
curl http://localhost:8000/
# Process document
curl -X POST "http://localhost:8000/process" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{ "document_url": "https://example.com/document.pdf" }'
importhttpx# Using Python clientasyncwithhttpx.AsyncClient() asclient:
response=awaitclient.post(
"http://localhost:8000/process",
headers={"Authorization": "Bearer your-api-key"},
json={"document_url": "https://example.com/document.pdf"}
)
result=response.json()
print(result['result']['content'])

⚙️ Configuration

Environment Variables

VariableDefaultDescription
DEVICE_CAPABILITYhighProcessing capability level (low, medium, high)
API_KEYadminAPI authentication key for FastAPI service
SERVICErunpodService mode (runpod or fastapi)
WORKERS1Number of FastAPI workers

Device Capability Levels

low - Minimal Resource Usage

  • ✅ Basic OCR and table extraction
  • ❌ Formula recognition disabled
  • ❌ Image classification disabled
  • ❌ Picture description disabled
  • 💡 Best for: Simple text extraction, resource-constrained environments

medium - Balanced Processing

  • ✅ Code and formula enrichment
  • ✅ Advanced OCR and table structure
  • ❌ Image processing disabled
  • 💡 Best for: Most document types without heavy image analysis

high - Full Processing (Default)

  • ✅ All enrichments enabled
  • ✅ Vision-language model for image description
  • ✅ Advanced table analysis with cell matching
  • ✅ High-resolution image generation
  • 💡 Best for: Complete document understanding, research papers

📊 Response Format

{
"content": "# Document Title\n\nProcessed content in markdown...",
"metadata": {
"source": "https://example.com/document.pdf",
"filename": "document.pdf",
"page_count": 10,
"export_format": "markdown",
"device_capability": "high",
"enrichments_applied": {
"code_enrichment": true,
"formula_enrichment": true,
"picture_classification": true,
"picture_description": true,
"table_structure": true,
"ocr": true
},
"enrichment_stats": {
"code_blocks": 5,
"formulas": 12,
"images": 8,
"tables": 3
}
},
"status": "success"
}

🛠️ Development

Local Testing

# Test with sample input
python handler.py
# Custom test inputecho'{"input": {"document_url": "your-url-here"}}'> test_input.json
python handler.py

Model Management

# Download all models (required for first run)pythonpreloader.py# Models are stored in ./models/ directory# Includes: layout detection, table extraction, OCR, vision models

Dependencies

Core dependencies:

  • docling - Document processing framework
  • fastapi - Web framework for API service
  • runpod - Serverless platform integration
  • httpx - HTTP client for document downloading
  • uvicorn - ASGI server

🔧 System Requirements

Minimum Requirements

  • Memory: 8GB RAM
  • Storage: 10GB for models
  • Python: 3.12+

Recommended for GPU Acceleration

  • GPU: NVIDIA GPU with CUDA support
  • VRAM: 8GB+ for full capability mode
  • CUDA: 12.6+ (included in Docker image)

📝 Example Use Cases

Research Paper Processing

# Process arXiv paperresult=process_document("http://arxiv.org/pdf/1706.03762")
# Extracts: formulas, tables, figures, code snippets, references

Business Document Analysis

# Process financial reports, contracts, presentationsresult=process_document("https://company.com/annual-report.pdf")
# Extracts: structured tables, charts, key metrics

Multi-format Conversion

# Convert between formats while preserving structure# PDF → Markdown, DOCX → HTML, etc.

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test with different document types
  5. Submit a pull request

📄 License

This project is part of the larger application ecosystem. See the main repository for license information.

🔗 Related Links

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Document Processor Service

A powerful document processing service built on Docling that converts various document formats (PDF, DOCX, PPTX, images, etc.) into structured text with advanced enrichments like table extraction, formula recognition, and image analysis.

✨ Features

Document Format Support

  • PDF Documents - Advanced processing with OCR, table extraction, and layout analysis
  • Microsoft Office - Word (DOCX), PowerPoint (PPTX), Excel (XLSX)
  • Images - PNG, JPEG with vision-language model processing
  • Text/Markup - Markdown, HTML, AsciiDoc
  • Structured Data - CSV, JSON
  • Scientific - USPTO Patents (XML), JATS XML
  • Audio - Audio file processing

Advanced Processing Capabilities

  • 🔍 OCR - Text extraction from images and scanned documents
  • 📊 Table Structure - Intelligent table detection and extraction
  • 🧮 Formula Recognition - Mathematical formula detection and conversion
  • 🖼️ Image Analysis - Picture classification and description using vision models
  • 📝 Code Detection - Code block identification and extraction
  • 📄 Layout Analysis - Document structure understanding

Output Formats

  • Markdown - Clean, structured markdown output
  • HTML - Rich HTML with preserved formatting
  • JSON - Structured data with metadata
  • Plain Text - Simple text extraction

🚀 Deployment Options

1. RunPod Serverless (Recommended)

Deploy as a serverless worker on RunPod for automatic scaling and GPU acceleration.

# Build and deploy
docker build --platform linux/amd64 -t your-registry/doc-processor .
docker push your-registry/doc-processor

2. FastAPI Service

Run as a standalone web service with REST API.

# Install dependencies
pip install -r requirements.txt
# Download models (first time only)
python preloader.py
# Start the service
python app.py

3. Docker Container

# Build
docker build -t doc-processor .# Run FastAPI service
docker run -p 8000:8000 -e SERVICE=fastapi doc-processor
# Run RunPod handler
docker run -e SERVICE=runpod doc-processor

📖 API Usage

RunPod Serverless

importrunpod# Submit jobjob=runpod.submit({
"input": {
"document_url": "https://example.com/document.pdf"
}
})
# Get resultresult=runpod.get_job(job['id'])
print(result['output']['content']) # Processed document content

FastAPI Service

# Health check
curl http://localhost:8000/
# Process document
curl -X POST "http://localhost:8000/process" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{ "document_url": "https://example.com/document.pdf" }'
importhttpx# Using Python clientasyncwithhttpx.AsyncClient() asclient:
response=awaitclient.post(
"http://localhost:8000/process",
headers={"Authorization": "Bearer your-api-key"},
json={"document_url": "https://example.com/document.pdf"}
)
result=response.json()
print(result['result']['content'])

⚙️ Configuration

Environment Variables

VariableDefaultDescription
DEVICE_CAPABILITYhighProcessing capability level (low, medium, high)
API_KEYadminAPI authentication key for FastAPI service
SERVICErunpodService mode (runpod or fastapi)
WORKERS1Number of FastAPI workers

Device Capability Levels

low - Minimal Resource Usage

  • ✅ Basic OCR and table extraction
  • ❌ Formula recognition disabled
  • ❌ Image classification disabled
  • ❌ Picture description disabled
  • 💡 Best for: Simple text extraction, resource-constrained environments

medium - Balanced Processing

  • ✅ Code and formula enrichment
  • ✅ Advanced OCR and table structure
  • ❌ Image processing disabled
  • 💡 Best for: Most document types without heavy image analysis

high - Full Processing (Default)

  • ✅ All enrichments enabled
  • ✅ Vision-language model for image description
  • ✅ Advanced table analysis with cell matching
  • ✅ High-resolution image generation
  • 💡 Best for: Complete document understanding, research papers

📊 Response Format

{
"content": "# Document Title\n\nProcessed content in markdown...",
"metadata": {
"source": "https://example.com/document.pdf",
"filename": "document.pdf",
"page_count": 10,
"export_format": "markdown",
"device_capability": "high",
"enrichments_applied": {
"code_enrichment": true,
"formula_enrichment": true,
"picture_classification": true,
"picture_description": true,
"table_structure": true,
"ocr": true
},
"enrichment_stats": {
"code_blocks": 5,
"formulas": 12,
"images": 8,
"tables": 3
}
},
"status": "success"
}

🛠️ Development

Local Testing

# Test with sample input
python handler.py
# Custom test inputecho'{"input": {"document_url": "your-url-here"}}'> test_input.json
python handler.py

Model Management

# Download all models (required for first run)pythonpreloader.py# Models are stored in ./models/ directory# Includes: layout detection, table extraction, OCR, vision models

Dependencies

Core dependencies:

  • docling - Document processing framework
  • fastapi - Web framework for API service
  • runpod - Serverless platform integration
  • httpx - HTTP client for document downloading
  • uvicorn - ASGI server

🔧 System Requirements

Minimum Requirements

  • Memory: 8GB RAM
  • Storage: 10GB for models
  • Python: 3.12+

Recommended for GPU Acceleration

  • GPU: NVIDIA GPU with CUDA support
  • VRAM: 8GB+ for full capability mode
  • CUDA: 12.6+ (included in Docker image)

📝 Example Use Cases

Research Paper Processing

# Process arXiv paperresult=process_document("http://arxiv.org/pdf/1706.03762")
# Extracts: formulas, tables, figures, code snippets, references

Business Document Analysis

# Process financial reports, contracts, presentationsresult=process_document("https://company.com/annual-report.pdf")
# Extracts: structured tables, charts, key metrics

Multi-format Conversion

# Convert between formats while preserving structure# PDF → Markdown, DOCX → HTML, etc.

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test with different document types
  5. Submit a pull request

📄 License

This project is part of the larger application ecosystem. See the main repository for license information.

🔗 Related Links

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Document Processor Service

A powerful document processing service built on Docling that converts various document formats (PDF, DOCX, PPTX, images, etc.) into structured text with advanced enrichments like table extraction, formula recognition, and image analysis.

✨ Features

Document Format Support

  • PDF Documents - Advanced processing with OCR, table extraction, and layout analysis
  • Microsoft Office - Word (DOCX), PowerPoint (PPTX), Excel (XLSX)
  • Images - PNG, JPEG with vision-language model processing
  • Text/Markup - Markdown, HTML, AsciiDoc
  • Structured Data - CSV, JSON
  • Scientific - USPTO Patents (XML), JATS XML
  • Audio - Audio file processing

Advanced Processing Capabilities

  • 🔍 OCR - Text extraction from images and scanned documents
  • 📊 Table Structure - Intelligent table detection and extraction
  • 🧮 Formula Recognition - Mathematical formula detection and conversion
  • 🖼️ Image Analysis - Picture classification and description using vision models
  • 📝 Code Detection - Code block identification and extraction
  • 📄 Layout Analysis - Document structure understanding

Output Formats

  • Markdown - Clean, structured markdown output
  • HTML - Rich HTML with preserved formatting
  • JSON - Structured data with metadata
  • Plain Text - Simple text extraction

🚀 Deployment Options

1. RunPod Serverless (Recommended)

Deploy as a serverless worker on RunPod for automatic scaling and GPU acceleration.

# Build and deploy
docker build --platform linux/amd64 -t your-registry/doc-processor .
docker push your-registry/doc-processor

2. FastAPI Service

Run as a standalone web service with REST API.

# Install dependencies
pip install -r requirements.txt
# Download models (first time only)
python preloader.py
# Start the service
python app.py

3. Docker Container

# Build
docker build -t doc-processor .# Run FastAPI service
docker run -p 8000:8000 -e SERVICE=fastapi doc-processor
# Run RunPod handler
docker run -e SERVICE=runpod doc-processor

📖 API Usage

RunPod Serverless

importrunpod# Submit jobjob=runpod.submit({
"input": {
"document_url": "https://example.com/document.pdf"
}
})
# Get resultresult=runpod.get_job(job['id'])
print(result['output']['content']) # Processed document content

FastAPI Service

# Health check
curl http://localhost:8000/
# Process document
curl -X POST "http://localhost:8000/process" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{ "document_url": "https://example.com/document.pdf" }'
importhttpx# Using Python clientasyncwithhttpx.AsyncClient() asclient:
response=awaitclient.post(
"http://localhost:8000/process",
headers={"Authorization": "Bearer your-api-key"},
json={"document_url": "https://example.com/document.pdf"}
)
result=response.json()
print(result['result']['content'])

⚙️ Configuration

Environment Variables

VariableDefaultDescription
DEVICE_CAPABILITYhighProcessing capability level (low, medium, high)
API_KEYadminAPI authentication key for FastAPI service
SERVICErunpodService mode (runpod or fastapi)
WORKERS1Number of FastAPI workers

Device Capability Levels

low - Minimal Resource Usage

  • ✅ Basic OCR and table extraction
  • ❌ Formula recognition disabled
  • ❌ Image classification disabled
  • ❌ Picture description disabled
  • 💡 Best for: Simple text extraction, resource-constrained environments

medium - Balanced Processing

  • ✅ Code and formula enrichment
  • ✅ Advanced OCR and table structure
  • ❌ Image processing disabled
  • 💡 Best for: Most document types without heavy image analysis

high - Full Processing (Default)

  • ✅ All enrichments enabled
  • ✅ Vision-language model for image description
  • ✅ Advanced table analysis with cell matching
  • ✅ High-resolution image generation
  • 💡 Best for: Complete document understanding, research papers

📊 Response Format

{
"content": "# Document Title\n\nProcessed content in markdown...",
"metadata": {
"source": "https://example.com/document.pdf",
"filename": "document.pdf",
"page_count": 10,
"export_format": "markdown",
"device_capability": "high",
"enrichments_applied": {
"code_enrichment": true,
"formula_enrichment": true,
"picture_classification": true,
"picture_description": true,
"table_structure": true,
"ocr": true
},
"enrichment_stats": {
"code_blocks": 5,
"formulas": 12,
"images": 8,
"tables": 3
}
},
"status": "success"
}

🛠️ Development

Local Testing

# Test with sample input
python handler.py
# Custom test inputecho'{"input": {"document_url": "your-url-here"}}'> test_input.json
python handler.py

Model Management

# Download all models (required for first run)pythonpreloader.py# Models are stored in ./models/ directory# Includes: layout detection, table extraction, OCR, vision models

Dependencies

Core dependencies:

  • docling - Document processing framework
  • fastapi - Web framework for API service
  • runpod - Serverless platform integration
  • httpx - HTTP client for document downloading
  • uvicorn - ASGI server

🔧 System Requirements

Minimum Requirements

  • Memory: 8GB RAM
  • Storage: 10GB for models
  • Python: 3.12+

Recommended for GPU Acceleration

  • GPU: NVIDIA GPU with CUDA support
  • VRAM: 8GB+ for full capability mode
  • CUDA: 12.6+ (included in Docker image)

📝 Example Use Cases

Research Paper Processing

# Process arXiv paperresult=process_document("http://arxiv.org/pdf/1706.03762")
# Extracts: formulas, tables, figures, code snippets, references

Business Document Analysis

# Process financial reports, contracts, presentationsresult=process_document("https://company.com/annual-report.pdf")
# Extracts: structured tables, charts, key metrics

Multi-format Conversion

# Convert between formats while preserving structure# PDF → Markdown, DOCX → HTML, etc.

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test with different document types
  5. Submit a pull request

📄 License

This project is part of the larger application ecosystem. See the main repository for license information.

🔗 Related Links

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Document Processor Service

A powerful document processing service built on Docling that converts various document formats (PDF, DOCX, PPTX, images, etc.) into structured text with advanced enrichments like table extraction, formula recognition, and image analysis.

✨ Features

Document Format Support

  • PDF Documents - Advanced processing with OCR, table extraction, and layout analysis
  • Microsoft Office - Word (DOCX), PowerPoint (PPTX), Excel (XLSX)
  • Images - PNG, JPEG with vision-language model processing
  • Text/Markup - Markdown, HTML, AsciiDoc
  • Structured Data - CSV, JSON
  • Scientific - USPTO Patents (XML), JATS XML
  • Audio - Audio file processing

Advanced Processing Capabilities

  • 🔍 OCR - Text extraction from images and scanned documents
  • 📊 Table Structure - Intelligent table detection and extraction
  • 🧮 Formula Recognition - Mathematical formula detection and conversion
  • 🖼️ Image Analysis - Picture classification and description using vision models
  • 📝 Code Detection - Code block identification and extraction
  • 📄 Layout Analysis - Document structure understanding

Output Formats

  • Markdown - Clean, structured markdown output
  • HTML - Rich HTML with preserved formatting
  • JSON - Structured data with metadata
  • Plain Text - Simple text extraction

🚀 Deployment Options

1. RunPod Serverless (Recommended)

Deploy as a serverless worker on RunPod for automatic scaling and GPU acceleration.

# Build and deploy
docker build --platform linux/amd64 -t your-registry/doc-processor .
docker push your-registry/doc-processor

2. FastAPI Service

Run as a standalone web service with REST API.

# Install dependencies
pip install -r requirements.txt
# Download models (first time only)
python preloader.py
# Start the service
python app.py

3. Docker Container

# Build
docker build -t doc-processor .# Run FastAPI service
docker run -p 8000:8000 -e SERVICE=fastapi doc-processor
# Run RunPod handler
docker run -e SERVICE=runpod doc-processor

📖 API Usage

RunPod Serverless

importrunpod# Submit jobjob=runpod.submit({
"input": {
"document_url": "https://example.com/document.pdf"
}
})
# Get resultresult=runpod.get_job(job['id'])
print(result['output']['content']) # Processed document content

FastAPI Service

# Health check
curl http://localhost:8000/
# Process document
curl -X POST "http://localhost:8000/process" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{ "document_url": "https://example.com/document.pdf" }'
importhttpx# Using Python clientasyncwithhttpx.AsyncClient() asclient:
response=awaitclient.post(
"http://localhost:8000/process",
headers={"Authorization": "Bearer your-api-key"},
json={"document_url": "https://example.com/document.pdf"}
)
result=response.json()
print(result['result']['content'])

⚙️ Configuration

Environment Variables

VariableDefaultDescription
DEVICE_CAPABILITYhighProcessing capability level (low, medium, high)
API_KEYadminAPI authentication key for FastAPI service
SERVICErunpodService mode (runpod or fastapi)
WORKERS1Number of FastAPI workers

Device Capability Levels

low - Minimal Resource Usage

  • ✅ Basic OCR and table extraction
  • ❌ Formula recognition disabled
  • ❌ Image classification disabled
  • ❌ Picture description disabled
  • 💡 Best for: Simple text extraction, resource-constrained environments

medium - Balanced Processing

  • ✅ Code and formula enrichment
  • ✅ Advanced OCR and table structure
  • ❌ Image processing disabled
  • 💡 Best for: Most document types without heavy image analysis

high - Full Processing (Default)

  • ✅ All enrichments enabled
  • ✅ Vision-language model for image description
  • ✅ Advanced table analysis with cell matching
  • ✅ High-resolution image generation
  • 💡 Best for: Complete document understanding, research papers

📊 Response Format

{
"content": "# Document Title\n\nProcessed content in markdown...",
"metadata": {
"source": "https://example.com/document.pdf",
"filename": "document.pdf",
"page_count": 10,
"export_format": "markdown",
"device_capability": "high",
"enrichments_applied": {
"code_enrichment": true,
"formula_enrichment": true,
"picture_classification": true,
"picture_description": true,
"table_structure": true,
"ocr": true
},
"enrichment_stats": {
"code_blocks": 5,
"formulas": 12,
"images": 8,
"tables": 3
}
},
"status": "success"
}

🛠️ Development

Local Testing

# Test with sample input
python handler.py
# Custom test inputecho'{"input": {"document_url": "your-url-here"}}'> test_input.json
python handler.py

Model Management

# Download all models (required for first run)pythonpreloader.py# Models are stored in ./models/ directory# Includes: layout detection, table extraction, OCR, vision models

Dependencies

Core dependencies:

  • docling - Document processing framework
  • fastapi - Web framework for API service
  • runpod - Serverless platform integration
  • httpx - HTTP client for document downloading
  • uvicorn - ASGI server

🔧 System Requirements

Minimum Requirements

  • Memory: 8GB RAM
  • Storage: 10GB for models
  • Python: 3.12+

Recommended for GPU Acceleration

  • GPU: NVIDIA GPU with CUDA support
  • VRAM: 8GB+ for full capability mode
  • CUDA: 12.6+ (included in Docker image)

📝 Example Use Cases

Research Paper Processing

# Process arXiv paperresult=process_document("http://arxiv.org/pdf/1706.03762")
# Extracts: formulas, tables, figures, code snippets, references

Business Document Analysis

# Process financial reports, contracts, presentationsresult=process_document("https://company.com/annual-report.pdf")
# Extracts: structured tables, charts, key metrics

Multi-format Conversion

# Convert between formats while preserving structure# PDF → Markdown, DOCX → HTML, etc.

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test with different document types
  5. Submit a pull request

📄 License

This project is part of the larger application ecosystem. See the main repository for license information.

🔗 Related Links

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages