diff --git a/internal/validate/job.go b/internal/validate/job.go index 2967281..6afe000 100644 --- a/internal/validate/job.go +++ b/internal/validate/job.go @@ -2,7 +2,6 @@ package validate import ( "encoding/json" - "fmt" "strings" "github.com/nexrender/nexrender-cli/internal/api" @@ -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 } diff --git a/internal/validate/job_test.go b/internal/validate/job_test.go index aaab508..8cdf885 100644 --- a/internal/validate/job_test.go +++ b/internal/validate/job_test.go @@ -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) + } } } diff --git a/skills/nexrender/references/operations.md b/skills/nexrender/references/operations.md index ce45805..9d824c1 100644 --- a/skills/nexrender/references/operations.md +++ b/skills/nexrender/references/operations.md @@ -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.