A high-performance media generation library for rendering Quranic Arabic text and translations into customizable, professional-grade images.
Requirements: Python 3.13+
📌 Table of Contents
User Guide
Installation
# Clone the repository
git clone https://github.com/AtTheZenith/quranmedialib.git
cd quranmedialib
# Install with uv (recommended)
uv pip install -e .
Quick Start
from quranmedialib import DatabaseManager, VerseWorkflow, LANDSCAPE_PRESET
# Initialize database manager
db = DatabaseManager()
# Load a 1080p Landscape preset
preset = LANDSCAPE_PRESET["default"]["1080p"]
workflow = VerseWorkflow(preset)
# Render Surah 1, Ayah 1
translations = ["In the name of Allah,", "the Entirely Merciful, the Especially Merciful."]
pages = list(workflow.get_iterator(surah=1, ayah=1, translations=translations))
# Save first page
pages[0][0].save("output.png")
db.close()
Presets Reference
The library uses a resolution-independent system. All sizing parameters scale linearly from a 1080p baseline.
| Aspect Ratio | Preset | Resolutions | Modes |
|---|---|---|---|
| 16:9 | LANDSCAPE_PRESET |
720p, 1080p, 1440p, 2160p | default, arabic, translation |
| 9:16 | STORY_PRESET |
720p, 1080p, 1440p, 2160p | default, arabic, translation |
| 1:1 | SQUARE_PRESET |
720p, 1080p, 1440p, 2160p | default, arabic, translation |
Built-in Workflows
Workflows are high-level orchestrators that handle data retrieval, layout, and rendering.
SurahWorkflow
Processes an entire surah page by page.
from quranmedialib import SurahWorkflow, LANDSCAPE_PRESET
preset = LANDSCAPE_PRESET["default"]["1080p"]
workflow = SurahWorkflow(preset)
for page_num, page_images in enumerate(workflow.get_iterator(surah=112), 1):
for img, suffix in page_images:
img.save(f"surah112_p{page_num}_{suffix}.png")
VerseRangeWorkflow
Processes a range of verses with support for parallel rendering.
from quranmedialib import VerseRangeWorkflow, SQUARE_PRESET
preset = SQUARE_PRESET["default"]["1080p"]
workflow = VerseRangeWorkflow(preset)
# translations: list[list[str]] -> [verse_index][page_index]
translations = [["Trans V1"], ["Trans V2"]]
iterator = workflow.get_iterator(surah=1, start_ayah=1, end_ayah=2, translations=translations)
Demo Gallery
Visual examples of generated content:
| Preset | Image |
|---|---|
| Landscape (1080p) | |
| Story (1080p) | |
| Square (1080p) |
Developer Guide
Architecture
graph TD
DB[(SQLite Database)] --> WF[Workflow Orchestrator]
WF --> Layout[Layout Engine: VImage]
Layout --> Pipe[Rendering Pipeline]
Pipe --> Mask[Mask-First Rendering]
Mask --> Comp[Composition: Frame]
Comp --> Out[Final Image]
subgraph Config
FC[FrameConfig] -.-> Comp
VC[VerseConfig] -.-> Layout
WC[WordConfig] -.-> Pipe
TC[TextConfig] -.-> Pipe
end
Core Thesis
QuranMediaLib is built on the "Boring Code" philosophy: prioritizing linear, obvious logic over clever abstractions to ensure long-term maintainability.
Key Engineering Pillars:
- Resolution Independence: Layouts are defined relative to a 1080p height and scaled linearly.
- Memory Efficiency: Use of
__slots__for high-frequency objects andlru_cachefor database queries. - Performance: Mask-first rendering minimizes expensive RGBA operations.
Core API Reference
DatabaseManager
A thread-safe singleton managing SQLite connections to Quranic databases.
get_verse(surah, ayah): Retrieves verse text.get_verses_from_surah(surah): Retrieves all verses in a surah.minimize_caches(): Explicitly clears internal LRU caches.
Configuration
Preset: Unified config container (preset.frame,preset.word,preset.verse,preset.text).FrameConfig: Controls frame dimensions, background, and alignment.VerseConfig: Controls word spacing, row spacing, max rows, and wrapping.WordConfig: Defines Arabic font, size, colors, and spacing.TextConfig: Defines translation font, size, and rich-text formatting.
Resource Management
Custom assets can be loaded via:
FontResource.from_path("path/to/font.ttf")DatabaseConfig.from_path("path/to/db.sqlite")
Advanced Workflows
IsolateWordsWorkflow
Used to isolate individual words within their layout context, useful for word-by-word study tools.
from quranmedialib import IsolateWordsWorkflow, LANDSCAPE_PRESET
preset = LANDSCAPE_PRESET["default"]["1080p"]
workflow = IsolateWordsWorkflow(preset)
# Isolates each word of the verse
iterator = workflow.get_iterator(
surah=1,
verse_words=["الله", "الرحمن", "الرحيم"],
translations=["Allah", "The Merciful", "The Compassionate"]
)
Performance & Parallelism
For bulk rendering, the library provides ParallelRenderer, which distributes tasks across CPU cores.
- Execution Modes:
ExecutionMode.PROCESS(recommended for CPU-heavy tasks) orExecutionMode.THREAD. - Memory Guard: The system monitors aggregate RSS to prevent OOM crashes during large Surah renders.
Development Suite
# Install dev dependencies
uv pip install -e ".[dev]"
# Run all tests
uv run -m pytest -v
# Run benchmarks
uv run -m pytest -v --benchmark
# Lint and Format
uv run -m ruff check .
uv run -m ruff format .
Community & License
We welcome contributions from developers who value engineering rigor and performance.
- Contribute: See
CONTRIBUTING.mdfor technical standards. - Conduct: See
CODE_OF_CONDUCT.md. - License: Apache License 2.0 - see LICENSE.
Release files for quranmedialib 4.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 | |
|---|---|---|---|
| quranmedialib-4.0.0.tar.gz | 3.4 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| quranmedialib-4.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 6.8 MB
Release files / quranmedialib-4.0.0.tar.gz
| Download URL | quranmedialib-4.0.0.tar.gz |
|---|---|
| Size | 3.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
702c236eaa572d846925db40b047607496c60a552fef3b15f284ba71024142a9
|
|
BLAKE2b-256 checksum How to use checksums |
a1abb1680c4265ffbf62d681d0d04c5676c224a02079ce5f574edae8cf96385b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.6.17
|
Release files / quranmedialib-4.0.0-py3-none-any.whl
| Download URL | quranmedialib-4.0.0-py3-none-any.whl |
|---|---|
| Size | 3.4 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
367ce5e4493b90f327240efe168da1231a0150de676245887c2b4d4c6b24c3b6
|
|
BLAKE2b-256 checksum How to use checksums |
df6ab1ec0d366313e64f181335c828c48a276903a08599a2c8bcc0a5d8b294c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.6.17
|