Skip to content

video/slideshow

Slideshow / Carousel pipeline — generate listicle content for TikTok/Instagram/LinkedIn.

Category: video
Source: workflows/video/slideshow.py

FieldTypeDefaultDescription
film_grainbooleantrueApply UGC-style film grain + warm tint for organic feel
languagestring"en"Language code
mixed_mediabooleanfalseUse video hook slide for Instagram mixed-media carousel
nichestring""Content niche
num_itemsinteger5Number of list items (slides)
previous_topicsstring[]Previously generated topics for dedup
qualitystring"local"Quality preset (default ‘local’). Other values: ‘free’, ‘budget’, ‘standard’, ‘premium’. The ‘local’ preset uses in-process Diffusers / Kokoro / Whisper backends and falls through to remote per-stage when a backend isn’t installed, so machines without the local stack still produce a slideshow — they just call out to remote APIs for the missing pieces.
regenerateobjectWhen set, this run is a regeneration. Workflows may read direction / keep / extra_instructions to modulate prompts; the engine persists parent_run_id and parent_variant_index as run lineage columns.
slide_durationnumber3.5Duration per slide in seconds
slide_layoutstring"overlay_gradient"Slide layout style
style_hintstring""Visual style hint for image sourcing
topicstring""Listicle topic
transition_durationnumber0.5Transition duration in seconds
variantsinteger1Number of independent variant executions (1–10). When > 1, the engine runs the workflow N times with different sampling, producing N outputs.
visual_stylestring""Visual style override
FieldTypeDefaultDescription
hook_textstring""Hook text
hook_video_pathobjectPath to video hook slide (mixed-media)
kindobjectVariant card shape: video / carousel / image / text. Surfaced on the per-variant entry of the run-output API and used by gallery UIs to pick the right layout.
pdf_pathobjectPath to multi-page PDF carousel
platform_metadataobjectPer-platform metadata
slide_countinteger0Number of slides
slide_png_pathsstring[]Paths to individual slide PNGs
topicstring""Generated topic
video_pathobjectPath to stitched MP4 slideshow video
generate_listicle → source_slide_images → generate_slideshow_voiceover → generate_slideshow_bgm → generate_video_hook_slide → merge_slideshow_assets → compose_slides → export_slide_pngs → assemble_video_slideshow → apply_ugc_treatment → generate_pdf → generate_platform_metadata
TaskDescription
generate_listicleGenerate listicle script with cross-run dedup.
source_slide_imagesSource images for each slide based on image_prompts from script.
generate_slideshow_voiceoverGenerate voiceover from the full listicle narration.
generate_slideshow_bgmGenerate background music.
generate_video_hook_slideGenerate a short video clip for the hook slide (Instagram mixed-media carousel).
merge_slideshow_assetsMerge parallel generation branches.
compose_slidesApply text overlays to sourced images, producing final slide PNGs.
export_slide_pngsSave individual slide PNGs as artifacts (carousel-ready).
assemble_video_slideshowStitch slides into MP4 with transitions, voiceover, and music.
apply_ugc_treatmentApply film grain + warm tint to video and slide PNGs for organic UGC feel.
generate_pdfConvert slide PNGs to a multi-page PDF for LinkedIn document carousels.
generate_platform_metadataGenerate per-platform metadata for the slideshow content.

Save the YAML below as my-run.yaml, edit the values, and run with the CLI or POST it to the API. Required fields are uncommented; optional knobs are documented above the input: block — copy any line under input: and uncomment to set.

workflow: video/slideshow
# Optional fields — copy any line(s) under `input:` and uncomment to set:
# Apply UGC-style film grain + warm tint for organic feel
# film_grain: true
#
# Language code
# language: en
#
# Use video hook slide for Instagram mixed-media carousel
# mixed_media: false
#
# Content niche
# niche: ""
#
# Number of list items (slides)
# num_items: 5
#
# Previously generated topics for dedup
# previous_topics: []
#
# Quality preset (default 'local'). Other values: 'free', 'budget', 'standard', 'premium'. The 'local' preset uses in-process Diffusers / Kokoro / Whisper backends and falls through to remote per-stage when a backend isn't installed, so machines without the local stack still produce a slideshow — they just call out to remote APIs for the missing pieces.
# quality: local
#
# Duration per slide in seconds
# slide_duration: 3.5
#
# Slide layout style
# slide_layout: overlay_gradient
#
# Visual style hint for image sourcing
# style_hint: ""
#
# Listicle topic
# topic: ""
#
# Transition duration in seconds
# transition_duration: 0.5
#
# Visual style override
# visual_style: ""
#
input: {}

Run it locally:

Terminal window
fab-workflow --from-file my-run.yaml

Or submit over the wire — the same file is the request body:

Terminal window
curl -X POST 'https://gofabric.dev/v1/workflows/runs?name=video/slideshow' \
-H 'Authorization: Bearer fab_xxx' \
-H 'content-type: application/yaml' \
--data-binary @my-run.yaml

Every workflow also accepts the universal WorkflowInput fields — variants (1–10 fan-out) and regenerate (creative-direction hints with run lineage). See Run-specs (YAML / TOML / JSON) for the full top-level shape (metadata, priority, bundle, parent, etc.).

  • Task merge_slideshow_assets has no Pydantic types — contract is opaque to consumers.