skillfed

wagtailmedia

A Wagtail module for audio and video files.

wagtailmedia v0.18.1 141.1K downloads/30d#11,252 on PyPI250
Permissive license BSD-3-Clause Active released

What it is and what it does

wagtailmedia extends Wagtail CMS with first-class support for audio and video files, mirroring the built-in document handling. It provides a Media model, a media chooser panel for page fields, and StreamField blocks for embedding audio and video directly in page content. The package integrates into Wagtail's admin interface and supports customization through settings (configurable file extensions, custom Media models, and form bases) and hooks for queryset filtering.

You install it into a Django+Wagtail project, add it to INSTALLED_APPS, run migrations and collectstatic, then use MediaChooserPanel on ForeignKey fields or AudioChooserBlock/VideoChooserBlock in StreamField definitions. It handles file type detection, provides a browsable media library in the admin, and can expose media via Wagtail's REST API. The package requires Python 3.10, 3.11, 3.12, 3.13, 3.14, Django 5.2 or 6.0, and Wagtail 7.0, 7.1, 7.2, 7.3, 7.4.

Use it for:

  • Add a featured audio or video field to blog posts or news articles using MediaChooserPanel
  • Build a podcast or video gallery page with StreamField audio/video blocks
  • Create a media library interface for content editors to upload and manage audio/video files
  • Expose media items through Wagtail's REST API for headless CMS consumption
  • Customize media handling by extending AbstractMedia or AbstractMediaChooserBlock

Worth the install?

AI-flagged interpretation of the facts on this page — verify before relying

Adds audio and video file management to Wagtail CMS, providing a media library interface and chooser panels similar to Wagtail's document handling.

Yes. wagtailmedia is actively maintained, has no known vulnerabilities, installs with minimal friction, and solves a clear gap in Wagtail's core (audio/video management). It is well-suited for Wagtail projects that need media beyond documents. The BSD-3-Clause license is permissive. Install if your Wagtail site requires audio or video content management.

Install

wagtailmedia on PyPI

pip

pip install wagtailmedia

uv

uv add wagtailmedia

poetry

poetry add wagtailmedia

Installing wagtailmedia

Before you install

Low install friction; pure Python wheel with only Wagtail and Django as runtime dependencies. Active maintenance with recent release and steady repository activity.

License in practice

BSD-3-Clause is permissive; you may use, modify, and distribute this package freely in commercial and private projects with minimal restrictions.

Quickstart

pip install wagtailmedia

# In settings.py
INSTALLED_APPS = [
    "wagtailmedia",
]

# In your page model
from wagtailmedia.edit_handlers import MediaChooserPanel
featured_media = models.ForeignKey("wagtailmedia.Media", null=True, blank=True, on_delete=models.SET_NULL)
content_panels = Page.content_panels + [MediaChooserPanel("featured_media")]

Requires Python >=3.10, Django 5.2 or 6.0, and Wagtail 7.0 or later; must run migrations and collectstatic after installation.

Verify before relying

  • Whether the media model supports custom metadata fields beyond what the documentation shows
  • Performance characteristics when managing large media libraries
  • Compatibility with third-party Wagtail plugins or custom admin extensions

Package facts

License BSD-3-Clause (permissive)
Python support supports the current Python release (>=3.10)
Install friction low — pure-Python wheel
Runtime dependencies 2 — Wagtail, Django
Maintenance actively maintained — 3 days since the last release
Last repo commit
First released
Downloads 141,083/month — #11,252 on PyPI (30-day window, as of 2026-08-14)
Known vulnerabilities none known (OSV.dev, checked 2026-08-14)

Evidence: wagtailmedia-0.18.1-py3-none-any.whl

Keywords: Wagtail, Django, media

Development Status :: 4 - BetaEnvironment :: Web EnvironmentFramework :: WagtailFramework :: Wagtail :: 7Intended Audience :: DevelopersOperating System :: OS IndependentProgramming Language :: PythonProgramming Language :: Python :: 3Programming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14

Tags

wagtail audio video managementwagtail media librarywagtail media chooser panelaudio video cms integrationwagtail streamfield media blockswagtail media model
wagtail-extensionmedia-managementcms

More Dynamic Content packages

MarkupSafe

MarkupSafe provides a text object that escapes…

permissive · top 100 on PyPI

Jinja2

Jinja2 is a templating engine that renders…

permissive · top 100 on PyPI

soupsieve

Soupsieve is a CSS selector library designed to…

permissive · top 100 on PyPI

Werkzeug

Werkzeug is a WSGI utility library providing…

permissive · top 1,000 on PyPI

Flask

Flask is a lightweight WSGI web application…

permissive · top 1,000 on PyPI

Mako

Mako compiles Python-embedded templates into…

permissive · top 1,000 on PyPI

wagtail

Wagtail is a Django-based content management…

permissive · top 5,000 on PyPI

wagtail-modeladmin

Adds Django model administration interfaces to…

permissive · top 15,000 on PyPI

wagtail-localize

Wagtail Localize is a translation plugin for…

permissive · top 15,000 on PyPI

wagtail-factories

Provides factory-boy classes for generating…

permissive · top 15,000 on PyPI

django-cloudinary-storage

Integrates Django with Cloudinary to serve…

permissive · top 15,000 on PyPI

comfyui-workflow-templates-media-other

Provides a collection of audio, 3D model, and…

permissive · top 5,000 on PyPI

pyobjc-framework-CoreMediaIO

Provides Python bindings to Apple's CoreMediaIO…

permissive · top 15,000 on PyPI

pyobjc-framework-AVKit

Provides Python bindings to macOS's AVKit…

permissive · top 15,000 on PyPI

comfyui-workflow-templates-media-video

Provides a collection of video workflow…

permissive · top 5,000 on PyPI

pyaaf2

Read, write, and modify Advanced Authoring…

permissive · top 15,000 on PyPI