Document layer update (0.2)
The document and OCR layers now use native readers, versioned artifacts and Hugpy-managed OCR. They no longer depend on abstract_ocr or abstract_pdfs. See DOCUMENTS.md for current APIs, limits and migration details. The remaining facade layers retain the architecture documented below.
media_intelligence — Abstract Intelligence Platform
A unified, layered facade that turns raw media — PDFs, images, and video — into structured, searchable, SEO-ready data. It does not reimplement any engine: it selects the best function of each sibling package and exposes it behind one clean, lazy API, plus an orchestrated pipeline.
Raw Media (PDF / Image / Video / URL)
│
▼
ingest → extract → structure → enrich → persist → publish
(webtools) (ocr/ (typed (hugpy) (FS / DB) (react/
pdfs/ metadata) nginx)
videos)
Layers → canonical owners
| Layer | Owner package | What it does |
|---|---|---|
ingest |
abstract_webtools |
scrape pages, download video (yt-dlp/ffmpeg) |
ocr |
Hugpy HTTP adapter | managed vision transcription |
documents |
document_engine | native structure, artifacts, page retrieval |
video |
abstract_videos |
registry pipeline: download/frames/transcribe |
transcribe |
hugpy (→ abstract_ocr fallback) |
Whisper speech-to-text |
enrich |
hugpy |
summaries, keywords, vision captioning, SEO |
persist |
filesystem (DB-pluggable) | typed JSON/JSONB manifests |
publish |
abstract_react + abstract_nginx |
SEO/OG metadata + static HTML |
Overlapping capabilities are resolved to one owner (Whisper → hugpy;
video download → webtools; summarize/keywords → hugpy).
Install
media_intelligence is just this src/ facade — it contains none of the
engines. Each layer's owner is its own PyPI package, declared as an optional
extra, so you install only what you use:
pip install media_intelligence # zero third-party deps — facade only
pip install "media_intelligence[ocr,enrich]" # just those layers
pip install "media_intelligence[all]" # the full platform
The package has no required third-party dependencies: importing it is cheap
(~20 ms) and pulls none of the backing packages. Each sibling is imported
lazily, only when its layer is actually called; a missing one raises a clear
MissingDependency naming the extra to install.
Check what's usable in the current environment without importing anything:
import media_intelligence as mi
mi.available() # {'ingest': True, 'ocr': True, 'publish': False, ...}
mi.available("enrich") # True / False
Usage
Direct namespace access
import media_intelligence as mi
text = mi.ocr.image_to_text("page.png")
kw = mi.enrich.keywords(text)
mi.documents.process_pdf("doc.pdf")
mi.ingest.download_video("https://site.com/v.mp4", download_directory="/data")
Orchestrated pipeline (idempotent + resumable)
from media_intelligence import MediaPipeline
pipe = MediaPipeline("https://site.com/video.mp4", out_root="/data")
pipe.ingest().extract().structure().enrich().persist().publish()
print(pipe.report.summary)
# ... or simply:
pipe.run()
The pipeline autodetects media kind, dispatches each stage accordingly, skips
stages already satisfied (idempotent), and rehydrates from a prior manifest on
re-run (resumable). Results land in out_root/<media_id>/manifest.json.
Persistence (DB-pluggable, two records)
Each item is persisted as two records so indexing stays cheap while aggregation stays simple:
manifest.json— lean index: ids, counts,text_chars, summary, keywords, SEO, asset pointers. (The JSONB metadata row.)document.json— canonical content: fulltext,pages/segments,transcript. The single source of truth for search / aggregation / LLM datasets — one read per item, no re-stitching of per-owner on-disk files.
store = mi.persist.FileStore("/data")
store.save_manifest(item.media_id, manifest) # lean index
store.save_document(item.media_id, document) # full body
doc = store.load_document(item.media_id) # aggregation reads this
# later, identical interface, JSONB backend:
# store = mi.persist.PgStore(dsn=...) # planned (abstract_database)
# -> metadata in JSONB, body text in a full-text-indexed column
MediaPipeline.persist() writes both. On re-run, the body is rehydrated from
document.json, so extract/enrich skip (no re-OCR / re-transcribe).
Metadata
Release files for media-intelligence 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| media_intelligence-0.1.3.tar.gz | 46.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| media_intelligence-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 94.3 kB
Release files / media_intelligence-0.1.3.tar.gz
| Download URL | media_intelligence-0.1.3.tar.gz |
|---|---|
| Size | 46.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a2916297ead947772fa5dda7590d9db8c89477c5658624c893e07c8042b0c629
|
|
BLAKE2b-256 checksum How to use checksums |
1566706ea9b28e62a0b5bf113f4bc98026d724743fa94bb29eacc06137766830
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / media_intelligence-0.1.3-py3-none-any.whl
| Download URL | media_intelligence-0.1.3-py3-none-any.whl |
|---|---|
| Size | 47.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e8c8557bedbf8e75b3bc9c057df6058fd58700465adac31f9c4e5e85343bd875
|
|
BLAKE2b-256 checksum How to use checksums |
8293f6655b7ac42357910abb2c75f926c8a891f0bfe5160373f20232ed2b4794
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for media-intelligence 0.1.3
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.