Skip to content

Releases

Open Matte 1.1.0

Choose a tag to compare

@arthurclack arthurclack released this 10 Nov 21:57

A new look: a one-shelf video shop, with tapes, staff picks and a membership card.

What's new

  • Your films are tapes on a shelf. A film's poster is printed as its sleeve; with no artwork, it gets a plain kraft sleeve with a typed label. Your staff pick sits beside it, handwritten, and the next deadline is on an orange sticker: start by, due back, or come back by.
  • A membership card for everyone you add. It's printed in your colour, with the month you added them stamped on the back and their name in ballpoint, and it turns over. Signing in is "Show your card", and the page that makes a passkey ends on it.
  • The video machine. Play, a short PLAY screen and the strip under a paused film are its blue screen, with the time left to come back. While the film plays, the player is plain, with the same controls (Quality is now Picture).
  • Your name, in Settings, signs your staff picks ("Picked by Arthur") and tells friends whom to ask. Left empty, they see the shop's name. Like the shop's name, it's in every page the site sends, so anyone who opens its address can read it.
  • The fonts come from your own server. The pages' Content-Security-Policy allows fonts from the shop's own address and nowhere else (font-src 'self'). They're under the SIL Open Font License, and the licences file gives each licence in full.

Changes

  • The same rules, links and data, and no migration. The words change: a ticket is a tape, a screening is a play, People are Members, Activity is the Ledger, and the admin is the back office. Routes, the API and the database keep their old names (the full list).
  • The default background is now #171513, a little lighter and warmer. A shop still on the old default gets it, and the same goes for the front page message. A background or message you chose is kept: if you wrote your own message, check it doesn't still talk of tickets.
  • Your colour prints the membership card, colours the tab icon and tints what's selected. It no longer colours buttons and links. On the new default background, a few colours that passed before, such as #ff0000, are now refused. One you've already saved is kept.

Updating

Back up first, then update as usual (docs/deploying.md). There is no database change, so going back to 1.0.3 needs no restore. If you go back after saving Settings or colours here, check the front page message and the background in 1.0.3's Settings. The full list is in the changelog.

Open Matte 1.0.3

Choose a tag to compare

@arthurclack arthurclack released this 05 Nov 06:01

Tidier pages, phone and accessibility fixes, and tests on GitHub.

Changes

  • Your account lists this browser first, then the rest from the most recently seen. Two that would read the same also say when each signed in.
  • The footer is one block: TMDB's logo and its notice together, then "Powered by Open Matte · Licences".
  • The admin on a phone: the tabs are one row that scrolls sideways, with the next tab showing and the current one in view.
  • The licences file starts with Open Matte's copyright and licence, notes how little of Vite and Rolldown reaches your browser, includes Rolldown's third-party licences, and ends with "End of licences".

Fixes

  • On a phone: tapping the player's Audio, Subtitles or Quality menus no longer zooms the page; small buttons have 40px tap targets; the player bar lines up in tidy rows.
  • Accessibility: the ▶ and ▾ characters are drawn icons now, so buttons are named "Play" or "Resume at 42:17" and phones can't draw them as emoji. Smooth scrolling and the poster's hover lift respect your device's reduce motion setting.
  • hls.js 1.7.4 fixes switching audio back to a track already loaded, and a seek that could restart loading after a refused request. React Router 7.18.5.

Housekeeping

  • scripts/deploy.sh and the Docker build leave out the project website (site/). The temporary exclude for the old deploy/Caddyfile is gone, so the next deploy removes that file.
  • Every push and pull request is now tested on GitHub, on Node 22, 24 and 26.

Updating

Back up first, then update as usual (docs/deploying.md). There is no database change, so going back to 1.0.2 needs no restore. The full list is in the changelog.

Open Matte 1.0.2

Choose a tag to compare

@arthurclack arthurclack released this 04 Nov 22:14

Security fixes, TMDB's credit, and fixes to the admin and the film pages.

Security

  • Nobody can probe which films a cinema holds. A refused request for a film's artwork now answers exactly as a film that doesn't exist does, and the same goes for Keep it. Before, a stranger who guessed a film's address could tell the two apart, unpublished films included.
  • Limits: missed artwork requests are limited per address and per IPv6 /48, refused requests can no longer flood the server's log, and admin sign-in is also limited per IPv6 /48. There is deliberately no limit across all addresses, so nobody can lock you out of your own admin.
  • One browser can no longer hold every poster download place.

TMDB

If you use a TMDB key, every page now shows TMDB's logo and the notice its terms require, and keeps them while anything from TMDB is on show, even after you remove the key. docs/metadata.md says what TMDB's terms ask of you: a free key is for non-commercial use only. The logo is TMDB's trademark and isn't covered by the GPL.

Fixes

  • On a phone, every admin tab can be reached. Cards side by side line up, and Films stays marked on a film's page.
  • Keyboard focus is visible everywhere. Times no longer show a stray leading zero, and never split before AM or PM.
  • Faint text, such as hints and table headings, is easier to read.
  • The README and the guides: upload speeds, storage (up to about 38 GB for a two-hour 4K HDR film), and what a backup holds.

Updating

Back up first, then update as usual (docs/deploying.md). If you chose your own background colour, read the Upgrading note in the changelog: it may be refused the next time you change your colours. Going back to 1.0.1 needs no restore.

Open Matte 1.0.1

Choose a tag to compare

@arthurclack arthurclack released this 04 Nov 20:37

Open Matte 1.0.1 runs on Node 26, the long-term support line since October, in place of Node 24. Nothing else changes.

  • The image runs on Node 26 (node:26-slim), which gets security updates until the end of April 2029. Node 24 has moved to maintenance.
  • Dependabot no longer proposes a new major version of the Node image: moving to the next long-term support line is done by hand.

Updating

Back up first, as for every update, then update as usual: with git, git fetch --tags, git checkout v1.0.1 and docker compose up -d --build in deploy/ (docs/deploying.md). There is nothing else to do, and going back to 1.0.0 needs no restore.

The full list is in CHANGELOG.md.

Open Matte 1.0.0

Choose a tag to compare

@arthurclack arthurclack released this 04 Nov 19:44

Open Matte is a small, self-hosted cinema for recommending films to friends. You publish a handful of films you think people should see, write a few lines on why, and send a friend a ticket: a link that opens the film in their browser. You run it on your own server, for people you know. It isn't a media server, and it isn't DRM.

This is the first numbered release. It brings together ticketed playback, people and passkeys, and the work for a public release.

What's in 1.0.0

  • Tickets and screenings: an "admit one" link per film, with an optional screening limit, start-by date and number of days after first play. Pressing Play starts a screening, which can be paused and resumed for 48 hours, on one device at a time. Revoking a ticket stops it on the next request.
  • Protected playback: every playlist, segment, audio and subtitle request is checked against the browser's session, its ticket and the screening it holds. Adaptive HLS, through hls.js or Safari's own player, in HEVC and H.264, with HDR10.
  • For viewers: audio and subtitle choices remembered in each browser, forced subtitles that show by themselves, the film's title and poster on the lock screen, and a Playback help summary to send you when something won't play.
  • People and passkeys: you add people in the admin, and nobody can sign up. Tickets only one person can use, signed in; keeping a ticket in an account; films shown to members; an account page; and recovery when someone loses a device.
  • The admin: scan the media folder, publish, issue and revoke tickets, add people, filter Activity, choose how long records are kept, and check on the server under Status.
  • Branding: your cinema's name, colours, logo and tab icon. A ticket link for anyone shows its film's poster and title in chat apps; a ticket for one person shows only the cinema.
  • Films: one folder per film, described by a film.json; details and artwork from TMDB if you want them; and a reference encoder for HEVC and H.264.
  • Backups every day, keeping the last 14 days and one a month for a year, with Back up now in the admin and a timer to copy them off the server.
  • Hardening: a Content-Security-Policy on every page, an admin session key made with scrypt, and a running image with no package manager.
  • Documentation: installing on a fresh server, with the films on network storage if you like; updating, backing up, restoring and moving to a new server; the changelog and SECURITY.md. The site also serves licence notices for the code it sends to browsers.

The full list, with what changed and what was fixed, is in CHANGELOG.md.

Installing

Follow docs/installing.md. It takes you from a fresh server to a working cinema and a played ticket.

You need an Ubuntu 26.04 or 24.04 LTS server, on x86_64 or ARM64, with a public IPv4 address and ports 80 and 443 open; a domain you can add DNS records to; and films prepared on your own computer with the encoder (docs/encoding.md). The guide installs Docker for you.

Updating from an earlier deploy

Read the Upgrading note for 1.0.0 before you update. It needs a backup first, copied off the server, because going back needs a restore.

Security

To report a security problem, use GitHub's private vulnerability reporting, as SECURITY.md describes.

Licence

Open Matte is released under the GNU General Public License, version 3 or (at your option) any later version (GPL-3.0-or-later). See LICENSE.