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:dca58baa4c9b4ba725c8ef57d197334895ba5d936c8040107e509c70f36246c5
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
spec:
containers:
- image: revenz/fileflows:stable@sha256:dca58baa4c9b4ba725c8ef57d197334895ba5d936c8040107e509c70f36246c5
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