CLOUDMORROW

Quills / Personal

CutMorrow

A video editor for the videos in your drive: cut, trim and arrange clips on video and audio tracks, blur what should not be seen, crop, and export.

Star · 0 Nobody has starred it yet

What it does

  • Every video and sound in My Files is material: Edit this video, on a video in Media or Files, starts a project from it
  • A real timeline: video and audio tracks, pieces cut, trimmed, split, moved and rearranged; a higher video track covers a lower one
  • Sound from every piece, mixed: mute one, or set its volume
  • Blur a face, a number plate or a screen with keyframes: the box moves and resizes in a straight line between them, and moves with its piece
  • Crop the whole picture
  • A new project is the size you choose (1080p, 720p, 4K, vertical, square or your own), or its first clip's
  • Export to MP4, WebM, MOV, GIF or sound-only M4A, as the project or at 1080p, 720p or 480p, into My Files › CutMorrow Exports
  • The same editor on the web and the phone (live, with sound), in the terminal (real frames) and on the command line

Add it to your cloud

In your cloud, open Quills: Administration → Quills as an administrator, Me → Your Quills as anybody else. On its Catalog tab, CutMorrow is on the Personal shelf: open it and say yes. Its id, wherever your cloud asks for a quill by name:

id cutmorrow

Or on the command line, as an administrator for everyone, with --mine for yourself alone:

$ cm quill add cutmorrow

Either way your cloud shows you everything below and waits for your yes.

Standard. The installer offers CutMorrow when you set up a new cloud, so you may have it already. How installing works

What it adds to your cloud

Datamodels

The kinds of data it works with. On a fresh cloud everyone can read and write what it brings the moment it is installed; the install sheet says so, and an administrator narrows it with circles. Records belong to the people who write them, not to the quill: removing it leaves every one where it is. What it adds — fields of its own, datamodels of its own — stays too, unless the administrator removing it chooses to drop them.

Uses

File file

foundational

A file or a folder in a share or in My Files: a real file on disk, reached over WebDAV and the desktop app's mounts as well.

  • Share share link to Sharerequired Indexed
  • Path path text, one linerequired Indexed
  • Folder folder text, one line Indexed
  • Name name text, one linerequired Indexed
  • Kind kind one of File, Folder Indexed
  • Size size whole number Indexed
  • Modified modified date and time Indexed
  • Type mime text, one line Indexed
  • Text text text Encrypted
  • Deleted deleted date and time Indexed
  • Deleted from deleted_from text, one line Encrypted
Introduces

Effect cutmorrow.effect

new, from CutMorrow

A blur over part of a piece: what it hides, how strongly, and where its box is at moments of the piece.

  • Piece piece link to Piecerequired · deleted with its piece Indexed
  • Kind kind one of Blur Indexed
  • Label label text, one linerequired Encrypted
  • Strength strength whole number Encrypted
  • Keyframes keyframes JSON Encrypted
Introduces

Media cutmorrow.media

new, from CutMorrow

What a video or sound in My Files › Videos is: its length, picture size, frame rate, and whether it has sound.

  • File source text, one linerequired Indexed
  • Name name text, one linerequired Encrypted
  • Modified modified text, one line Encrypted
  • Length (seconds) duration number Encrypted
  • Width width whole number Encrypted
  • Height height whole number Encrypted
  • Frames per second fps number Encrypted
  • Has a picture video yes or no Encrypted
  • Has sound audio yes or no Encrypted
Introduces

Piece cutmorrow.piece

new, from CutMorrow

Part of a video or a sound on a project's track: where it starts, where in the file it is cut from, how long it lasts.

  • Project project link to Projectrequired · deleted with its project Indexed
  • Track track text, one linerequired Encrypted
  • File source text, one linerequired Indexed
  • Name name text, one linerequired Encrypted
  • Start start numberrequired Encrypted
  • Offset offset number Encrypted
  • Length length number Encrypted
  • Volume volume number Encrypted
  • Muted muted yes or no Encrypted
Introduces

Project cutmorrow.project

new, from CutMorrow

A video being edited: pieces of the videos and sounds in My Files › Videos on tracks, a crop, and its export.

  • Name name text, one linerequired Encrypted
  • Width width whole number Encrypted
  • Height height whole number Encrypted
  • Frames per second fps number Encrypted
  • Tracks tracks JSON Encrypted
  • Crop crop JSON Encrypted
  • Status status one of Editing, Queued, Rendering, Exported, Failed Indexed
  • Message message text, one line Encrypted
  • Export output text, one line Encrypted
  • Format format one of MP4 (H.264, AAC), WebM (VP9, Opus), MOV (H.264), GIF (no sound), M4A (sound only) Encrypted
  • Size size one of As the project, 1080p, 720p, 480p Encrypted
  • Export name export_name text, one line Encrypted
  • Exported at exported_at date and timeset when status becomes Exported Indexed

Indexed fields are kept plain, so your cloud can sort and filter by them. Encrypted fields are encrypted before they reach the disk.

Screens

CutMorrowA timeline of projects.

Each is a tab, drawn by your cloud itself on every surface:

  • Phonethe web app, made for the phone
  • Webthe full web app, in a browser
  • Terminalthe terminal app
  • Command linecm cutmorrow
  • Assistanttools for your assistant, as you

Its own code

Service renderpython services/render.py, kept running
API frames/api/q/cutmorrow/…, answered by its service render
Action edit-videoEdit this video, on a file; asks for name
Action exportExport, on a project; asks for format, size, name
Action refreshRefresh; asks for nothing

Its Python, quill.py, runs in a sandbox on your cloud, as whoever uses it, and reaches only what it declares. Your cloud shows all of this before you say yes; code on your own machine runs only once you switch it on there.

In its own words

A video editor for the videos in your own drive: lay clips on video and audio tracks, cut, trim and rearrange them, blur what should not be seen with keyframes, crop, and export a new file. It is a Quill for Cloudmorrow: the editor is Cloudmorrow's timeline kit, drawn on the phone, in the web app, in the terminal and on the command line by Cloudmorrow itself, and the pictures and exports are made beside your own server, with an ffmpeg the install brings. Nothing leaves it.

How it works

  1. Open CutMorrow: it starts on your projects. The new button asks for a name and a video size — 1080p, 720p, 4K, vertical, square, a size of your own, or the size of the first clip you add.
  2. In the editor, Add clip puts any video or sound from My Files at the playhead; move pieces along the timeline and between tracks, trim either end, split at the playhead, mute a piece or set its volume. A higher video track covers a lower one; every piece's sound is mixed. Or start from a video in Media (or Files): Edit this video on it makes a project with all of it on the first track.
  3. Add blur on a piece and drag its box over a face, a number plate or a screen. Every change sets a keyframe at the playhead; between keyframes the box moves and resizes in a straight line. Blurs belong to their piece, so moving the piece takes them with it.
  4. Crop the whole picture, if you like.
  5. Export: MP4 (H.264 and AAC, plays anywhere), WebM (VP9 and Opus), MOV, GIF (no sound) or M4A (the sound alone), as the project or at 1080p, 720p or 480p. The file lands in My Files › CutMorrow Exports, under the name you give it.

What it adds to your Cloudmorrow

Datamodels uses the foundational file; introduces cutmorrow.project (a timeline: its picture size, frame rate, tracks, crop, export settings and the status of its export), cutmorrow.piece (part of a file on a track: where it starts, where in the file it is cut from, how long, its volume), cutmorrow.effect (a blur on a piece and its keyframes) and cutmorrow.media (what the renderer read from a file: its length, size and whether it has sound)
Screens CutMorrow (the projects and the editor: the timeline kit) — on the phone, the web app, the terminal, cm cutmorrow, and to your assistant
Actions Edit this video (on a video's sheet, in Media or Files), Export (format, size, name), Refresh
Quills requires Media, which shows the videos and photos in your drive and is installed with CutMorrow
Services, APIs render: a program beside the server (services/render.py), kept running, with ffmpeg. It serves the frames API the editor's viewer draws from (/api/q/cutmorrow/frames/info, /source, /frame), fills in the lengths and sizes the editor leaves blank, and renders the exports, through the record API

What it needs

Media, which comes with the install: the manifest requires the media Quill ([requires] quills), so installing CutMorrow installs Media first, from the catalog, and Media cannot be removed while CutMorrow is here. Media works without CutMorrow.

ffmpeg, which comes with the install: the manifest requires the ffmpeg runtime, so the install sheet says what it adds to the server, and the server fetches the catalog's static build for its own machine, checks it, and puts ffmpeg and ffprobe first on the renderer's PATH. Nothing is installed on the system itself, and nobody opens a shell. Removing CutMorrow offers to take ffmpeg too when no other Quill needs it. Should the program ever be missing all the same, an export says so.

The renderer runs as the administrator who installed CutMorrow, the way Quill services do today, so it draws and renders the projects in their drive. Other people's projects wait for services that run for everyone.

Working on it

See CLAUDE.md. In short: cm quill check, cm quill test (and --sandbox), then cm quill dev --local. The renderer's arithmetic (a timeline to ffmpeg filter graphs) is services/graph.py, tested without a server in tests/test_graph.py; tests/test_render.py exports a real timeline made of tiny ffmpeg-generated media and looks at its pixels, when ffmpeg is installed.