Management Commands¶
Django Cast provides several management commands, primarily for managing media files, image renditions, and reference content.
Transcripts¶
generate_transcripts¶
Generate or refresh transcript artifacts for specific podcast episodes or
audio objects through a Voxhelm batch transcription job. The command keeps the
existing Transcript model contract unchanged by storing Podlove JSON,
WebVTT, and DOTe files back onto the model.
For editors, the primary workflow is now in Wagtail admin: episode edit views
and audio edit views expose a Generate transcript action, and Voxhelm
connection details can be managed in Settings -> Voxhelm settings. The
admin workflow queues completion on the cast_transcripts Django Tasks
database backend when the optional transcript-worker extra is installed;
run python manage.py db_worker --backend cast_transcripts --worker-id
<site>-transcripts alongside the web process. The management command remains
available as operator tooling and fallback automation.
Configuration:
CAST_VOXHELM_API_BASE: Voxhelm service root or/v1API baseCAST_VOXHELM_API_KEY: bearer token for the produceroptional:
CAST_VOXHELM_MODEL,CAST_VOXHELM_LANGUAGE,CAST_VOXHELM_DIARIZATION_ENABLED,CAST_VOXHELM_POLL_INTERVAL,CAST_VOXHELM_POLL_TIMEOUT,CAST_VOXHELM_REQUEST_TIMEOUT
For the management command, configure these values as Django settings or
environment variables. The Wagtail admin transcript workflow can also use
site-scoped Wagtail settings for editor-triggered jobs.
CAST_VOXHELM_DIARIZATION_ENABLED defaults to False; enable it only when
the Voxhelm backend has diarization configured.
Full-episode diarization can be slow, so prefer the queued Wagtail transcript
worker flow for editor-triggered jobs.
The command honors each selected audio object’s
transcript_diarization_mode. inherit uses the global Django or
environment setting above, enabled requests diarization for that audio, and
disabled omits the diarization payload, speaker-count hint, and diarized
task-reference variant. When targeting an episode, the command keeps the
episode context so enabled diarization can use that episode’s contributor count
as the speaker-count hint.
# Generate a transcript for one episode
python manage.py generate_transcripts --episode-id 42
# Target audio objects directly
python manage.py generate_transcripts --audio-id 10 --audio-id 11
# Regenerate even when transcript files already exist
python manage.py generate_transcripts --episode-id 42 --force
Options:
--episode-id IDEpisode id to transcribe. Can be passed more than once.
--audio-id IDAudio id to transcribe directly. Can be passed more than once.
--forceRegenerate transcripts even when Podlove, WebVTT, and DOTe files already exist for the selected audio object.
The command prints per-audio status lines and a final summary in the form
processed=<n> created=<n> updated=<n> skipped=<n> errors=<n>.
Image Renditions¶
sync_renditions¶
Create missing image renditions and delete obsolete ones. This is useful after changing image slot dimension settings or adding new image formats.
# Sync renditions for all posts
python manage.py sync_renditions
# Sync renditions for a specific post
python manage.py sync_renditions --post-slug my-post-slug
# Sync renditions for all posts in a blog
python manage.py sync_renditions --blog-slug my-blog-slug
Options:
--post-slug SLUGOnly sync renditions for the post with this slug.
--blog-slug SLUGOnly sync renditions for posts belonging to this blog. The slug must resolve to exactly one blog; missing or ambiguous slugs raise
CommandErrorinstead of selecting an arbitrary match.
Video Management¶
recalc_video_posters¶
Regenerate poster images for all videos from the video files. Requires
ffmpeg to be installed. The command keeps going if one video fails and
prints a final processed=<n> errors=<n> summary.
python manage.py recalc_video_posters
This command takes no options.
Media Backup and Restore¶
These commands require both production and backup storage backends to be
configured in your STORAGES setting. See
Settings for storage configuration details.
media_backup¶
Copy all media files from production storage to backup storage. Only files not already present in the backup are copied.
python manage.py media_backup
media_restore¶
Restore media files from backup storage to production storage. Only files not already present in production are copied.
python manage.py media_restore
media_replace¶
Replace specific files on production storage with versions from the local
filesystem. Useful when you have a better-compressed version of a video
but want to keep the same filename. Requires configured production and
backup storage backends.
# Preview without writing anything
python manage.py media_replace path/to/video1.mp4 --dry-run
# Replace after explicit confirmation
python manage.py media_replace path/to/video1.mp4 path/to/video2.mp4 --yes
Arguments:
pathsOne or more file paths to replace on production storage.
Options:
--dry-runPreview replacements without writing to production storage.
--yesConfirm destructive writes. Without this flag, the command prints the planned replacements and exits with
CommandErrorif any real changes would have been made.
The command prints summary counters in the form
planned=<n> replaced=<n> skipped=<n> errors=<n>. Missing local files are
reported as skipped. If a production delete succeeds but a later save fails,
the command also prints a warning about the data-loss risk for that path.
media_sizes¶
Print the sizes of all media files on the production storage backend,
categorized by type (video, image, misc) with totals in MB. Requires configured
production and backup storage backends.
python manage.py media_sizes
The built-in categories are extension-based:
video:
.mov,.mp4image:
.jpg,.jpeg,.pngmisc: everything else
media_stale¶
Find media files in production storage that are not referenced by any
database record. The command checks paths referenced by image, video,
audio, transcript, and file records before classifying anything as stale.
Requires configured production and backup storage backends.
# Show stale files
python manage.py media_stale
# Show and delete stale files
python manage.py media_stale --delete
Options:
--deleteDelete the stale files instead of only listing them.
The command prints matching stale paths and a final total stale size in MB.
Reference Site¶
These commands operate on whatever Django project settings module is active.
The examples below use a generic project manage.py. When working in the
django-cast repository itself, use uv run python example/manage.py ... or
the just ensure-reference-site / just styleguide-prefetch wrappers,
because the repository root manage.py defaults to tests.settings.
ensure_reference_site¶
Create or update a reference site with demo blog and podcast content. Useful for testing themes and development.
# Create with default theme
python manage.py ensure_reference_site
# Create with a specific theme
python manage.py ensure_reference_site --theme bootstrap5
# Pull real media from production for realistic demos
python manage.py ensure_reference_site --remote-media
# Delete and recreate from scratch
python manage.py ensure_reference_site --reset
# Also generate image renditions
python manage.py ensure_reference_site --with-renditions
Options:
--theme SLUGTheme slug to use. Defaults to the first available styleguide theme (preferring bootstrap5, bootstrap4, plain in that order).
--remote-mediaPull real images and audio from production URLs configured via
CAST_STYLEGUIDE_*settings for better-looking demos.--resetDelete existing reference site data before recreating.
--with-renditionsGenerate missing image renditions while creating content.
On success, the command prints the resolved blog and podcast URLs plus a post count summary for the created reference content.
styleguide_prefetch¶
Prefetch styleguide demo data and optionally build gallery renditions.
python manage.py styleguide_prefetch
python manage.py styleguide_prefetch --theme bootstrap5 --with-renditions
Options:
--theme SLUGTheme slug to render for. Defaults to the first available styleguide theme (preferring bootstrap5, bootstrap4, plain in that order).
--with-renditionsGenerate missing renditions while prefetching.
On success, the command prints Styleguide prefetch complete for theme
'<theme>'.