FileFlows
An automated media processing and transcoding pipeline server.
FileFlows is a self-hosted media file processing tool that automates transcoding, remuxing, and moving media files through configurable processing pipelines. It integrates with GPU hardware for accelerated transcoding. Self-hosting gives you full control over your media library processing without relying on cloud services.
Alternatives considered
Self Hosted
| Tool | Open Source | Full Features | Notes |
|---|---|---|---|
| Tdarr | no | Limited | Popular transcoding pipeline, closed core |
| Unmanic | Yes | Yes | Plugin-based automated transcoding |
| HandBrake | Yes | Yes | Manual only, no automation |
Installation
Architecture
- Deployment: Single
fileflowsdeployment in thefileflowsnamespace - Image:
revenz/fileflows:stable(digest-pinned tosha256:2558e8…) - Storage: Longhorn PVC (
fileflows-data, 1Gi,longhorn-encrypted); NFS volume from TrueNAS read-only for media input - Resources: Intel GPU resource limit (
gpu.intel.com/i915: 1) for hardware-accelerated transcoding - Networking: ClusterIP service on port 5000, HTTPRoute via internal gateway
Security
No container-level securityContext configured. Longhorn PVC encrypted at rest via SOPS-managed key.
Updates
Managed by Renovate. Image is digest-pinned (tracks stable tag).
Data Management
- PVC:
fileflows-data(1Gi,longhorn-encrypted) for app config and processing state - NFS: TrueNAS NFS mount for media input (read-only)
- Backups: No k8up schedule present.
User Management
No OIDC or external authentication configured. Access via internal-only HTTPRoute.
Configuration Management
- Longhorn encryption key from SOPS-encrypted secret
- Intel GPU scheduling configured via resource limits in the Deployment
Administration
Usage
Define processing flows (pipelines) in the web UI to automatically transcode or remux incoming media files. Flows can branch on file properties (codec, resolution, container). The Intel GPU integration enables hardware-accelerated H.264/H.265 encoding for faster processing.
Cluster-specific deviations from the above live in the per-cluster README — see k8s/apps/talos/fileflows/README.md.
Cluster Deployment
FileFlows — Talos cluster
Cluster-specific notes only. General product info, "why we use it", and alternatives live in docusaurus/docs/apps/fileflows.mdx.
Deviations from defaults
Defaults live in docusaurus/docs/apps/fileflows.mdx — document anything this cluster does differently here, with a one-line reason.
- Image:
revenz/fileflows:stable@sha256:a9ce79d8ad21a37ff1579f59cfa8844aded4026fd094e5a893ff476ffe0eaf93
Rendered manifests (kustomize build)
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kustomize.toolkit.fluxcd.io/force: enabled
labels:
app: fileflows
name: fileflows
namespace: fileflows
spec:
replicas: 1
selector:
matchLabels:
app: fileflows
strategy:
rollingUpdate: null
type: Recreate
template:
metadata:
labels:
app: fileflows
ingress: internal
spec:
automountServiceAccountToken: false
containers:
- image: revenz/fileflows:stable@sha256:a9ce79d8ad21a37ff1579f59cfa8844aded4026fd094e5a893ff476ffe0eaf93
livenessProbe:
failureThreshold: 5
httpGet:
path: /
port: http
initialDelaySeconds: 5
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
name: fileflows
ports:
- containerPort: 5000
name: http
protocol: TCP
readinessProbe:
failureThreshold: 5
httpGet:
path: /
port: http
initialDelaySeconds: 5
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
resources:
limits:
gpu.intel.com/i915: 1
requests:
gpu.intel.com/i915: 1
volumeMounts:
- mountPath: /media/stash
name: stash
- mountPath: /app/Data
name: fileflows-data
- mountPath: /app/Logs
name: fileflows-logs
terminationGracePeriodSeconds: 60
volumes:
- name: stash
persistentVolumeClaim:
claimName: fileflows-truenas-nfs-stash
- name: fileflows-data
persistentVolumeClaim:
claimName: fileflows-data
- name: fileflows-logs
persistentVolumeClaim:
claimName: fileflows-logs