Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions internal/validate/job.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package validate

import (
"encoding/json"
"fmt"
"strings"

"github.com/nexrender/nexrender-cli/internal/api"
Expand All @@ -20,14 +19,5 @@ func JobPayload(data []byte) (api.JobCreation, error) {
if payload.Preview != nil && *payload.Preview && payload.Settings != nil {
return api.JobCreation{}, clierr.Validation("preview and settings cannot be used together", "Remove settings for a preview job, or set preview to false.")
}
if payload.Settings != nil && payload.Settings.Codec != nil {
codec := strings.TrimSpace(*payload.Settings.Codec)
if codec != "" && !strings.HasPrefix(codec, "video_") && !strings.HasPrefix(codec, "image_") {
return api.JobCreation{}, clierr.Validation(
fmt.Sprintf("codec %q is missing its output prefix", codec),
"Use a full identifier such as video_h264_vbr_15mbps, video_prores_422, or image_png.",
)
}
}
return payload, nil
}
13 changes: 10 additions & 3 deletions internal/validate/job_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,15 @@ func TestJobPayloadRules(t *testing.T) {
if _, err := JobPayload(previewWithSettings); err == nil {
t.Fatal("expected preview/settings conflict")
}
shortCodec := []byte(`{"template":{"id":"tpl"},"settings":{"type":"video","codec":"h264"}}`)
if _, err := JobPayload(shortCodec); err == nil {
t.Fatal("expected short codec to fail")
}

// The API matches codecs by suffix, and its OpenAPI examples use short names, so the
// CLI must not reject them. Unknown codecs are left to the API, which lists the options.
func TestJobPayloadAcceptsShortAndFullCodecNames(t *testing.T) {
for _, codec := range []string{"png", "jpeg", "h264_vbr_5mbps", "prores_4444", "gif", "image_png", "video_h264_vbr_15mbps"} {
payload := []byte(`{"template":{"id":"tpl","composition":"Main"},"settings":{"type":"video","codec":"` + codec + `"}}`)
if _, err := JobPayload(payload); err != nil {
t.Fatalf("codec %q was rejected: %v", codec, err)
}
}
}
2 changes: 1 addition & 1 deletion skills/nexrender/references/operations.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## Job payloads

- Layer names are case-sensitive. Use the `name` returned by `template layers` as `layerName`.
- Codec identifiers use their full prefix, such as `video_h264_vbr_15mbps`, `image_png`, or `video_prores_422`.
- Codecs can be given by their short name (`h264_vbr_15mbps`, `prores_422`, `png`, `gif`) or in full (`video_h264_vbr_15mbps`, `image_png`). The API rejects unknown codecs and lists the supported ones.
- `preview: true` and `settings` are mutually exclusive. Preview mode ignores normal output settings.
- `${secrets.NAME}` is the secret reference form.
- `missingFonts` is a visual-correctness warning. A render may finish with fallback fonts and still be wrong.
Expand Down
Loading