Skip to content

Platform Nodes

Pre-built nodes for common platform tasks.

Platform nodes are templates that bundle the correct Nix packages, input/output types, and command structure for widely-used CLI tools. You specify parameters; the template handles the rest.

NodeToolDescription
ffmpeg.*ffmpegVideo and audio processing.
pandoc.*pandocDocument format conversion.
imagemagick.*imagemagickImage manipulation.
yt-dlp.*yt-dlpMedia download from supported sites.

Video and audio processing. Nix package: ffmpeg.

flow.yaml
transcode-video:
type: deterministic
op: cli.run
template: ffmpeg.transcode
params:
command: >
ffmpeg -i {{ input_path }} -vf scale={{ width }}:{{ height }}
-c:v libx264 -preset {{ preset }} artifacts/{{ output_name }}.mp4
nix: { packages: [ffmpeg] }
inputs:
config: { type: Record }
outputs:
result: { type: Record }
TemplateWhat it does
ffmpeg.transcodeConvert between video formats.
ffmpeg.extract_audioExtract audio track from video.
ffmpeg.thumbnailGenerate thumbnail at a timestamp.
ffmpeg.concatConcatenate multiple media files.

Document conversion. Nix packages: pandoc, texlive.combined.scheme-small.

convert-docs:
type: deterministic
op: cli.run
template: pandoc.convert
params:
command: >
pandoc {{ input_path }} -f {{ from_format }}
-t {{ to_format }} -o artifacts/{{ output_name }}.{{ to_format }}
nix: { packages: [pandoc, texlive.combined.scheme-small] }
inputs:
config: { type: Record }
outputs:
result: { type: Record }
TemplateWhat it does
pandoc.convertConvert between document formats.
pandoc.pdfRender to PDF via LaTeX.
pandoc.htmlRender to standalone HTML.

Image manipulation. Nix package: imagemagick.

resize-batch:
type: deterministic
op: cli.run
template: imagemagick.resize
params:
command: >
convert {{ input_path }} -resize {{ dimensions }}
-quality {{ quality }} artifacts/{{ output_name }}
nix: { packages: [imagemagick] }
inputs:
images: { type: Table }
outputs:
results: { type: Table }
TemplateWhat it does
imagemagick.resizeResize images to target dimensions.
imagemagick.convertConvert between image formats.
imagemagick.compositeOverlay images (watermark, badge).
imagemagick.annotateAdd text to images.

Media download from supported sites. Nix package: yt-dlp.

download-media:
type: source
op: cli.run
template: yt-dlp.download
params:
command: >
yt-dlp -f "{{ format }}" -o "artifacts/%(title)s.%(ext)s" {{ url }}
nix: { packages: [yt-dlp] }
inputs:
request: { type: Record }
outputs:
result: { type: Record }
TemplateWhat it does
yt-dlp.downloadDownload video in specified format.
yt-dlp.audioExtract audio only (mp3, opus, wav).
yt-dlp.metadataFetch metadata without downloading.
yt-dlp.playlistDownload all items in a playlist.

Use a platform node when a template exists for your task. Templates guarantee correct package versions, handle common edge cases, and produce consistent output schemas.

Use a custom CLI node (op: cli.run without a template) when:

  • No template covers your tool or workflow.
  • You need to chain multiple tools in a single command.
  • You want full control over the command string and output parsing.

Platform nodes are just CLI nodes with pre-configured defaults. You can always override any field in the template by setting it explicitly in params.

Platform node templates are versioned with Radhflow itself. When you upgrade Radhflow, template defaults may change (e.g., new ffmpeg flags for better compression). Existing pipelines that pin nix.nixpkgs are unaffected — the underlying tool versions stay the same.

To check which version of a template you’re using:

Terminal window
rf inspect --node transcode-video

This shows the resolved template, including all default values.