Calendar¶
The Calendar gives you a single month view that merges two things: upcoming media releases pulled from your Sonarr, Radarr, and Lidarr instances, and NAS system events like backup jobs, SnapRAID syncs, and runs of the Shelver (the scheduled cache-to-array mover). Open it from Calendar in the sidebar (/calendar).
Media releases and backup events always show. SnapRAID sync/scrub events show once you've set up SnapRAID (either Eight.ly's own scheduler or a systemd timer); Shelver events show once you've enabled the cache mover.
The Month View¶
The main grid shows the current month with an event chip on each day it applies to. Chips are colour-coded by source and truncate to the first three per day (a "+N more" indicator appears when a day is busier than that). Use the arrows to move between months or Today to jump back.
Below the grid, two lists summarise what's coming up:
- NAS System Events — scheduled backups, SnapRAID syncs, and Shelver runs for the month.
- Upcoming This Month — media releases from your connected *arr apps.
Media Releases¶
Connect your *arr apps and the Calendar fetches their release calendars for the visible month:
| Source | Colour | What it shows |
|---|---|---|
| Sonarr | Blue | TV episodes — series title with SxxExx and the episode name, on the air date |
| Radarr | Amber | Movies — the digital, physical, or cinema release date (whichever is set first) |
| Lidarr | Green | Music — artist and album, on the album release date |
Each service is queried over its own API (/api/v3/calendar for Sonarr and Radarr, /api/v1/calendar for Lidarr) using the API key you provide. Requests run server-side and are SSRF-guarded, so a service URL that resolves to an internal address is rejected before the fetch.
Connecting an *arr app¶
Click Integrations in the top-right of the Calendar to open the connection dialog. For each service, pick the type (Sonarr, Radarr, or Lidarr), enter its URL and API key, and toggle it on:
- URL — the base address of the service, e.g.
http://192.168.1.100:8989. - API Key — found in the service under Settings > General.
Click Save & Refresh to store the integrations and reload the calendar.
API keys are masked
When you reopen the dialog, saved keys are shown masked — only the last four characters are visible. Saving without changing a masked key preserves the original value, so you never have to re-enter it. Integrations are stored at /var/lib/eightly/calendar-integrations.json. Editing them requires the operator role.
NAS System Events¶
If you've set up storage, the Calendar also plots the NAS's own schedule so backups and maintenance sit alongside your media in one place. These events are derived from the real system state — they are never invented:
| Event | Colour | Source of truth |
|---|---|---|
| Backup jobs | Violet | Scheduled and last runs from your backup jobs — shown as Scheduled, Completed, or Failed |
| The Shelver | Cyan | The next Shelver (cache mover) run, when it is enabled (default daily at 3:00 AM) |
| SnapRAID Sync / Scrub | Green | The next scheduled sync/scrub, from either Eight.ly's own SnapRAID schedule or the snapraid-sync.timer / snapraid-scrub.timer systemd timers |
Only real schedules appear
SnapRAID events come from an actual configured schedule. If nothing is configured, no SnapRAID event is shown — the existence of /etc/snapraid.conf alone is not treated as a schedule.
Scheduling maintenance¶
The Schedule button lets you create a recurring backup job — or, if you've set up SnapRAID, a SnapRAID sync — on a cron schedule. Give it a name and a cron expression (the default 0 2 * * * runs nightly at 2:00 AM) and it appears on the calendar going forward.
API¶
The Calendar is backed by three endpoints under /api/calendar:
| Method | Path | Role | Purpose |
|---|---|---|---|
GET | /api/calendar/events?start=&end= | viewer | Merged media + system events for the range (start/end are ISO 8601) |
GET / PUT | /api/calendar/integrations | viewer / operator | Read (masked) or replace the *arr integrations |
POST | /api/calendar/schedule | operator | Trigger a SnapRAID sync/scrub, SMART short test, or mover run (audit-logged) |
Events are returned sorted by date, each carrying an id, source, title, optional subtitle, date, color, and a type of media or system.
See Also¶
- Media Requests — approve and track Overseerr/Jellyseerr requests
- Storage Management — SnapRAID, MergerFS, and the cache mover
- Eight.ly Backup Server — scheduling and running backups