Watermark video
Stamp a text watermark onto every frame of a video, in the browser only, like video-convert (src/tools/video-convert.ts), because compositing needs a decoded frame from WebCodecs, which Node has no equivalent of. Always outputs MP4. Nothing is uploaded.
Runs on your device. The file is never uploaded.
Watermark video paints text you type onto every frame and writes MP4 with a -watermarked.mp4 ending. Five positions are available, defaulting to the bottom right, with the type set bold at a twentieth of the shorter frame edge. There is no image input, and painting a frame needs WebCodecs, which Node lacks, so this runs on the page.
Questions
Can the watermark be removed later?
No. The text is drawn into the pixels of every frame, so it is part of the picture from then on. That is the point of burning one in. Keep your original file if you might want a clean copy, because this tool writes a new file and cannot undo the stamp on one it already made.
Does it re-encode the video?
Yes, it has to. Drawing on a frame means decoding it, painting on a canvas and encoding it again, and the tool sets forceTranscode so that round trip always happens. That costs one generation of quality and real time on long files. The audio track is carried through the same conversion.
Where does the text go and can I style it?
The position option puts it in one of five places: top-left, top-right, bottom-left, bottom-right (the default) or center. Styling is fixed: bold sans-serif at 5 percent of the shorter side of the frame with a 12 pixel floor, white at 90 percent opacity, with a dark outline so it stays readable on both light and dark footage. Only the text and the position are yours to set.
Can I use an image or a logo instead of text?
No. The text option is required and takes a string with at least one character, and there is no image input. This tool stamps typed text only. For a logo you would need a compositing tool, which this is not.
What comes out?
Always MP4, named after your input with -watermarked.mp4 on the end, whatever container went in. If your browser cannot handle a track, the tool refuses with "this browser cannot watermark it" and names the discarded track and reason instead of writing an empty file.
Does it work on the command line?
No. Compositing needs a decoded frame from WebCodecs, which Node has no equivalent of, so the CLI and MCP surfaces refuse it with "video-watermark needs a browser (OffscreenCanvas). Use it at /video/video-watermark instead." On the page, the file is read and stamped in a Web Worker with nothing uploaded.