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.
This commit is contained in:
Atakan Doğan Özban
2026-07-27 18:28:07 +02:00
parent 9404efd86c
commit 0c9b07bcb5
8 changed files with 76 additions and 45 deletions
+16 -11
View File
@@ -46,7 +46,7 @@ curl -X POST "$BASE_URL/api/v1/upload" \
```
```bash
# Optional: custom watermark font (.ttf / .otf, max 10 MB)
# Optional: custom font (.ttf / .otf, max 10 MB) for art-track / text watermark
curl -X POST "$BASE_URL/api/v1/upload" \
-H "Authorization: Bearer $API_KEY" \
-F "file=@Brand.ttf" \
@@ -93,7 +93,7 @@ curl -X POST "$BASE_URL/api/v1/upload" \
| `size` | Bytes |
| `audioTags` | Present for MP3 when tags are readable; otherwise `null`. Fields may be omitted when missing in the file |
Upload the shared cover once (`type=image`), each audio (`type=audio`), optionally a PNG logo (`type=logo`), and optionally a custom font (`type=font`) for text watermarks.
Upload the shared cover once (`type=image`), each audio (`type=audio`), optionally a PNG logo (`type=logo`), and optionally a custom font (`type=font`) for art-track typography and/or text watermarks.
## Create job from paths (recommended)
@@ -111,7 +111,8 @@ curl -X POST "$BASE_URL/api/v1/jobs" \
"audioPath": "/uploads/.../track.mp3",
"audioFilename": "track.mp3",
"metadata": {
"title": "My Track",
"title": "My Artist - My Track (Official Audio)",
"songTitle": "My Track",
"artist": "My Artist",
"description": "",
"tags": "electronic",
@@ -134,8 +135,7 @@ curl -X POST "$BASE_URL/api/v1/jobs" \
"textOffsetY": 0
},
"watermark": {
"mode": "text",
"text": "My Label",
"mode": "default",
"fontKey": "montserrat",
"position": "bottom-right",
"offsetX": 24,
@@ -164,8 +164,9 @@ curl -X POST "$BASE_URL/api/v1/jobs" \
| Field | Type | Notes |
|-------|------|--------|
| `title` | string | Video title |
| `artist` | string \| null | On-video artist line (max **80**) |
| `title` | string | **YouTube** video title. If empty, falls back to ``${artist} - ${songTitle}`` when those are set |
| `songTitle` | string \| null | On-video song / track title for art-track layouts (max **120**) |
| `artist` | string \| null | On-video artist line for art-track layouts (max **80**) |
| `description` | string | YouTube description |
| `tags` | string | Comma-separated (quoted tags supported) |
| `privacy` | string | `PUBLIC` \| `PRIVATE` \| `UNLISTED` |
@@ -224,11 +225,15 @@ Official reference: [YouTube Data API — VideoCategories](https://developers.go
`watermark.position`: `top-left` | `top-right` | `bottom-left` | `bottom-right` | `center`.
`watermark.mode`: `none` | `default` | `text` | `logo` (logo requires prior `type=logo` upload; set `logoPath`).
`watermark.mode`: `none` | `default` | `text` | `logo`
- `default` — built-in Songs2VID badge PNG (`assets/watermark.png`), scaled to ~**42%** of frame width (matches Layout Studio preview)
- `logo` — requires prior `type=logo` upload; set `logoPath` (same width scaling)
- `text` — custom string (max **80**); set `text`
`watermark.offsetX` / `offsetY`: `0``200` (default `20`) — pixels from the chosen anchor.
`watermark.fontKey` (text mode): `system` | `inter` | `montserrat` | `roboto` | `oswald` | `playfair` | `custom`. For `custom`, upload with `type=font` first and set `fontPath` to the returned path. Text max length: **80**.
`watermark.fontKey`: `system` | `inter` | `montserrat` | `roboto` | `oswald` | `playfair` | `custom`. Styles **art-track song title / artist** and **text watermarks** (same `.ttf` files in preview and FFmpeg). For `custom`, upload with `type=font` first and set `fontPath`. `system` maps to Arial in the dashboard preview.
For a full walkthrough of composition controls, see [Video editing](../video-editing.md).
@@ -254,7 +259,7 @@ Optional fine-tuning (clamped; camelCase or snake_case):
| `textOffsetX` / `text_offset_x` | 120120 | 0 | Shift text block horizontally |
| `textOffsetY` / `text_offset_y` | 120120 | 0 | Shift text block vertically |
Also set `metadata.artist` (max 80) for the on-video artist line.
Also set `metadata.songTitle` (max 120) and `metadata.artist` (max 80) for the on-video text lines. `metadata.title` remains the YouTube title (see [Video editing — Video title, song title, and artist](../video-editing.md#video-title-song-title-and-artist)).
Omit `layout.template` (or use classic letterbox) when you only want a black-padded cover. Free-form cover coordinates (`x`, `y`, `coverX`, …) and layout-level `offsetX`/`offsetY` are **rejected** (use `textOffsetX`/`textOffsetY` instead; watermark offsets stay under `watermark`).
@@ -321,7 +326,7 @@ curl -X POST "$BASE_URL/api/v1/jobs/batch" \
Optional `metadata` JSON supports `defaults` applied to every item and per-item overrides in `items`. Item order should match the order of `audio` files.
When item metadata is omitted, batch defaults include privacy `PUBLIC`, resolution `1920x1080`, and watermark off unless overridden in `defaults`.
When item metadata is omitted, batch defaults include privacy `PUBLIC`, resolution `1920x1080`, and watermark off unless overridden in `defaults`. Per-item `title` is the YouTube title (falls back from the audio filename when omitted). Pass `songTitle` and `artist` in `items[]` or `defaults` when using art-track layouts.
**Multipart tips**