Enlarge watermark badge for preview/encode parity and document video title fields.
Fix double-scaled badge preview, bump default watermark to 42% frame width, and update OSS docs/API for title vs songTitle separation and shared typography. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
c8015937f9
commit
56880256e5
@@ -26,14 +26,21 @@ Templates are enum-based. Free-form cover coordinates (`x`, `y`, `coverX`, …)
|
||||
|
||||
Pick a template in the UI under **Composition**, or set `metadata.layout.template` in the API.
|
||||
|
||||
## Title and artist
|
||||
## Video title, song title, and artist
|
||||
|
||||
Each track can have:
|
||||
YouTube metadata and on-video layout text are separate fields:
|
||||
|
||||
- **Title** — used on the video and as the YouTube title (often prefilled from the filename)
|
||||
- **Artist** — drawn under the title on art-track layouts (max 80 characters)
|
||||
| Field | UI label | Purpose | Limits |
|
||||
|-------|----------|---------|--------|
|
||||
| `title` | **Video title** | YouTube upload title only | Required unless fallback applies (below) |
|
||||
| `songTitle` | **Song title** | Track title burned into art-track layouts | Max **120** characters |
|
||||
| `artist` | **Artist** | Artist line under the song title on art-track layouts | Max **80** characters |
|
||||
|
||||
Artist is especially useful when ID3 tags or your API payload include it.
|
||||
- On the dashboard, video title is always editable. Song title and artist control the Layout Studio preview and the encoded frame.
|
||||
- If **video title** is left empty, Songs2VID falls back to ``${artist} - ${songTitle}`` (or whichever of those is present). Self-hosted editions always have this unlocked.
|
||||
- ID3 tags (when readable) typically prefill song title / artist and a combined video title such as `Artist - Song`.
|
||||
|
||||
Classic letterbox mode does not burn song title or artist into the frame; they still matter for the YouTube title fallback when video title is omitted.
|
||||
|
||||
## Blur background
|
||||
|
||||
@@ -68,38 +75,42 @@ Modes:
|
||||
| Mode | Effect |
|
||||
|------|--------|
|
||||
| `none` | No watermark |
|
||||
| `default` | Built-in Songs2VID branding |
|
||||
| `text` | Custom text with optional typography |
|
||||
| `logo` | Custom PNG (upload with `type=logo`, then set `logoPath`) |
|
||||
| `default` | Built-in **Songs2VID badge** PNG (`assets/watermark.png`), same asset in Layout Studio preview and FFmpeg output (~42% of frame width) |
|
||||
| `text` | Custom text (max **80** characters) |
|
||||
| `logo` | Custom PNG (upload with `type=logo`, then set `logoPath`; same ~42% width scaling) |
|
||||
|
||||
### Position and offset
|
||||
|
||||
- **Position**: `top-left` · `top-right` · `bottom-left` · `bottom-right` · `center`
|
||||
- **Offsets** (`offsetX` / `offsetY`): `0`–`200` px from the chosen anchor (default `20`)
|
||||
|
||||
### Typography (text mode)
|
||||
### Typography
|
||||
|
||||
Font choice applies to **art-track song title / artist** and to **text watermarks**. Layout Studio loads the same `.ttf` files FFmpeg uses, so preview and encoded video stay aligned.
|
||||
|
||||
Curated fonts (bundled under `assets/fonts` after fetch):
|
||||
|
||||
- `system` — FFmpeg default
|
||||
- `system` — Arial / Helvetica in preview; FFmpeg system default when encoding
|
||||
- `inter` · `montserrat` · `roboto` · `oswald` · `playfair`
|
||||
- `custom` — your `.ttf` / `.otf` (max 10 MB; upload with `type=font`, set `fontKey: "custom"` and `fontPath`)
|
||||
|
||||
Set `watermark.fontKey` (and `fontPath` for custom) even when watermark mode is `default` or `none` if you only need the font for art-track text.
|
||||
|
||||
Refresh curated files if missing:
|
||||
|
||||
```bash
|
||||
node scripts/fetch-watermark-fonts.mjs
|
||||
```
|
||||
|
||||
Text length is capped at 80 characters.
|
||||
|
||||
## Dashboard workflow
|
||||
|
||||
1. Add audio (and optional per-track covers)
|
||||
2. Open **Layout Studio** on a track
|
||||
3. Choose classic or a template, then tune blur, padding, gaps, and text offsets
|
||||
4. Configure watermark mode, font, and position
|
||||
5. Preview updates live; submit to enqueue encoding
|
||||
2. Set **Video title** (YouTube) and, for art-tracks, **Song title** / **Artist**
|
||||
3. Open **Layout Studio**
|
||||
4. Choose classic or a template; tune blur, padding, gaps, and text offsets
|
||||
5. Under **Typography**, pick a curated or uploaded font
|
||||
6. Configure watermark mode (Songs2VID badge / text / logo), position, and offsets
|
||||
7. Preview updates live; submit to enqueue encoding
|
||||
|
||||
## API
|
||||
|
||||
@@ -107,7 +118,8 @@ See [Endpoints](./api/endpoints.md) for curl examples. Layout and watermark obje
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "My Track",
|
||||
"title": "My Artist - My Track (Official Audio)",
|
||||
"songTitle": "My Track",
|
||||
"artist": "My Artist",
|
||||
"layout": {
|
||||
"template": "COVER_LEFT_TEXT_RIGHT",
|
||||
@@ -119,8 +131,7 @@ See [Endpoints](./api/endpoints.md) for curl examples. Layout and watermark obje
|
||||
"textOffsetY": 0
|
||||
},
|
||||
"watermark": {
|
||||
"mode": "text",
|
||||
"text": "My Label",
|
||||
"mode": "default",
|
||||
"fontKey": "montserrat",
|
||||
"position": "bottom-right",
|
||||
"offsetX": 24,
|
||||
@@ -128,3 +139,5 @@ See [Endpoints](./api/endpoints.md) for curl examples. Layout and watermark obje
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Here `title` is the YouTube title, `songTitle` / `artist` appear on the art-track frame, and `fontKey` styles that on-video text even though the watermark is the default Songs2VID badge.
|
||||
|
||||
Reference in New Issue
Block a user