Utilities and montage
Video, image and audio processing, subtitles, SEO and Content Credentials through the API.
Nine modules: C2PA Signer Profiles, FORSAJ, HOLST, INDEXLIFT, KLEY, OVERLAY, PLASTINKA, SPEKTR and SUFLER. Contracts were checked against source on 8 September 2026; access depends on your account and the selected operation.
Connection and upload
Keep your API key in the FRANKLAB_KEY environment variable. Examples use origin https://apergrex.ru; all paths below already include /franklab/api. The repeated franklab in /franklab/api/franklab/jobs is required. SPEKTR/Recraft uses X-API-Key; other examples use Authorization: Bearer. Do not supply partnerId.
export FRANKLAB_ORIGIN="https://apergrex.ru"
# FRANKLAB_KEY is supplied by your secret manager
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/upload" \
-H "Authorization: Bearer $FRANKLAB_KEY" \
-F "file=@synthetic.mp4;type=video/mp4"Use upload response data.url to replace https://example.com/synthetic.* in examples; those URLs are placeholders, not downloadable media. Maximum 150 MiB, source retention 7 days. MIME: video/mp4, video/webm, video/quicktime, video/x-msvideo; audio/mpeg, audio/mp3, audio/wav, audio/ogg, audio/pcm, audio/l16, audio/x-pcm; image/png, image/jpeg, image/gif, image/webp. Upload does not convert formats. URLs must be server-accessible; private/local URLs and prohibited redirects are rejected. Save completed outputs before expiresAt when provided.
Connection check: GET /franklab/api/franklab/integrations/text-sticker/auth/stats with an API key. SPEKTR Make reads GET /franklab/api/v1/images/omni-image?pageNum=1&pageSize=1. This reads history/checks authentication; it does not test generation.
Status, output and billing
A successful submission returns HTTP 200 and success:true, which does not mean the output is ready. Store data.taskId; poll the matching route every 5 seconds until data.status=completed or failed. queued and processing are non-terminal. Set a finite deadline; resume reading the existing ID after a timeout. Do not automatically repeat POST after an ambiguous network error.
| Family | Polling | Output / error |
|---|---|---|
| FORSAJ, HOLST, KLEY, PLASTINKA, SUFLER, SPEKTR jobs | GET /franklab/api/franklab/jobs/{taskId} | data.downloadUrl, metadata; data.error |
| OVERLAY | GET /franklab/api/make/jobs/{taskId} | data.result.downloadUrl; data.error / data.result.error |
| INDEXLIFT async | GET /franklab/api/franklab/jobs/audit-landing/async/{taskId} | data.result.data.seo_report, data.result.data.brief_suggestions, data.phase, data.error_message |
| SPEKTR Recraft | GET /franklab/api/v1/recraft/record-info?taskId=... | data.state, parse data.resultJson → resultUrls[]; data.failMsg |
| C2PA, sample resources | No task polling | data profile/sample |
Jobs expose final_cost_franks, cost_currency=FRANK, cost_status and cost_unit. With cost_status=reserved, the amount is reserved; final is settled, refunded is refunded, and unavailable means no reliable price. Frank is an internal accounting unit, not a currency. A missing field does not mean zero cost. The server checks tariff and capability access. No separate generic utility REST estimate is confirmed; Studio estimate is not a universal utility quote. C2PA list is free in source; profile mutations may be billed. Recraft passthrough and synchronous INDEXLIFT do not establish this settlement contract.
HTTP 400 usually means invalid parameters or combinations; 401 means authentication; 404 means missing resource; 429 means rate limiting. For 5xx/provider errors, reconcile the existing task before resubmission. success:true with data.status=failed is still failure. Diagnostic operations may return metadataReport/metrics/qcReport without a file; availability is qualified separately.
Content Credentials (C2PA)
Supporting jobs accept c2paSigningMode=off|franklab|user_profile, c2paSignerProfileId for user_profile, and contentOrigin=not_declared|human_edited|ai_assisted|ai_generated|human_created|camera_captured. Optional strings: humanAuthorName, humanAuthorUrl, reviewedBy, reviewedAt, reviewMethod, c2paActionDescription, c2paDisclosure. sourceMaterialUrls and originalEvidenceUrls each allow up to 10 public HTTPS URLs. Restricted human_created/camera_captured claims require an active permitting profile and evidence. Request verifiedIncomingC2paIngredient is not proof: the server verifies the result. Signing is separate from trusted-chain validation: inspect c2paStatus, c2paSigned, c2paCryptographicallyValid, c2paTrustedChainValid, c2paCawgIdentityPresent, c2paPublicVerifierRecognized, c2paManifestUrl and c2paVerificationReport. OVERLAY make/jobs DTO does not declare C2PA fields.
C2PA Signer Profiles
Listing returns active partner profiles without PEM secrets. Creation and rotation take your certificate/key; generate_self_signed creates a self-signed profile. trustLevel=trusted is rejected here. Rotation creates a new version; keep profile IDs distinct. Revocation changes profile validity. No credential mutation was tested.
Operations and minimal JSON requests
Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.
| Operation | HTTP and path | Minimal JSON / status |
|---|---|---|
list | GET /franklab/api/make/c2pa/signer-profiles | {} source |
generate_self_signed | POST /franklab/api/make/c2pa/signer-profiles | {"action":"generate_self_signed","label":"My signing profile"} source |
create_from_pem | POST /franklab/api/make/c2pa/signer-profiles | {"action":"create_from_pem","label":"My signing profile","certificateChainPem":"<YOUR_CERTIFICATE_CHAIN_PEM>","privateKeyPem":"<YOUR_PRIVATE_KEY_PEM>"} source |
rotate_from_pem | POST /franklab/api/make/c2pa/signer-profiles/{profileId}/rotate | {"label":"My signing profile","certificateChainPem":"<YOUR_CERTIFICATE_CHAIN_PEM>","privateKeyPem":"<YOUR_PRIVATE_KEY_PEM>"} source |
revoke | POST /franklab/api/make/c2pa/signer-profiles/{profileId}/revoke | {} source |
lookup_signer-profiles | GET /franklab/api/make/c2pa/signer-profiles | source |
check_connection | GET /franklab/api/franklab/integrations/text-sticker/auth/stats | source |
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/make/c2pa/signer-profiles" \
-H "Authorization: Bearer $FRANKLAB_KEY"REST fields
Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.
| Field | Type | Conditions and allowed values |
|---|---|---|
action | string | required (generate_self_signed); Required input in this operation example; required (create_from_pem) |
label | string | required (generate_self_signed); label; required (create_from_pem); required (rotate_from_pem) |
allowRestrictedOriginClaims | boolean | allow Restricted Origin Claims; / true / false |
certificateChainPem | string | required (create_from_pem); certificate Chain Pem; required (rotate_from_pem) |
privateKeyPem | string | required (create_from_pem); private Key Pem; required (rotate_from_pem) |
profileId | string | required (rotate_from_pem); Path parameter: owned active signer profile ID; required (revoke) |
Make options and REST conversion
This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.
| Form field | When | Values |
|---|---|---|
action | list / generate_self_signed / create_from_pem / rotate_from_pem / revoke | |
profileId | action=rotate_from_pem | rpc://getC2paSignerProfiles |
allowRestrictedOriginClaims | action=rotate_from_pem | / true / false |
profileId | action=revoke | rpc://getC2paSignerProfiles |
Response and verification limits
HTTP 200 {success:true,data:PROFILE[]}; profileId,id,label,status,trustLevel,allowRestrictedOriginClaims,version,profileGroupId,createdAt,updatedAt,rotatedAt,revokedAt; no PEM returned.
For rotation REST accepts optional allowRestrictedOriginClaims; omission inherits the previous value. Current Make communication does not forward this control for rotate_from_pem.
FORSAJ
video_speed posts videoUrl and speed to jobs/video-speed. audio_speed puts the audio URL in videoUrl and sends operation=speed to jobs/audio. speed: 0.25–4. audioBitrate is a string from 8k to 320k; replace the Make custom choice with the actual bitrate. Do not send mode to REST. Video duration may describe the source; inspect the output media.
Operations and minimal JSON requests
Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.
| Operation | HTTP and path | Minimal JSON / status |
|---|---|---|
video_speed | POST /franklab/api/franklab/jobs/video-speed | {"videoUrl":"https://example.com/synthetic.mp4","speed":1.1} source |
audio_speed | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","speed":1.1,"operation":"speed","audioBitrate":"64k"} source |
get_task | GET /franklab/api/franklab/jobs/{taskId} | source |
upload_source | POST /franklab/api/franklab/jobs/upload | source |
check_connection | GET /franklab/api/franklab/integrations/text-sticker/auth/stats | source |
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/video-speed" \
-H "Authorization: Bearer $FRANKLAB_KEY" \
-H "Content-Type: application/json" \
--data '{"videoUrl":"https://example.com/synthetic.mp4","speed":1.1}'REST fields
Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.
| Field | Type | Conditions and allowed values |
|---|---|---|
c2paSigningMode | string | off / franklab / user_profile; c2pa Signing Mode |
contentOrigin | string | franklab or user_profile; restricted origins require permitting user_profile and evidence; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; content Origin |
humanAuthorName | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Name |
humanAuthorUrl | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Url |
reviewedBy | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed By |
reviewedAt | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed At |
reviewMethod | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; review Method |
sourceMaterialUrls | array | c2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10 |
originalEvidenceUrls | array | c2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10 |
verifiedIncomingC2paIngredient | boolean | c2paSigningMode=franklab OR c2paSigningMode=user_profile; verified Incoming C2pa Ingredient |
c2paActionDescription | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Action Description |
c2paDisclosure | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Disclosure |
c2paSignerProfileId | string | required when c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; c2pa Signer Profile Id |
videoUrl | string | required (video_speed); URL; required (audio_speed) |
speed | number | required (video_speed); min 0.25; max 4; required (audio_speed) |
callbackUrl | string | URL |
audioBitrate | string | 64k / 96k / 128k / 160k / 192k / 256k / 320k; 8k–320k string; custom is a Make control, not a REST value |
operation | string | required (audio_speed) |
taskId | string | required (get_task); Path parameter: returned taskId, scoped to the same partner |
file | binary | required (upload_source); multipart/form-data file; maximum 157286400 bytes |
Make options and REST conversion
This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.
| Form field | When | Values |
|---|---|---|
mode | video_speed / audio_speed | |
audioBitrate | mode=audio_speed | 64k / 96k / 128k / 160k / 192k / 256k / 320k / custom |
c2paSigningMode | off / franklab / user_profile | |
contentOrigin | c2paSigningMode=franklab | not_declared / human_edited / ai_assisted / ai_generated |
c2paSignerProfileId | c2paSigningMode=user_profile | rpc://getC2paSignerProfiles |
contentOrigin | c2paSigningMode=user_profile | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
Response and verification limits
HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; poll the returned taskId.
HOLST
Supply imageUrl and either operation or steps (up to 20 entries, each with op). outputFormat: jpeg/jpg/png/webp/avif/gif; outputQuality: 1–100. The current top-level DTO strips several Make fields: watermarkPosition/Opacity/Scale, textPosition/fontSize/color/font, brightness/saturation/hue/contrast/gamma, imageUrls/columns/gap/background. For watermark, text, adjust and collage use steps with position/opacity/scale, content/fontSize/color, brightness and imageUrls/columns/gap respectively. Even ImageStepDto has no font: HOLST font selection is unverified. REST accepts removeBgProvider, alphaMatting, ocrLanguages, metadataEngine and includeGps, but Make communication omits their top-level mapping. OCR/remove_bg/strip_gps/read_metadata depend on worker capabilities; info/read_metadata may be blocked by required output-file inventory checks.
Operations and minimal JSON requests
Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.
| Operation | HTTP and path | Minimal JSON / status |
|---|---|---|
resize | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"resize","width":64,"height":64} source |
crop | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"crop","aspectRatio":"1:1"} source |
filter | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"filter","filterPreset":"grayscale"} source |
watermark | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"watermark","imageUrl":"https://example.com/synthetic.png","position":"bottom-right","opacity":0.5,"scale":0.15}],"outputFormat":"png"} source |
image_overlay | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"image_overlay","overlayImageUrl":"https://example.com/synthetic.png","overlayScale":0.25} source |
text | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"text","content":"Synthetic test","fontSize":24,"color":"#FFFFFF","position":"center"}],"outputFormat":"png"} source |
rotate | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"rotate","angle":90} source |
flip | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"flip"} source |
flop | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"flop"} source |
blur | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"blur","sigma":2} source |
sharpen | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"sharpen","sigma":1} source |
info | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"info"} blocked |
strip_meta | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"strip_meta"} source |
write_exif | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"write_exif","imageDescription":"Synthetic test"} source |
write_metadata | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"write_metadata","metaTitle":"Synthetic test"} source |
replace_metadata | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"replace_metadata","metaTitle":"Synthetic test"} source |
mask | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"mask","shape":"rounded","radius":8} source |
collage | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"collage","imageUrls":["https://example.com/synthetic.png","https://example.com/synthetic.png"],"columns":2,"gap":4}],"outputFormat":"png"} source |
adjust | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"adjust","brightness":1.1}],"outputFormat":"png"} source |
read_metadata | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"read_metadata","metadataEngine":"exiftool"} blocked |
remove_bg | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"remove_bg","removeBgProvider":"local"} source |
ocr | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"ocr","ocrLanguages":"eng"} blocked |
strip_gps | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","operation":"strip_gps"} source |
pipeline | POST /franklab/api/franklab/jobs/image | {"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"resize","width":64,"height":64}],"outputFormat":"png"} source |
lookup_image-presets | GET /franklab/api/franklab/integrations/text-sticker/image-presets | source |
lookup_image-formats | GET /franklab/api/franklab/integrations/text-sticker/image-formats | source |
lookup_fonts | GET /franklab/api/franklab/integrations/text-sticker/fonts | source |
lookup_signer-profiles | GET /franklab/api/make/c2pa/signer-profiles | source |
get_task | GET /franklab/api/franklab/jobs/{taskId} | source |
upload_source | POST /franklab/api/franklab/jobs/upload | source |
check_connection | GET /franklab/api/franklab/integrations/text-sticker/auth/stats | source |
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/image" \
-H "Authorization: Bearer $FRANKLAB_KEY" \
-H "Content-Type: application/json" \
--data '{"imageUrl":"https://example.com/synthetic.png","operation":"resize","width":64,"height":64}'REST fields
Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.
| Field | Type | Conditions and allowed values |
|---|---|---|
imageUrl | string | required (resize); URL; required (crop); required (filter); required (watermark); required (image_overlay); required (text); required (rotate); required (flip); required (flop); required (blur); required (sharpen); required (info); required (strip_meta); required (write_exif); required (write_metadata); required (replace_metadata); required (mask); required (collage); required (adjust); required (read_metadata); required (remove_bg); required (ocr); required (strip_gps); required (pipeline) |
outputFormat | string | jpeg / png / webp / avif / gif; output Format |
outputQuality | number | min 1; max 100 |
c2paSigningMode | string | off / franklab / user_profile; c2pa Signing Mode |
contentOrigin | string | franklab or user_profile; restricted origins require permitting user_profile and evidence; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; content Origin |
humanAuthorName | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Name |
humanAuthorUrl | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Url |
reviewedBy | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed By |
reviewedAt | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed At |
reviewMethod | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; review Method |
sourceMaterialUrls | array | c2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10 |
originalEvidenceUrls | array | c2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10 |
verifiedIncomingC2paIngredient | boolean | c2paSigningMode=franklab OR c2paSigningMode=user_profile; verified Incoming C2pa Ingredient |
c2paActionDescription | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Action Description |
c2paDisclosure | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Disclosure |
c2paSignerProfileId | string | required when c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; c2pa Signer Profile Id |
preset | string | rpc://getImagePresets; preset |
width | number | width |
height | number | height |
fit | string | cover / contain / fill / inside / outside; fit |
operation | string | required (resize); required (crop); required (filter); required (image_overlay); required (rotate); required (flip); required (flop); required (blur); required (sharpen); required (info); required (strip_meta); required (write_exif); required (write_metadata); required (replace_metadata); required (mask); required (read_metadata); required (remove_bg); required (ocr); required (strip_gps) |
aspectRatio | string | aspect Ratio |
filterPreset | string | grayscale / sepia / warm / cold / vibrant / muted / dramatic; filter Preset |
steps | array | required (watermark); max items 20; required (text); required (collage); required (adjust); required (pipeline) |
steps[].op | string | required (watermark); resize / crop / filter / watermark / text / rotate / flip / flop / blur / sharpen / mask / collage / adjust / format / info / read_metadata / remove_bg / ocr / strip_meta / write_exif / write_metadata / replace_metadata / strip_gps; steps[].op; required (text); required (collage); required (adjust); required (pipeline) |
steps[].preset | string | steps[].op=resize OR steps[].op=filter; grayscale / sepia / warm / cold / vibrant / muted / dramatic; rpc://getImagePresets; steps[].preset |
steps[].width | number | steps[].op=resize OR steps[].op=crop OR steps[].op=collage; steps[].width |
steps[].height | number | steps[].op=resize OR steps[].op=crop OR steps[].op=collage; steps[].height |
steps[].fit | string | steps[].op=resize; cover / contain / fill / inside / outside; steps[].fit |
steps[].aspectRatio | string | steps[].op=crop; steps[].aspect Ratio |
steps[].left | number | steps[].op=crop; steps[].left |
steps[].top | number | steps[].op=crop; steps[].top |
steps[].brightness | number | steps[].op=filter OR steps[].op=adjust; steps[].brightness |
steps[].saturation | number | steps[].op=filter OR steps[].op=adjust; steps[].saturation |
steps[].hue | number | steps[].op=filter OR steps[].op=adjust; steps[].hue |
steps[].imageUrl | string | steps[].op=watermark; steps[].image Url |
steps[].position | string | steps[].op=watermark OR steps[].op=text; bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center; steps[].position |
steps[].opacity | number | steps[].op=watermark; steps[].opacity |
steps[].scale | number | steps[].op=watermark; steps[].scale |
steps[].margin | number | steps[].op=watermark; steps[].margin |
steps[].content | string | steps[].op=text; steps[].content |
steps[].fontSize | number | steps[].op=text; steps[].font Size |
steps[].color | string | steps[].op=text; steps[].color |
steps[].bgColor | string | steps[].op=text; steps[].bg Color |
steps[].bgOpacity | number | steps[].op=text; steps[].bg Opacity |
steps[].align | string | steps[].op=text; center / left / right; steps[].align |
steps[].maxWidth | number | steps[].op=text; steps[].max Width |
steps[].padding | number | steps[].op=text; steps[].padding |
steps[].angle | number | steps[].op=rotate; steps[].angle |
steps[].background | string | steps[].op=rotate OR steps[].op=collage; steps[].background |
steps[].sigma | number | steps[].op=blur OR steps[].op=sharpen; steps[].sigma |
steps[].shape | string | steps[].op=mask; rounded / circle; steps[].shape |
steps[].radius | number | steps[].op=mask; steps[].radius |
steps[].imageUrls | array | steps[].op=collage; steps[].image Urls |
steps[].columns | number | steps[].op=collage; steps[].columns |
steps[].gap | number | steps[].op=collage; steps[].gap |
steps[].contrast | number | steps[].op=adjust; steps[].contrast |
steps[].gamma | number | steps[].op=adjust; steps[].gamma |
steps[].format | string | steps[].op=format; jpeg / png / webp / avif / gif; steps[].format |
steps[].metadataEngine | string | steps[].op=read_metadata; sharp / exiftool; steps[].metadata Engine |
steps[].includeGps | boolean | steps[].op=read_metadata; steps[].include Gps |
steps[].removeBgProvider | string | steps[].op=remove_bg; local; steps[].remove Bg Provider |
steps[].alphaMatting | boolean | steps[].op=remove_bg; steps[].alpha Matting |
steps[].ocrLanguages | string | steps[].op=ocr; steps[].ocr Languages |
steps[].metaTitle | string | steps[].op=write_metadata OR steps[].op=replace_metadata; steps[].meta Title |
steps[].metaDescription | string | steps[].op=write_metadata OR steps[].op=replace_metadata; steps[].meta Description |
steps[].metaKeywords | string | steps[].op=write_metadata; steps[].meta Keywords |
steps[].altText | string | steps[].op=write_metadata OR steps[].op=replace_metadata; steps[].alt Text |
steps[].semanticDescription | string | steps[].op=write_metadata; steps[].semantic Description |
steps[].semanticTags | string | steps[].op=write_metadata OR steps[].op=replace_metadata; steps[].semantic Tags |
watermarkImageUrl | string | URL |
overlayImageUrl | string | required (image_overlay); URL |
overlayPosition | string | top-left / top-center / top-right / center-left / center / center-right / bottom-left / bottom-center / bottom-right; overlay Position |
overlayOpacity | number | min 0; max 1 |
overlayScale | number | min 0.01; max 1 |
overlayMargin | number | min 0 |
content | string | content |
angle | number | angle |
sigma | number | sigma |
imageDescription | string | image Description |
copyright | string | copyright |
artist | string | artist |
metaTitle | string | meta Title |
metaDescription | string | meta Description |
metaKeywords | string | meta Keywords |
metaAuthor | string | meta Author |
metaCopyright | string | meta Copyright |
metaCredit | string | meta Credit |
metaSoftware | string | meta Software |
metaLicenseUrl | string | URL |
metaAcquireLicensePage | string | URL |
metaSourceUrl | string | URL |
metaDateCreated | string | meta Date Created |
metaDigitalSourceType | string | meta Digital Source Type |
altText | string | alt Text |
semanticDescription | string | semantic Description |
semanticTags | string | semantic Tags |
semanticScene | string | semantic Scene |
semanticStyle | string | semantic Style |
semanticMood | string | semantic Mood |
semanticColors | string | semantic Colors |
semanticUseCases | string | semantic Use Cases |
ocrText | string | ocr Text |
shape | string | rounded / circle; shape |
radius | number | radius |
metadataEngine | string | sharp / exiftool; metadata Engine |
includeGps | boolean | include Gps |
removeBgProvider | string | local; remove Bg Provider |
alphaMatting | boolean | alpha Matting |
ocrLanguages | string | ocr Languages |
taskId | string | required (get_task); Path parameter: returned taskId, scoped to the same partner |
file | binary | required (upload_source); multipart/form-data file; maximum 157286400 bytes |
Make options and REST conversion
This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.
| Form field | When | Values |
|---|---|---|
operation | resize / crop / filter / watermark / image_overlay / text / rotate / flip / flop / blur / sharpen / info / strip_meta / write_exif / write_metadata / replace_metadata / mask / collage / adjust / read_metadata / remove_bg / ocr / strip_gps | |
preset | operation=resize | rpc://getImagePresets |
fit | operation=resize | cover / contain / fill / inside / outside |
filterPreset | operation=filter | grayscale / sepia / warm / cold / vibrant / muted / dramatic |
watermarkPosition | operation=watermark | bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center |
overlayPosition | operation=image_overlay | top-left / top-center / top-right / center-left / center / center-right / bottom-left / bottom-center / bottom-right |
textFont | operation=text | rpc://getFonts |
textPosition | operation=text | center / top / bottom / top-left / top-right / bottom-left / bottom-right |
shape | operation=mask | rounded / circle |
metadataEngine | operation=read_metadata | sharp / exiftool |
removeBgProvider | operation=remove_bg | local |
outputFormat | jpeg / png / webp / avif / gif | |
c2paSigningMode | off / franklab / user_profile | |
contentOrigin | c2paSigningMode=franklab | not_declared / human_edited / ai_assisted / ai_generated |
c2paSignerProfileId | c2paSigningMode=user_profile | rpc://getC2paSignerProfiles |
contentOrigin | c2paSigningMode=user_profile | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
steps[].op | resize / crop / filter / watermark / text / rotate / flip / flop / blur / sharpen / mask / collage / adjust / format / info / read_metadata / remove_bg / ocr / strip_meta / write_exif / write_metadata / replace_metadata / strip_gps | |
steps[].preset | steps[].op=resize | rpc://getImagePresets |
steps[].fit | steps[].op=resize | cover / contain / fill / inside / outside |
steps[].preset | steps[].op=filter | grayscale / sepia / warm / cold / vibrant / muted / dramatic |
steps[].position | steps[].op=watermark | bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center |
steps[].position | steps[].op=text | center / top-center / bottom-center / top-left / top-right / bottom-left / bottom-right |
steps[].align | steps[].op=text | center / left / right |
steps[].shape | steps[].op=mask | rounded / circle |
steps[].format | steps[].op=format | jpeg / png / webp / avif / gif |
steps[].metadataEngine | steps[].op=read_metadata | sharp / exiftool |
steps[].removeBgProvider | steps[].op=remove_bg | local |
Response and verification limits
HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; poll the returned taskId.
Sharpen steps accept sigma; Make flat/jagged are absent from the REST DTO. write_exif steps do not declare imageDescription/copyright/artist: use single operation=write_exif.
Known REST limitation: info, read_metadata, ocr. The worker returns data without a primary file, while task terminalization requires that file. These functions are blocked pending a separate fix; do not use them for a paid trial.
INDEXLIFT
execution_mode=sync calls audit-landing with {url,mode}; async_wait calls audit-landing/async and its dedicated status route. Make pageUrl maps to url. mode: single-page or crawl. Resume with the saved taskId instead of submitting again. idempotency_key is absent from the DTO: use the Idempotency-Key header for async. The synchronous route forwards the SEO service response; it does not establish the media-job billing or response contract.
Operations and minimal JSON requests
Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.
| Operation | HTTP and path | Minimal JSON / status |
|---|---|---|
async_wait | POST /franklab/api/franklab/jobs/audit-landing/async | {"url":"https://example.com/","mode":"single-page"} source |
sync | POST /franklab/api/franklab/jobs/audit-landing | {"url":"https://example.com/","mode":"single-page"} source |
get_task | GET /franklab/api/franklab/jobs/audit-landing/async/{taskId} | source |
upload_source | POST /franklab/api/franklab/jobs/upload | source |
check_connection | GET /franklab/api/franklab/integrations/text-sticker/auth/stats | source |
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/audit-landing/async" \
-H "Authorization: Bearer $FRANKLAB_KEY" \
-H "Content-Type: application/json" \
--data '{"url":"https://example.com/","mode":"single-page"}'For async POST add -H "Idempotency-Key: your-unique-request-id". Reuse a key only for the same request.
REST fields
Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.
| Field | Type | Conditions and allowed values |
|---|---|---|
url | string | required (async_wait); Public HTTP(S) URL; required (sync) |
mode | string | single-page / crawl |
taskId | string | required (get_task); Path parameter: returned taskId, scoped to the same partner |
file | binary | required (upload_source); multipart/form-data file; maximum 157286400 bytes |
Make options and REST conversion
This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.
| Form field | When | Values |
|---|---|---|
execution_mode | async_wait / sync | |
mode | single-page / crawl |
Response and verification limits
Sync forwards SEO response; async: {success:true,data:{taskId,task_id,status:"queued",phase,idempotency_key,idempotency_hit,final_cost_franks,cost_currency,cost_status:"reserved",cost_unit}}.
Asynchronous INDEXLIFT uses zeroCost in source and opens no reservation. It is a distinct free execution contract, not a paid media-job; successful execution still needs verification. The parent campaign observed the nested report at data.result.data.seo_report on 8 September 2026; data.result preserves the SEO service envelope. Read suggestions at data.result.data.brief_suggestions when present. Make currently reads top-level body.data.seo_report, which can omit this result. Async successful cost_status is confirmed with zero cost, not the ordinary JobsFacade final.
KLEY
operation selects the route: speed → video-speed; subtitles → subtitles; overlay/image_on_video → overlay; all others → montage. concat accepts videos[] with url and the transition to the next clip; transition fields on the last item are ignored. transitionSoundMode=none/auto/manual; manual requires transitionSoundPreset, volume 0–1.5. Do not send a top-level transitionType string. slideshow requires at least 2 images; slideTransitionDuration must be less than slideDuration. quality_compare requires referenceVideoUrl. Analysis/comparison operations do not guarantee downloadUrl and need separate execution verification.
Operations and minimal JSON requests
Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.
| Operation | HTTP and path | Minimal JSON / status |
|---|---|---|
concat | POST /franklab/api/franklab/jobs/montage | {"operation":"concat","videos":[{"url":"https://example.com/synthetic.mp4"},{"url":"https://example.com/synthetic.mp4"}]} source |
frame | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"frame","position":"start","format":"png"} source |
trim | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"trim","startTime":0,"duration":1} source |
reverse | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"reverse"} source |
crop | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"crop","aspectRatio":"1:1"} source |
resize | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"resize","width":160,"height":160} source |
probe | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"probe"} blocked |
write_tags | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"write_tags","tagTitle":"Synthetic test"} source |
replace_tags | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"replace_tags","tagTitle":"Synthetic test"} source |
strip_tags | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"strip_tags"} source |
gif | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"gif","duration":1,"fps":5,"width":160} source |
fade | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"fade","fadeInDuration":0.2} source |
thumbnail_smart | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"thumbnail_smart"} source |
transcode | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"transcode","videoCodec":"libx264","crf":28} source |
pip | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"pip","overlayVideoUrl":"https://example.com/synthetic.mp4","pipScale":0.25} source |
image_on_video | POST /franklab/api/franklab/jobs/overlay | {"videoUrl":"https://example.com/synthetic.mp4","operation":"image_on_video","overlayImageUrl":"https://example.com/synthetic.png","overlayScale":0.25} source |
video_on_image | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"video_on_image","imageUrl":"https://example.com/synthetic.png","overlayVideoUrl":"https://example.com/synthetic.mp4","durationMode":"overlay"} source |
slideshow | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"slideshow","imageUrls":["https://example.com/synthetic.png","https://example.com/synthetic.png"],"slideDuration":1,"slideTransition":"none"} source |
speed | POST /franklab/api/franklab/jobs/video-speed | {"videoUrl":"https://example.com/synthetic.mp4","speed":1.1} source |
subtitles | POST /franklab/api/franklab/jobs/subtitles | {"videoUrl":"https://example.com/synthetic.mp4","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}]} source |
overlay | POST /franklab/api/franklab/jobs/overlay | {"videoUrl":"https://example.com/synthetic.mp4","overlays":[{"type":"text","content":"Synthetic test","x":50,"y":50}]} source |
quality_compare | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"quality_compare","referenceVideoUrl":"https://example.com/synthetic.mp4"} blocked |
stabilize | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"stabilize"} source |
scenes | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"scenes"} blocked |
qc_report | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"qc_report"} blocked |
split_screen | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"split_screen","videos":[{"url":"https://example.com/synthetic.mp4"},{"url":"https://example.com/synthetic.mp4"}],"splitLayout":"horizontal"} source |
slow_motion | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"slow_motion","slowFactor":2,"slowFps":30} source |
denoise | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"denoise","denoiseMethod":"hqdn3d","denoiseStrength":"low"} source |
hdr_to_sdr | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"hdr_to_sdr","tonemapMethod":"hable"} source |
animated | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"animated","animatedFormat":"webp","duration":1,"fps":5,"width":160} source |
mezzanine | POST /franklab/api/franklab/jobs/montage | {"videoUrl":"https://example.com/synthetic.mp4","operation":"mezzanine","mezzanineCodec":"prores","proresProfile":0} source |
lookup_transitions | GET /franklab/api/franklab/integrations/text-sticker/transitions | source |
lookup_transition-sounds | GET /franklab/api/franklab/integrations/text-sticker/transition-sounds | source |
lookup_aspect-ratios | GET /franklab/api/franklab/integrations/text-sticker/aspect-ratios | source |
lookup_resize-presets | GET /franklab/api/franklab/integrations/text-sticker/resize-presets | source |
lookup_signer-profiles | GET /franklab/api/make/c2pa/signer-profiles | source |
get_task | GET /franklab/api/franklab/jobs/{taskId} | source |
upload_source | POST /franklab/api/franklab/jobs/upload | source |
check_connection | GET /franklab/api/franklab/integrations/text-sticker/auth/stats | source |
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/montage" \
-H "Authorization: Bearer $FRANKLAB_KEY" \
-H "Content-Type: application/json" \
--data '{"operation":"concat","videos":[{"url":"https://example.com/synthetic.mp4"},{"url":"https://example.com/synthetic.mp4"}]}'REST fields
Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.
| Field | Type | Conditions and allowed values |
|---|---|---|
callbackUrl | string | URL |
videos | array | max items 20 |
maxTransitionRatio | number | max Transition Ratio |
operation | string | required (concat); required (frame); required (trim); required (reverse); required (crop); required (resize); required (probe); required (write_tags); required (replace_tags); required (strip_tags); required (gif); required (fade); required (thumbnail_smart); required (transcode); required (pip); required (image_on_video); required (video_on_image); required (slideshow); required (quality_compare); required (stabilize); required (scenes); required (qc_report); required (split_screen); required (slow_motion); required (denoise); required (hdr_to_sdr); required (animated); required (mezzanine) |
videoUrl | string | required (frame); URL; required (trim); required (reverse); required (crop); required (resize); required (probe); required (write_tags); required (replace_tags); required (strip_tags); required (gif); required (fade); required (thumbnail_smart); required (transcode); required (pip); required (image_on_video); required (video_on_image); required (slideshow); required (speed); required (subtitles); required (overlay); required (quality_compare); required (stabilize); required (scenes); required (qc_report); required (split_screen); required (slow_motion); required (denoise); required (hdr_to_sdr); required (animated); required (mezzanine) |
position | string | first / middle / last / custom; position |
customTime | number | custom Time |
format | string | jpg / png; format |
startTime | number | start Time; min 0 |
duration | number | duration; min 0 |
aspectRatio | string | rpc://getAspectRatios; aspect Ratio |
cropW | number | crop W |
cropH | number | crop H |
cropX | number | crop X |
cropY | number | crop Y |
preset | string | rpc://getResizePresets; preset; fast / medium / slow / veryslow |
width | number | width |
height | number | height |
tagTitle | string | tag Title |
tagArtist | string | tag Artist |
tagDescription | string | tag Description |
tagComment | string | tag Comment |
tagDate | string | tag Date |
tagKeywords | string | tag Keywords |
tagCopyright | string | tag Copyright |
tagSoftware | string | tag Software |
tagGenre | string | tag Genre |
tagLanguage | string | tag Language |
tagCreationTime | string | tag Creation Time |
summary | string | summary |
transcript | string | transcript |
thumbnailAltText | string | thumbnail Alt Text |
c2paSigningMode | string | off / franklab / user_profile; c2pa Signing Mode |
c2paSignerProfileId | string | required when c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; c2pa Signer Profile Id |
contentOrigin | string | franklab or user_profile; restricted origins require permitting user_profile and evidence; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; content Origin |
sourceMaterialUrls | array | max items 10 |
originalEvidenceUrls | array | max items 10 |
verifiedIncomingC2paIngredient | boolean | verified Incoming C2pa Ingredient |
c2paActionDescription | string | c2pa Action Description |
c2paDisclosure | string | c2pa Disclosure |
fps | number | fps |
fadeInDuration | number | fade In Duration |
fadeOutDuration | number | fade Out Duration |
videoCodec | string | libx264 / libx265 / libvpx-vp9 / copy; video Codec |
crf | number | crf |
audioBitrate | string | 64k / 96k / 128k / 160k / 192k / 256k / 320k; 8k–320k string; custom is a Make control, not a REST value |
overlayVideoUrl | string | required (pip); URL; required (video_on_image) |
pipPosition | string | top-left / top-right / bottom-left / bottom-right / center; pip Position |
pipScale | number | pip Scale |
includeBaseAudio | boolean | include Base Audio |
baseAudioVolume | number | base Audio Volume |
includeOverlayAudio | boolean | include Overlay Audio |
overlayAudioVolume | number | overlay Audio Volume |
overlayImageUrl | string | required (image_on_video); URL |
overlayPosition | string | top-left / top-center / top-right / center / bottom-left / bottom-center / bottom-right; overlay Position |
overlayScale | number | min 0.01; max 1 |
overlayOpacity | number | min 0; max 1 |
overlayMargin | number | min 0 |
endTime | number | min 0 |
imageUrl | string | required (video_on_image); URL |
durationMode | string | overlay / fixed; duration Mode |
imageUrls | array | max items 20 |
slideDuration | number | slide Duration |
slideTransition | string | rpc://getTransitions; slide Transition |
slideTransitionDuration | number | slide Transition Duration |
speed | number | required (speed); min 0.25; max 4 |
templateId | string | template Id |
language | string | ru / en / auto; language |
highlightMode | string | none / keywords / karaoke; highlight Mode |
platform | string | none / tiktok / instagram_reels / youtube_shorts; platform |
safeZonePreset | string | safe Zone Preset |
subtitles | array | max items 500 |
overlays | array | max items 20 |
configId | string | config Id |
referenceVideoUrl | string | required (quality_compare); URL |
shakiness | number | min 1; max 10 |
smoothing | number | min 1; max 100 |
sceneThreshold | number | min 1; max 100 |
sceneThumbnails | boolean | scene Thumbnails |
splitLayout | string | horizontal / vertical / grid_2x2; split Layout |
slowFactor | number | 2 / 4; slow Factor |
slowFps | number | 30 / 60; slow Fps |
denoiseMethod | string | hqdn3d / nlmeans; denoise Method |
denoiseStrength | string | low / medium / high; denoise Strength |
tonemapMethod | string | hable / mobius / reinhard; tonemap Method |
animatedFormat | string | webp / avif; animated Format |
mezzanineCodec | string | prores / dnxhd; mezzanine Codec |
proresProfile | number | 0 / 1 / 2 / 3; prores Profile |
dnxhdProfile | string | dnxhr_lb / dnxhr_sq / dnxhr_hq / dnxhr_hqx; dnxhd Profile |
taskId | string | required (get_task); Path parameter: returned taskId, scoped to the same partner |
file | binary | required (upload_source); multipart/form-data file; maximum 157286400 bytes |
Make options and REST conversion
This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.
| Form field | When | Values |
|---|---|---|
operation | concat / frame / trim / reverse / crop / resize / probe / write_tags / replace_tags / strip_tags / gif / fade / thumbnail_smart / transcode / pip / image_on_video / video_on_image / slideshow / speed / subtitles / overlay / quality_compare / stabilize / scenes / qc_report / split_screen / slow_motion / denoise / hdr_to_sdr / animated / mezzanine | |
position | operation=frame | first / middle / last / custom |
format | operation=frame | jpg / png |
aspectRatio | operation=crop | rpc://getAspectRatios |
preset | operation=resize | rpc://getResizePresets |
c2paSigningMode | operation=write_tags | off / franklab / user_profile |
c2paSignerProfileId | operation=write_tags | rpc://getC2paSignerProfiles |
contentOrigin | operation=write_tags | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
c2paSigningMode | operation=replace_tags | off / franklab / user_profile |
c2paSignerProfileId | operation=replace_tags | rpc://getC2paSignerProfiles |
contentOrigin | operation=replace_tags | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
format | operation=thumbnail_smart | jpg / png |
videoCodec | operation=transcode | libx264 / libx265 / libvpx-vp9 / copy |
preset | operation=transcode | fast / medium / slow / veryslow |
pipPosition | operation=pip | top-left / top-right / bottom-left / bottom-right / center |
overlayPosition | operation=image_on_video | top-left / top-center / top-right / center / bottom-left / bottom-center / bottom-right |
pipPosition | operation=video_on_image | top-left / top-right / bottom-left / bottom-right / center |
durationMode | operation=video_on_image | overlay / fixed |
slideTransition | operation=slideshow | rpc://getTransitions |
subtitleLanguage | operation=subtitles | ru / en / auto |
highlightMode | operation=subtitles | none / keywords / karaoke |
subtitlePlatform | operation=subtitles | none / tiktok / instagram_reels / youtube_shorts |
splitLayout | operation=split_screen | horizontal / vertical / grid_2x2 |
slowFactor | operation=slow_motion | 2 / 4 |
slowFps | operation=slow_motion | 30 / 60 |
denoiseMethod | operation=denoise | hqdn3d / nlmeans |
denoiseStrength | operation=denoise | low / medium / high |
tonemapMethod | operation=hdr_to_sdr | hable / mobius / reinhard |
animatedFormat | operation=animated | webp / avif |
mezzanineCodec | operation=mezzanine | prores / dnxhd |
proresProfile | operation=mezzanine | 0 / 1 / 2 / 3 |
dnxhdProfile | operation=mezzanine | dnxhr_lb / dnxhr_sq / dnxhr_hq / dnxhr_hqx |
Response and verification limits
HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; poll the returned taskId.
Known REST limitation: probe, quality_compare, qc_report, scenes. The worker returns data without a primary file, while task terminalization requires that file. These functions are blocked pending a separate fix; do not use them for a paid trial.
OVERLAY
Creation and polling use make/jobs. The artifact URL is data.result.downloadUrl. overlays has up to 20 objects: type=text/sticker/animated_sticker/emoji/watermark with type-specific fields. Use IDs from the lookup routes. Text layers use content; watermark layers use imageUrl. platform and configId control placement.
Operations and minimal JSON requests
Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.
| Operation | HTTP and path | Minimal JSON / status |
|---|---|---|
overlay | POST /franklab/api/make/jobs/overlay | {"videoUrl":"https://example.com/synthetic.mp4","overlays":[{"type":"text","content":"Synthetic test","x":50,"y":50,"fontSize":24,"color":"#FFFFFF"}]} source |
lookup_stickers_animated_true | GET /franklab/api/franklab/integrations/text-sticker/stickers?animated=true | source |
lookup_emojis | GET /franklab/api/franklab/integrations/text-sticker/emojis | source |
lookup_fonts | GET /franklab/api/franklab/integrations/text-sticker/fonts | source |
lookup_stickers_animated_false | GET /franklab/api/franklab/integrations/text-sticker/stickers?animated=false | source |
lookup_safe-zone-options | GET /franklab/api/franklab/integrations/text-sticker/safe-zone-options | source |
lookup_subtitle-templates | GET /franklab/api/franklab/integrations/text-sticker/subtitle-templates | source |
lookup_transitions | GET /franklab/api/franklab/integrations/text-sticker/transitions | source |
lookup_video-effects | GET /franklab/api/franklab/integrations/text-sticker/video-effects | source |
get_task | GET /franklab/api/make/jobs/{taskId} | source |
upload_source | POST /franklab/api/franklab/jobs/upload | source |
check_connection | GET /franklab/api/franklab/integrations/text-sticker/auth/stats | source |
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/make/jobs/overlay" \
-H "Authorization: Bearer $FRANKLAB_KEY" \
-H "Content-Type: application/json" \
--data '{"videoUrl":"https://example.com/synthetic.mp4","overlays":[{"type":"text","content":"Synthetic test","x":50,"y":50,"fontSize":24,"color":"#FFFFFF"}]}'REST fields
Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.
| Field | Type | Conditions and allowed values |
|---|---|---|
videoUrl | string | required (overlay); URL |
platform | string | none / tiktok / instagram_reels / youtube_shorts; platform |
configId | string | config Id |
overlays | array | max items 20 |
overlays[].type | string | required (overlay); text / emoji / sticker / animated_sticker / watermark; overlays[].type |
overlays[].content | string | overlays[].content |
overlays[].stickerId | string | rpc://getOverlayStickers; overlays[].sticker Id |
overlays[].animatedStickerId | string | rpc://getOverlayAnimatedStickers; overlays[].animated Sticker Id |
overlays[].imageUrl | string | overlays[].image Url |
overlays[].opacity | number | overlays[].opacity |
overlays[].scale | number | overlays[].scale |
overlays[].position | string | / bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center; overlays[].position |
overlays[].margin | number | overlays[].margin |
overlays[].emojiId | string | rpc://getOverlayEmojis; overlays[].emoji Id |
overlays[].placement | string | custom / center / top_safe / bottom_safe / top_left_safe / top_right_safe / bottom_left_safe / bottom_right_safe; overlays[].placement |
overlays[].x | number | overlays[].x |
overlays[].y | number | overlays[].y |
overlays[].startTime | number | overlays[].start Time |
overlays[].endTime | number | overlays[].end Time |
overlays[].fontSize | number | overlays[].font Size |
overlays[].color | string | overlays[].color |
overlays[].font | string | rpc://getOverlayFonts; overlays[].font |
overlays[].shadowColor | string | overlays[].shadow Color |
overlays[].shadowX | number | overlays[].shadow X |
overlays[].shadowY | number | overlays[].shadow Y |
overlays[].width | number | overlays[].width |
overlays[].height | number | overlays[].height |
callbackUrl | string | URL |
taskId | string | required (get_task); Path parameter: returned taskId, scoped to the same partner |
file | binary | required (upload_source); multipart/form-data file; maximum 157286400 bytes |
Make options and REST conversion
This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.
| Form field | When | Values |
|---|---|---|
platform | none / tiktok / instagram_reels / youtube_shorts | |
overlays[].type | text / emoji / sticker / animated_sticker / watermark | |
overlays[].stickerId | rpc://getOverlayStickers | |
overlays[].animatedStickerId | rpc://getOverlayAnimatedStickers | |
overlays[].position | / bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center | |
overlays[].emojiId | rpc://getOverlayEmojis | |
overlays[].placement | custom / center / top_safe / bottom_safe / top_left_safe / top_right_safe / bottom_left_safe / bottom_right_safe | |
overlays[].font | rpc://getOverlayFonts |
Response and verification limits
HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; poll the returned taskId.
PLASTINKA
The 8 September 2026 WAV trim check returned an audio-only MP4, but its codec could not be decoded by the local verification tools. Do not assume the returned container is browser-compatible; verify playback for your input format. Other audio operations were not tested by this example.
For audio processing, the source audio URL is named videoUrl. overlay/replace/fit also need audioUrl or sampleId; Make apply_sample becomes operation=sampleOperation (overlay/replace). merge uses audioUrls[] plus videoUrl equal to the first URL. save_sample returns a resource id, not a task: JSON {name,sampleUrl} or multipart name+sampleFile, exactly one source, up to 50 MiB, mp3/wav/aac/m4a/ogg/flac. sampleEndTime must exceed sampleStartTime. Make exposes sampleSourceMode=file but sends JSON without sampleFile; use direct multipart REST.
Operations and minimal JSON requests
Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.
| Operation | HTTP and path | Minimal JSON / status |
|---|---|---|
save_sample | POST /franklab/api/franklab/audio-samples | {"name":"Synthetic sample","sampleUrl":"https://example.com/synthetic.wav"} source |
apply_sample | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.mp4","operation":"overlay","sampleId":"<SAMPLE_UUID>"} source |
overlay | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"overlay","audioUrl":"https://example.com/synthetic.wav"} source |
replace | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"replace","audioUrl":"https://example.com/synthetic.wav"} source |
fit | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"fit","audioUrl":"https://example.com/synthetic.wav","fitStrategy":"trim_pad","fitAudioMode":"replace"} source |
extract | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"extract"} source |
speed | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"speed","speed":1.1} source |
remove | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"remove"} source |
probe | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"probe"} blocked |
write_tags | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"write_tags","tagTitle":"Synthetic test"} source |
replace_tags | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"replace_tags","tagTitle":"Synthetic test"} source |
strip_tags | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"strip_tags"} source |
normalize | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"normalize","targetLoudness":-16} source |
trim | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"trim","startTime":0,"duration":1} source |
convert | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"convert","targetFormat":"mp3","audioBitrate":"64k"} source |
fade | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"fade","fadeInDuration":0.2} source |
merge | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"merge","audioUrls":["https://example.com/synthetic.wav","https://example.com/synthetic.wav"]} source |
quality_compare | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"quality_compare","referenceAudioUrl":"https://example.com/synthetic.wav"} blocked |
analyze | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"analyze"} blocked |
spectrogram | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"spectrogram","imageWidth":320,"imageHeight":240} source |
waveform_image | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"waveform_image","imageWidth":320,"imageHeight":240} source |
fingerprint | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"fingerprint"} blocked |
enhance_dialogue | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"enhance_dialogue","enhanceOriginal":1,"enhanceAmount":1} source |
stereo_tools | POST /franklab/api/franklab/jobs/audio | {"videoUrl":"https://example.com/synthetic.wav","operation":"stereo_tools","stereoPreset":"mono"} source |
lookup_audio-samples | GET /franklab/api/franklab/integrations/text-sticker/audio-samples | source |
lookup_signer-profiles | GET /franklab/api/make/c2pa/signer-profiles | source |
get_task | GET /franklab/api/franklab/jobs/{taskId} | source |
upload_source | POST /franklab/api/franklab/jobs/upload | source |
save_sample_file | POST /franklab/api/franklab/audio-samples | source |
list_samples | GET /franklab/api/franklab/audio-samples | source |
check_connection | GET /franklab/api/franklab/integrations/text-sticker/auth/stats | source |
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/audio" \
-H "Authorization: Bearer $FRANKLAB_KEY" \
-H "Content-Type: application/json" \
--data '{"videoUrl":"https://example.com/synthetic.mp4","operation":"overlay","sampleId":"<SAMPLE_UUID>"}'curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/audio-samples" \
-H "Authorization: Bearer $FRANKLAB_KEY" \
-F "name=Synthetic sample" -F "sampleFile=@synthetic.wav;type=audio/wav"REST fields
Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.
| Field | Type | Conditions and allowed values |
|---|---|---|
name | string | required (save_sample); max length 120; required (save_sample_file); Non-empty, maximum 120 characters |
sampleUrl | string | required when sampleSourceMode=url; URL |
sampleStartTime | number | min 0; Seconds >=0 |
sampleEndTime | number | min 0; Seconds greater than start |
videoUrl | string | required (apply_sample); URL; required (overlay); required (replace); required (fit); required (extract); required (speed); required (remove); required (probe); required (write_tags); required (replace_tags); required (strip_tags); required (normalize); required (trim); required (convert); required (fade); required (merge); required (quality_compare); required (analyze); required (spectrogram); required (waveform_image); required (fingerprint); required (enhance_dialogue); required (stereo_tools) |
sampleId | string | required (apply_sample); rpc://getAudioSamples; sample Id |
operation | string | required (apply_sample); overlay / replace / fit; operation; required (overlay); required (replace); required (fit); required (extract); required (speed); required (remove); required (probe); required (write_tags); required (replace_tags); required (strip_tags); required (normalize); required (trim); required (convert); required (fade); required (merge); required (quality_compare); required (analyze); required (spectrogram); required (waveform_image); required (fingerprint); required (enhance_dialogue); required (stereo_tools) |
insertAtTime | number | min 0 |
audioStartTime | number | min 0 |
audioEndTime | number | min 0 |
audioVolume | number | min 0; max 2 |
videoVolume | number | min 0; max 2; fitAudioMode=mix |
loopIfShort | boolean | loop If Short; fitStrategy=trim_pad |
callbackUrl | string | URL |
audioUrl | string | required (overlay); URL; required (replace); required (fit) |
audioFadeOut | boolean | audio Fade Out |
fitAudioMode | string | required (fit); replace / mix; fit Audio Mode |
fitStrategy | string | required (fit); trim_pad / stretch; fit Strategy |
speedMode | string | required when fitStrategy=stretch; standard / voice_natural; speed Mode; required (speed) |
speed | number | required (speed); min 0.25; max 4 |
audioBitrate | string | 64k / 96k / 128k / 160k / 192k / 256k / 320k; 8k–320k string; custom is a Make control, not a REST value |
tagTitle | string | tag Title |
tagArtist | string | tag Artist |
tagAlbum | string | tag Album |
tagGenre | string | tag Genre |
tagComment | string | tag Comment |
tagDate | string | tag Date |
tagDescription | string | tag Description |
tagKeywords | string | tag Keywords |
tagCopyright | string | tag Copyright |
tagComposer | string | tag Composer |
tagAlbumArtist | string | tag Album Artist |
tagTrack | string | tag Track |
tagDisc | string | tag Disc |
tagPublisher | string | tag Publisher |
tagBpm | string | tag Bpm |
tagLanguage | string | tag Language |
tagSoftware | string | tag Software |
summary | string | summary |
transcript | string | transcript |
c2paSigningMode | string | off / franklab / user_profile; c2pa Signing Mode |
c2paSignerProfileId | string | required when c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; c2pa Signer Profile Id |
contentOrigin | string | franklab or user_profile; restricted origins require permitting user_profile and evidence; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; content Origin |
sourceMaterialUrls | array | max items 10 |
originalEvidenceUrls | array | max items 10 |
verifiedIncomingC2paIngredient | boolean | verified Incoming C2pa Ingredient |
c2paActionDescription | string | c2pa Action Description |
c2paDisclosure | string | c2pa Disclosure |
targetLoudness | number | target Loudness |
targetTruePeak | number | target True Peak |
startTime | number | min 0 |
duration | number | required (trim); min 0 |
targetFormat | string | required (convert); mp3 / aac / wav / ogg / flac / alac / opus; target Format |
fadeInDuration | number | min 0 |
fadeOutDuration | number | min 0 |
audioUrls | array | max items 20 |
referenceAudioUrl | string | required (quality_compare); URL |
imageWidth | number | min 160; max 4096 |
imageHeight | number | min 120; max 2160 |
spectrogramColor | string | intensity / channel / rainbow / moreland / nebulae / fire / fiery / fruit / cool / magma / green / viridis / plasma / cividis / terrain; spectrogram Color |
spectrogramScale | string | log / lin / sqrt / cbrt / 4thrt / 5thrt; spectrogram Scale |
spectrogramLegend | boolean | spectrogram Legend |
waveformColor | string | waveform Color |
waveformBgColor | string | waveform Bg Color |
waveformSplitChannels | boolean | waveform Split Channels |
enhanceOriginal | number | min 0; max 1 |
enhanceAmount | number | min 0; max 3 |
stereoPreset | string | widen / narrow / mono; stereo Preset |
taskId | string | required (get_task); Path parameter: returned taskId, scoped to the same partner |
file | binary | required (upload_source); multipart/form-data file; maximum 157286400 bytes |
sampleFile | binary | required (save_sample_file); multipart/form-data; <=50 MiB; mp3/wav/aac/m4a/ogg/flac |
Make options and REST conversion
This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.
| Form field | When | Values |
|---|---|---|
operation | save_sample / apply_sample / overlay / replace / fit / extract / speed / remove / probe / write_tags / replace_tags / strip_tags / normalize / trim / convert / fade / merge / quality_compare / analyze / spectrogram / waveform_image / fingerprint / enhance_dialogue / stereo_tools | |
sampleSourceMode | operation=save_sample | url / file |
sampleId | operation=apply_sample | rpc://getAudioSamples |
sampleOperation | operation=apply_sample | overlay / replace / fit |
fitAudioMode | operation=fit | replace / mix |
fitStrategy | operation=fit | trim_pad / stretch |
speedMode | operation=fit; fitStrategy=stretch | standard / voice_natural |
speedMode | operation=speed | standard / voice_natural |
audioBitrate | operation=speed | 64k / 96k / 128k / 160k / 192k / 256k / 320k / custom |
c2paSigningMode | operation=write_tags | off / franklab / user_profile |
c2paSignerProfileId | operation=write_tags | rpc://getC2paSignerProfiles |
contentOrigin | operation=write_tags | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
c2paSigningMode | operation=replace_tags | off / franklab / user_profile |
c2paSignerProfileId | operation=replace_tags | rpc://getC2paSignerProfiles |
contentOrigin | operation=replace_tags | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
targetFormat | operation=convert | mp3 / aac / wav / ogg / flac / alac / opus |
audioBitrate | operation=convert | 64k / 96k / 128k / 160k / 192k / 256k / 320k / custom |
spectrogramColor | operation=spectrogram | intensity / channel / rainbow / moreland / nebulae / fire / fiery / fruit / cool / magma / green / viridis / plasma / cividis / terrain |
spectrogramScale | operation=spectrogram | log / lin / sqrt / cbrt / 4thrt / 5thrt |
stereoPreset | operation=stereo_tools | widen / narrow / mono |
Response and verification limits
HTTP 200 {success:true,data:{id,name,sourceUrl,mimeType,format,durationMs,clipStartTime,clipEndTime,isSystem,createdAt}}; no task polling.
Known REST limitation: probe, quality_compare, analyze, fingerprint. The worker returns data without a primary file, while task terminalization requires that file. These functions are blocked pending a separate fix; do not use them for a paid trial.
SPEKTR
The 8 September 2026 waveform check failed during processing and its reservation was fully refunded. This result does not establish availability of the other SPEKTR operations.
background_remove uses X-API-Key and Recraft {model:"recraft/remove-background",input:{image:URL}}. Provider envelope: code/data.taskId; status is data.state; results are JSON.parse(data.resultJson).resultUrls[]. This is passthrough without confirmed FrankLab customer settlement. Other operations use Bearer and jobs. waveform maps Make audioUrl → videoUrl; video_round → operation=round; video_remove_bg → operation=remove_bg. Bria image replacement requires exactly one of prompt/refImages; erase_by_text needs objectName; lifestyle needs sceneDescription. Bria video erase over 5 seconds requires autoTrim=true; the backend verifies duration. Make task_id resume may choose Recraft polling for jobs; REST clients must retain the polling route with the ID.
Operations and minimal JSON requests
Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.
| Operation | HTTP and path | Minimal JSON / status |
|---|---|---|
background_remove | POST /franklab/api/v1/recraft/create-task | {"model":"recraft/remove-background","input":{"image":"https://example.com/synthetic.png"}} blocked |
bria_image_remove_bg | POST /franklab/api/franklab/jobs/image | {"operation":"bria_image_remove_bg","imageUrl":"https://example.com/synthetic.png"} source |
bria_image_replace_bg | POST /franklab/api/franklab/jobs/image | {"operation":"bria_image_replace_bg","imageUrl":"https://example.com/synthetic.png","prompt":"Plain studio background"} source |
bria_erase_foreground | POST /franklab/api/franklab/jobs/image | {"operation":"bria_erase_foreground","imageUrl":"https://example.com/synthetic.png"} source |
bria_erase_by_text | POST /franklab/api/franklab/jobs/image | {"operation":"bria_erase_by_text","imageUrl":"https://example.com/synthetic.png","objectName":"lamp"} source |
bria_product_lifestyle_by_text | POST /franklab/api/franklab/jobs/image | {"operation":"bria_product_lifestyle_by_text","imageUrl":"https://example.com/synthetic.png","sceneDescription":"Product on a plain table","placementType":"automatic_aspect_ratio","briaAspectRatio":"1:1"} source |
bria_product_cutout | POST /franklab/api/franklab/jobs/image | {"operation":"bria_product_cutout","imageUrl":"https://example.com/synthetic.png"} source |
waveform | POST /franklab/api/franklab/jobs/montage | {"operation":"waveform","videoUrl":"https://example.com/synthetic.wav","width":320,"height":240} source |
video_round | POST /franklab/api/franklab/jobs/montage | {"operation":"round","videoUrl":"https://example.com/synthetic.mp4","shape":"rounded","radius":8,"backgroundColor":"#000000"} source |
video_remove_bg | POST /franklab/api/franklab/jobs/montage | {"operation":"remove_bg","videoUrl":"https://example.com/synthetic.mp4","removeBgProvider":"bria","removeBgOutputCodec":"webm_vp9"} source |
bria_video_replace_bg | POST /franklab/api/franklab/jobs/montage | {"operation":"bria_video_replace_bg","videoUrl":"https://example.com/synthetic.mp4","backgroundUrl":"https://example.com/synthetic.png","duration":1} source |
bria_video_erase_object | POST /franklab/api/franklab/jobs/montage | {"operation":"bria_video_erase_object","videoUrl":"https://example.com/synthetic.mp4","maskUrl":"https://example.com/synthetic.mp4","duration":1} source |
get_task | GET /franklab/api/franklab/jobs/{taskId} | source |
upload_source | POST /franklab/api/franklab/jobs/upload | source |
get_recraft_task | GET /franklab/api/v1/recraft/record-info | blocked |
check_connection | GET /franklab/api/v1/images/omni-image | source |
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/montage" \
-H "Authorization: Bearer $FRANKLAB_KEY" \
-H "Content-Type: application/json" \
--data '{"operation":"waveform","videoUrl":"https://example.com/synthetic.wav","width":320,"height":240}'REST fields
Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.
| Field | Type | Conditions and allowed values |
|---|---|---|
model | string | required (background_remove); recraft/remove-background |
input | object | required (background_remove); Input object |
input.image | string | required (background_remove); Image URL; Make documents png/jpg/webp, <=5 MB, <=16 MP, 256–4096 px |
callBackUrl | string | Optional provider callback URL |
callbackUrl | string | URL |
imageUrl | string | required (bria_image_remove_bg); URL; required (bria_image_replace_bg); required (bria_erase_foreground); required (bria_erase_by_text); required (bria_product_lifestyle_by_text); required (bria_product_cutout) |
preserveAlpha | boolean | preserve Alpha |
operation | string | required (bria_image_remove_bg); required (bria_image_replace_bg); required (bria_erase_foreground); required (bria_erase_by_text); required (bria_product_lifestyle_by_text); required (bria_product_cutout); required (waveform); required (video_round); required (video_remove_bg); required (bria_video_replace_bg); required (bria_video_erase_object) |
prompt | string | prompt |
refImages | array | ref Images |
briaMode | string | high_control / base / fast; bria Mode |
negativePrompt | string | negative Prompt |
refinePrompt | boolean | refine Prompt |
originalQuality | boolean | original Quality |
forceBackgroundDetection | boolean | force Background Detection |
seed | number | seed |
objectName | string | required (bria_erase_by_text); object Name |
sceneDescription | string | required (bria_product_lifestyle_by_text); scene Description |
optimizeDescription | boolean | optimize Description |
placementType | string | automatic_aspect_ratio / original / manual_placement / manual_padding / custom_coordinates; placement Type |
briaAspectRatio | string | 1:1 / 4:5 / 9:16 / 16:9 / 3:2 / 2:3; bria Aspect Ratio |
forceRmbg | boolean | force Rmbg |
sku | string | sku |
videoUrl | string | required (waveform); URL; required (video_round); required (video_remove_bg); required (bria_video_replace_bg); required (bria_video_erase_object) |
width | number | width |
height | number | height |
waveformColor | string | waveform Color |
waveformBgColor | string | waveform Bg Color |
shape | string | rounded / circle; shape |
radius | number | radius |
backgroundColor | string | background Color |
removeBgProvider | string | bria / auto / replicate; remove Bg Provider |
removeBgBackgroundColor | string | Transparent / Black / White / Gray / Red / Green / Blue / Yellow / Cyan / Magenta / Orange; remove Bg Background Color |
removeBgOutputCodec | string | webm_vp9 / mov_h265 / mov_proresks / mkv_vp9 / gif / mp4_h264 / mp4_h265 / mkv_h264 / mkv_h265; remove Bg Output Codec |
removeBgPreserveAudio | boolean | remove Bg Preserve Audio |
backgroundUrl | string | required (bria_video_replace_bg); URL |
duration | number | duration |
briaOutputCodec | string | mp4_h264 / mp4_h265 / webm_vp9 / mov_h265 / mov_proresks / mkv_h264 / mkv_h265 / mkv_vp9 / gif; bria Output Codec |
briaPreserveAudio | boolean | bria Preserve Audio |
maskUrl | string | required (bria_video_erase_object); URL |
autoTrim | boolean | auto Trim |
taskId | string | required (get_task); Path parameter: returned taskId, scoped to the same partner; required (get_recraft_task); Query parameter returned by recraft/create-task |
file | binary | required (upload_source); multipart/form-data file; maximum 157286400 bytes |
pageNum | number | Query pagination; connection check uses 1 |
pageSize | number | Query pagination; connection check uses 1 |
Make options and REST conversion
This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.
| Form field | When | Values |
|---|---|---|
operation | background_remove / bria_image_remove_bg / bria_image_replace_bg / bria_erase_foreground / bria_erase_by_text / bria_product_lifestyle_by_text / bria_product_cutout / waveform / video_round / video_remove_bg / bria_video_replace_bg / bria_video_erase_object | |
briaMode | operation=bria_image_replace_bg | high_control / base / fast |
briaMode | operation=bria_product_lifestyle_by_text | high_control / base / fast |
placementType | operation=bria_product_lifestyle_by_text | automatic_aspect_ratio / original / manual_placement / manual_padding / custom_coordinates |
briaAspectRatio | operation=bria_product_lifestyle_by_text | 1:1 / 4:5 / 9:16 / 16:9 / 3:2 / 2:3 |
shape | operation=video_round | rounded / circle |
removeBgProvider | operation=video_remove_bg | bria / auto / replicate |
removeBgBackgroundColor | operation=video_remove_bg | Transparent / Black / White / Gray / Red / Green / Blue / Yellow / Cyan / Magenta / Orange |
removeBgOutputCodec | operation=video_remove_bg | webm_vp9 / mov_h265 / mov_proresks / mkv_vp9 / gif / mp4_h264 / mp4_h265 / mkv_h264 / mkv_h265 |
briaOutputCodec | operation=bria_video_replace_bg | mp4_h264 / mp4_h265 / webm_vp9 / mov_h265 / mov_proresks / mkv_h264 / mkv_h265 / mkv_vp9 / gif |
briaOutputCodec | operation=bria_video_erase_object | mp4_h264 / mp4_h265 / webm_vp9 / mov_h265 / mov_proresks / mkv_h264 / mkv_h265 / mkv_vp9 / gif |
Response and verification limits
HTTP response with provider JSON {code:200,data:{taskId}}; inspect code and msg separately from HTTP status.
Recraft completes on data.state=success|fail. The Make repeat condition checks other fields and can continue polling after completion; direct REST clients must check state.
SUFLER
videoUrl is required. Automatic transcription: omit subtitles; transcriptionEngine selects whisper/xai_grok_transcribe/gemini/local_whisper/elevenlabs_scribe. Manual captions use subtitles[] with text,startTime,endTime; 0 ≤ startTime < endTime. Optional words[] uses word,start,end, non-overlapping and inside its cue. Maximum 500 cues. Make v1*/v2* are form names; REST uses templateId,fontSize,color,positionX etc. v2 manual overrides require presetOverrideMode=manual. Translation uses translateTo and optional dualLanguage. outputMode: burn/srt/vtt/ass/burn+srt/burn+vtt. v1 uses highlightMode; v2 uses renderMode and emphasisMode.
Operations and minimal JSON requests
Each example below is the complete JSON for its POST; replace URLs/IDs with your own. Operation/mode selectors choose functions, not generation models. “source” means source-checked without live/E2E; “blocked” marks a known limitation.
| Operation | HTTP and path | Minimal JSON / status |
|---|---|---|
v1 | POST /franklab/api/franklab/jobs/subtitles | {"videoUrl":"https://example.com/synthetic.mp4","captionEngine":"v1","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}],"outputMode":"burn"} source |
v2 | POST /franklab/api/franklab/jobs/subtitles | {"videoUrl":"https://example.com/synthetic.mp4","captionEngine":"v2","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}],"outputMode":"burn","templateId":"shorts_pro"} source |
lookup_fonts | GET /franklab/api/franklab/integrations/text-sticker/fonts | source |
lookup_subtitle-templates | GET /franklab/api/franklab/integrations/text-sticker/subtitle-templates | source |
lookup_video-effects | GET /franklab/api/franklab/integrations/text-sticker/video-effects | source |
lookup_safe-zone-platform-options | GET /franklab/api/franklab/integrations/text-sticker/safe-zone-platform-options | source |
lookup_safe-zone-placement-options | GET /franklab/api/franklab/integrations/text-sticker/safe-zone-placement-options | source |
get_task | GET /franklab/api/franklab/jobs/{taskId} | source |
upload_source | POST /franklab/api/franklab/jobs/upload | source |
check_connection | GET /franklab/api/franklab/integrations/text-sticker/auth/stats | source |
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/subtitles" \
-H "Authorization: Bearer $FRANKLAB_KEY" \
-H "Content-Type: application/json" \
--data '{"videoUrl":"https://example.com/synthetic.mp4","captionEngine":"v1","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}],"outputMode":"burn"}'REST fields
Fields apply to the selected operation; required conditions and the minimal example define usage. [] denotes array items.
| Field | Type | Conditions and allowed values |
|---|---|---|
videoUrl | string | required (v1); URL; required (v2) |
language | string | auto / ru / en; language |
transcriptionEngine | string | subtitleSourceMode=auto; whisper / xai_grok_transcribe / elevenlabs_scribe / local_whisper; transcription Engine |
diarize | boolean | subtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe OR subtitleSourceMode=auto; transcriptionEngine=elevenlabs_scribe; diarize |
transcriptionFormat | boolean | subtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe; transcription Format |
fillerWords | boolean | subtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe; filler Words |
keyterm | array | subtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe OR subtitleSourceMode=auto; transcriptionEngine=elevenlabs_scribe OR subtitleSourceMode=auto; transcriptionEngine=local_whisper; max items 100; max length 50 |
keyterm[] | string | required when subtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe; keyterm[] |
subtitles | array | required when subtitleSourceMode=manual; max items 500 |
subtitles[].text | string | required when subtitleSourceMode=manual; subtitles[].text |
subtitles[].startTime | number | required when subtitleSourceMode=manual; subtitles[].start Time |
subtitles[].endTime | number | required when subtitleSourceMode=manual; subtitles[].end Time |
subtitles[].words | array | subtitleSourceMode=manual; subtitles[].words |
subtitles[].words[].word | string | required when subtitleSourceMode=manual; subtitles[].words[].word |
subtitles[].words[].start | number | required when subtitleSourceMode=manual; subtitles[].words[].start |
subtitles[].words[].end | number | required when subtitleSourceMode=manual; subtitles[].words[].end |
translateTo | string | translationMode=translate; en / ru / de / fr / es / it / pt / zh / ja / ko / ar; translate To |
dualLanguage | boolean | translationMode=translate; dual Language |
videoEffects | array | effectsMode=custom; max items 20 |
videoEffects[].effectId | string | required when effectsMode=custom; rpc://getVideoEffects; video Effects[].effect Id |
videoEffects[].scope | string | effectsMode=custom; clip / range; video Effects[].scope |
videoEffects[].startTime | number | effectsMode=custom; video Effects[].start Time |
videoEffects[].endTime | number | effectsMode=custom; video Effects[].end Time |
videoEffects[].intensity | number | effectsMode=custom; video Effects[].intensity |
outputMode | string | burn / srt / vtt / ass / burn+srt / burn+vtt; output Mode |
c2paSigningMode | string | off / franklab / user_profile; c2pa Signing Mode |
contentOrigin | string | franklab or user_profile; restricted origins require permitting user_profile and evidence; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; content Origin |
humanAuthorName | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Name |
humanAuthorUrl | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; human Author Url |
reviewedBy | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed By |
reviewedAt | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; reviewed At |
reviewMethod | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; review Method |
sourceMaterialUrls | array | c2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10 |
originalEvidenceUrls | array | c2paSigningMode=franklab OR c2paSigningMode=user_profile; max items 10 |
verifiedIncomingC2paIngredient | boolean | c2paSigningMode=franklab OR c2paSigningMode=user_profile; verified Incoming C2pa Ingredient |
c2paActionDescription | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Action Description |
c2paDisclosure | string | c2paSigningMode=franklab OR c2paSigningMode=user_profile; c2pa Disclosure |
c2paSignerProfileId | string | required when c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; c2pa Signer Profile Id |
callbackUrl | string | URL |
templateId | string | clean-classic / clean-bold / podcast-lower-third / interview-soft-shadow / reels-punch / tiktok-bold-center / tiktok-keyword-highlight / viral-word-pop / clean-product-demo / boxed-active-word / karaoke-lite / karaoke-pop / gaming-outline / gaming-neon / education-marker / education-clean-center / minimal-modern / boxed-bold / emoji-accent / meme-caption / serif-cinematic / classic-subtitles / creator-hook / news-ticker / documentary-narration / sports-highlight / luxury-minimal / horror-crawl / children-playful / corporate-clean / vlog-casual / music-lyric / creative-handwritten / travel-explorer / tech-review / motivational-impact / cooking-recipe / fitness-energy / wedding-elegant / retro-display / academic-formal / brand-showcase / slavic-decorative; template Id; shorts_pro / creator_hook_v2 / product_demo_v2 / cta_product_v2 / sufler_bold_emoji_stack_v2 / sufler_ref_dan_v2 / sufler_ref_viktor_v2 / sufler_neon_outline_emoji_v2 / sufler_orange_active_strip_v2 / sufler_minimal_white_pill_v2 / sufler_black_shadow_keyword_v2 / sufler_neon_banner_v2 / sufler_clean_yellow_stack_v2 / sufler_compact_yellow_italic_v2 / sufler_orange_keyword_stack_v2 / frank_bold_orange_box_v2 / frank_green_caption_box_v2 / frank_bold_yellow_icon_v2 / frank_creator_yellow_stack_v2 / frank_red_green_active_v2 / frank_red_white_active_v2 / frank_yellow_keyword_v2 / frank_yellow_italic_v2 / frank_soft_pill_v2 |
highlightMode | string | / none / keywords / karaoke / emoji; highlight Mode |
platform | string | v1PlacementMode=exact_preset; rpc://getSafeZonePlatforms; platform; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset; Query parameter; use platform from safe-zone platform lookup |
safeZonePreset | string | v1PlacementMode=exact_preset; rpc://getSafeZonePlacements; safe Zone Preset; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset |
positionX | number | v1PlacementMode=exact_coordinates; min 0; max 100; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates |
positionY | number | v1PlacementMode=exact_coordinates; min 0; max 100; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates |
fontSize | number | v1TextStyleMode=custom; min 1; max 512; v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual |
font | string | v1TextStyleMode=custom; rpc://getFonts; max length 64; v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual |
color | string | v1TextStyleMode=custom; color; v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual |
uppercase | boolean | v1TextStyleMode=custom; uppercase |
displayWords | number | v1TextStyleMode=custom; min 1; max 6 |
maxLines | number | v1TextStyleMode=custom; min 1; max 2; v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual |
maxCharsPerLine | number | v1TextStyleMode=custom; min 8; max 42; v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual |
gapSplitSec | number | v1TextStyleMode=custom; min 0.15; max 2 |
lingerMs | number | v1TextStyleMode=custom; min 0; max 500 |
captionEngine | string | |
presetOverrideMode | string | v2TemplateId=shorts_pro OR v2TemplateId=creator_hook_v2 OR v2TemplateId=product_demo_v2 OR v2TemplateId=cta_product_v2 OR v2TemplateId=sufler_bold_emoji_stack_v2 OR v2TemplateId=sufler_ref_dan_v2 OR v2TemplateId=sufler_ref_viktor_v2 OR v2TemplateId=sufler_neon_outline_emoji_v2 OR v2TemplateId=sufler_orange_active_strip_v2 OR v2TemplateId=sufler_minimal_white_pill_v2 OR v2TemplateId=sufler_black_shadow_keyword_v2 OR v2TemplateId=sufler_neon_banner_v2 OR v2TemplateId=sufler_clean_yellow_stack_v2 OR v2TemplateId=sufler_compact_yellow_italic_v2 OR v2TemplateId=sufler_orange_keyword_stack_v2 OR v2TemplateId=frank_bold_orange_box_v2 OR v2TemplateId=frank_green_caption_box_v2 OR v2TemplateId=frank_bold_yellow_icon_v2 OR v2TemplateId=frank_creator_yellow_stack_v2 OR v2TemplateId=frank_red_green_active_v2 OR v2TemplateId=frank_red_white_active_v2 OR v2TemplateId=frank_yellow_keyword_v2 OR v2TemplateId=frank_yellow_italic_v2 OR v2TemplateId=frank_soft_pill_v2; preset / manual; preset Override Mode |
outline | number | v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; min 0; max 8 |
outlineColor | string | v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; outline Color |
shadow | number | v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; min 0; max 8 |
renderMode | string | v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; / static / phrase_pop / word_pop / active_word / word_reveal / active_box; render Mode |
animationIntensity | string | v2TemplateId=shorts_pro; v2PresetControlMode=manual OR v2TemplateId=creator_hook_v2; v2PresetControlMode=manual OR v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; low / medium / high; animation Intensity |
highlightColor | string | v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; highlight Color |
revealBaseline | string | v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; / none / dim / full; reveal Baseline |
animationStyle | string | v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; max length 40 |
emojiAccentMode | string | v2TemplateId=product_demo_v2; v2PresetControlMode=manual OR v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual OR v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual OR v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; max length 40 |
activeColor | string | v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; active Color |
activeBoxColor | string | v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; active Box Color |
activeBoxPadding | number | v2TemplateId=cta_product_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual OR v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual OR v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual OR v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; min 4; max 48 |
qualityMode | string | standard / pro; quality Mode |
emphasisMode | string | semantic / manual / karaoke / none; emphasis Mode |
emphasisWords | array | v2EmphasisMode=manual; max items 50; max length 40 |
emphasisWords[] | string | required when v2EmphasisMode=manual; emphasis Words[] |
diagnosticsLevel | string | basic / full; diagnostics Level |
visualQaMode | string | off / contact_sheet; visual Qa Mode |
glossary | array | max items 50 |
glossary[].from | string | required (v2); glossary[].from |
glossary[].to | string | required (v2); glossary[].to |
brandGlossary | array | max items 50 |
brandGlossary[].from | string | required (v2); brand Glossary[].from |
brandGlossary[].to | string | required (v2); brand Glossary[].to |
taskId | string | required (get_task); Path parameter: returned taskId, scoped to the same partner |
file | binary | required (upload_source); multipart/form-data file; maximum 157286400 bytes |
Make options and REST conversion
This is the Make selection reference; form names can differ from REST. Convert v1*/v2*, text* and sample* fields as described above. Nested conditions describe the Make form.
| Form field | When | Values |
|---|---|---|
language | auto / ru / en | |
captionEngine | v1 / v2 | |
v1TemplateId | captionEngine=v1 | clean-classic / clean-bold / podcast-lower-third / interview-soft-shadow / reels-punch / tiktok-bold-center / tiktok-keyword-highlight / viral-word-pop / clean-product-demo / boxed-active-word / karaoke-lite / karaoke-pop / gaming-outline / gaming-neon / education-marker / education-clean-center / minimal-modern / boxed-bold / emoji-accent / meme-caption / serif-cinematic / classic-subtitles / creator-hook / news-ticker / documentary-narration / sports-highlight / luxury-minimal / horror-crawl / children-playful / corporate-clean / vlog-casual / music-lyric / creative-handwritten / travel-explorer / tech-review / motivational-impact / cooking-recipe / fitness-energy / wedding-elegant / retro-display / academic-formal / brand-showcase / slavic-decorative |
v1HighlightMode | captionEngine=v1 | / none / keywords / karaoke / emoji |
v1PlacementMode | captionEngine=v1 | tiktok_bottom_safe / bottom_center / center / top / exact_preset / exact_coordinates |
v1Platform | captionEngine=v1; v1PlacementMode=exact_preset | rpc://getSafeZonePlatforms |
v1SafeZonePreset | captionEngine=v1; v1PlacementMode=exact_preset | rpc://getSafeZonePlacements |
v1TextStyleMode | captionEngine=v1 | template / custom |
v1Font | captionEngine=v1; v1TextStyleMode=custom | rpc://getFonts |
v2TemplateId | captionEngine=v2 | shorts_pro / creator_hook_v2 / product_demo_v2 / cta_product_v2 / sufler_bold_emoji_stack_v2 / sufler_ref_dan_v2 / sufler_ref_viktor_v2 / sufler_neon_outline_emoji_v2 / sufler_orange_active_strip_v2 / sufler_minimal_white_pill_v2 / sufler_black_shadow_keyword_v2 / sufler_neon_banner_v2 / sufler_clean_yellow_stack_v2 / sufler_compact_yellow_italic_v2 / sufler_orange_keyword_stack_v2 / frank_bold_orange_box_v2 / frank_green_caption_box_v2 / frank_bold_yellow_icon_v2 / frank_creator_yellow_stack_v2 / frank_red_green_active_v2 / frank_red_white_active_v2 / frank_yellow_keyword_v2 / frank_yellow_italic_v2 / frank_soft_pill_v2 |
v2QualityMode | captionEngine=v2 | standard / pro |
v2EmphasisMode | captionEngine=v2 | semantic / manual / karaoke / none |
v2DiagnosticsLevel | captionEngine=v2 | basic / full |
v2VisualQaMode | captionEngine=v2 | off / contact_sheet |
subtitleSourceMode | auto / manual | |
transcriptionEngine | subtitleSourceMode=auto | whisper / xai_grok_transcribe / elevenlabs_scribe / local_whisper |
translationMode | none / translate | |
translateTo | translationMode=translate | en / ru / de / fr / es / it / pt / zh / ja / ko / ar |
effectsMode | none / custom | |
videoEffects[].effectId | effectsMode=custom | rpc://getVideoEffects |
videoEffects[].scope | effectsMode=custom | clip / range |
outputMode | burn / srt / vtt / ass / burn+srt / burn+vtt | |
c2paSigningMode | off / franklab / user_profile | |
contentOrigin | c2paSigningMode=franklab | not_declared / human_edited / ai_assisted / ai_generated |
c2paSignerProfileId | c2paSigningMode=user_profile | rpc://getC2paSignerProfiles |
contentOrigin | c2paSigningMode=user_profile | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
Shared v2 preset settings are listed once below. “All 24” means every v2TemplateId value in the table above; each row’s additional conditions also apply. v2RevealBaseline applies to 22 presets: all listed values except shorts_pro and creator_hook_v2.
| Form field | v2TemplateId presets | When | Values |
|---|---|---|---|
v2PresetControlMode | All 24 | captionEngine=v2 | preset / manual |
v2Font | All 24 | captionEngine=v2; v2PresetControlMode=manual | rpc://getFonts |
v2PlacementMode | All 24 | captionEngine=v2; v2PresetControlMode=manual | / tiktok_bottom_safe / exact_preset / exact_coordinates |
v2Platform | All 24 | captionEngine=v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset | rpc://getSafeZonePlatforms |
v2SafeZonePreset | All 24 | captionEngine=v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset | rpc://getSafeZonePlacements |
v2RenderMode | All 24 | captionEngine=v2; v2PresetControlMode=manual | / static / phrase_pop / word_pop / active_word / word_reveal / active_box |
v2AnimationIntensity | All 24 | captionEngine=v2; v2PresetControlMode=manual | low / medium / high |
v2RevealBaseline | All except shorts_pro, creator_hook_v2 | captionEngine=v2; v2PresetControlMode=manual | / none / dim / full |
Response and verification limits
HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; poll the returned taskId.
Results: downloadUrl/subtitleFileUrl, subtitleCount, transcribedText; v2 also reports qualityScore, qualityGateStatus, renderMode, animatedWordCount, highlightedWords, visualQaStatus/visualQaUrl and subtitleDiagnostics. Inspect captionWarnings, fontRenderWarning, requestedFont/resolvedAssFont, appliedVideoFilters and ignoredVideoEffects. Make cue normalization removes arbitrary fields; cueStyleOverrideMode=cue retains x/y/fontSize/font/color. For direct REST send DTO fields only.
REST position: top-left/top-center/top-right/center/bottom-left/bottom-center/bottom-right. v2 custom visual settings require presetOverrideMode=manual. Conditions using subtitleSourceMode/translationMode/effectsMode/v1*/v2* in the reference describe the Make form, not REST fields.
Next step
Choose one operation, upload a small owned file, verify access and your customer tariff, then submit once and retain the taskId with its polling route. Blocked functions need a separate contract verification or fix first.