SendRec Is Now on Docker Hub and Unraid
A user opened an issue asking for an Unraid community app template. They wanted to install SendRec on their Unraid server, but without a template in Community Applications, setup meant manually configuring a Docker container with a dozen environment variables. We fixed that — and while we were at it, we published the Docker image to Docker Hub.
Docker Hub
Until now, SendRec’s Docker image was only built on the server during deployment. There was no public image to pull. If you wanted to self-host, you had to clone the repo and build it yourself.
We added a GitHub Actions workflow that builds and pushes the image on every version tag:
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
push: true
build-args: VERSION=${{ github.ref_name }}
tags: |
alexneamtu/sendrec:latest
alexneamtu/sendrec:${{ steps.version.outputs.version }}
ghcr.io/sendrec/sendrec:latest
ghcr.io/sendrec/sendrec:${{ steps.version.outputs.version }}
cache-from: type=gha
cache-to: type=gha,mode=max
Every release now publishes to both Docker Hub and GitHub Container Registry. The build uses Docker Buildx with GitHub Actions cache, so subsequent builds only rebuild changed layers.
Self-hosting is now one command:
docker pull alexneamtu/sendrec:latest
You still need PostgreSQL and S3-compatible storage — the Self-Hosting Guide covers the full setup with Docker Compose.
The Unraid template
Unraid Community Applications uses XML templates to describe how a container should be configured. Each <Config> element becomes a form field in the Unraid UI — ports, volumes, environment variables — so users can fill in values and click Apply without touching the command line.
The template for SendRec lives at sendrec/unraid-templates. Here’s what the configuration looks like:
Required settings
These appear in the basic install view:
<Config Name="Database URL" Target="DATABASE_URL"
Default="postgres://sendrec:secret@192.168.1.X:5432/sendrec?sslmode=disable"
Type="Variable" Display="always" Required="true" Mask="false"/>
<Config Name="JWT Secret" Target="JWT_SECRET"
Type="Variable" Display="always" Required="true" Mask="true"/>
<Config Name="Base URL" Target="BASE_URL"
Default="http://192.168.1.X:8080"
Type="Variable" Display="always" Required="true" Mask="false"/>
Sensitive fields like JWT_SECRET and S3_SECRET_KEY use Mask="true" to hide values in the UI. The Required="true" attribute prevents installation if the field is empty.
S3 storage
SendRec stores videos in S3-compatible object storage. The template includes fields for endpoint, bucket, credentials, and region:
<Config Name="S3 Endpoint" Target="S3_ENDPOINT"
Default="http://192.168.1.X:3900"
Type="Variable" Display="always" Required="true" Mask="false"/>
<Config Name="S3 Bucket" Target="S3_BUCKET"
Default="sendrec"
Type="Variable" Display="always" Required="true" Mask="false"/>
For S3-compatible providers like Garage, MinIO, or Backblaze B2, the checksum settings are pre-configured in the advanced view:
<Config Name="S3 Checksum Calculation" Target="AWS_REQUEST_CHECKSUM_CALCULATION"
Default="when_required"
Type="Variable" Display="advanced" Required="false" Mask="false"/>
Usage limits
Self-hosters typically want no limits. The template defaults all limits to 0 (unlimited):
<Config Name="Max Videos per Month" Target="MAX_VIDEOS_PER_MONTH"
Default="0"
Type="Variable" Display="always" Required="false" Mask="false"/>
<Config Name="Max Video Duration (seconds)" Target="MAX_VIDEO_DURATION_SECONDS"
Default="0"
Type="Variable" Display="always" Required="false" Mask="false"/>
Optional features
Transcription and AI summaries are configurable through the template. The whisper model gets mounted as a read-only volume:
<Config Name="Whisper Model" Target="/models" Default="" Mode="ro"
Description="Path to directory containing the whisper model file (ggml-small.bin, ~466 MB)."
Type="Path" Display="always" Required="false" Mask="false"/>
<Config Name="AI Enabled" Target="AI_ENABLED"
Default="true|false"
Type="Variable" Display="always" Required="false" Mask="false"/>
The Default="true|false" syntax creates a dropdown selector in the Unraid UI instead of a free-text field.
Display modes
Unraid templates support two display modes: always for settings most users need, and advanced for settings they typically don’t. We put the core settings (database, S3, limits) in the basic view and less common options (checksum settings, AI model name, frame ancestors) in the advanced view. This keeps the install dialog manageable while still exposing every configuration option.
Prerequisites warning
The <Requires> element shows a warning in the Unraid install dialog:
<Requires>PostgreSQL 16+ and S3-compatible storage (Garage, MinIO, AWS S3, etc.)</Requires>
This tells users they need to install PostgreSQL and an S3 provider before installing SendRec — both are available as separate containers in the Unraid CA store.
What’s next
The template repo is ready. The remaining steps to get into Unraid Community Applications are:
- Create a support thread on the Unraid forums
- Submit via the Community Applications form
- Wait for moderation review (typically 48 hours)
In the meantime, Unraid users can install SendRec manually by adding the template repository URL in the Docker tab, or by pulling the image directly from Docker Hub.
Try it
SendRec is open source (AGPL-3.0) and self-hostable. Pull the image from Docker Hub, check the Self-Hosting Guide, or try it at app.sendrec.eu.