Core
14 functions
Inlay_GET_BOOTTIME
Returns wall-clock uptime in milliseconds since boot, derived from clock_gettime_nsec_np(CLOCK_MONOTONIC_RAW).
Matches the value reported by the BSD `uptime` command, which counts time the machine spent asleep. Strictly monotonic and unaffected by NTP / wall-clock adjustments. Refreshes on every call; subtract two readings to measure elapsed milliseconds between events. Divide by 1000 for seconds.
Signature
Inlay_GET_BOOTTIME ( { CacheBuster } )Parameters
CacheBusterOptionalOptional argument. Omit to use the default behavior.
Returns
Returns runtime timing values used as a monotonic anchor for workflow logic.
Script Pattern
Get runtime anchor
Inlay_GET_BOOTTIMEUse Cases
- Track elapsed runtime between scripted steps without relying on wall-clock drift.
Notes / Caveats
- macOS only. Calls from unsupported platforms return an error response.
Related Functions
Inlay_GET_PUBLIC_IP
Returns the public WAN (NAT/masqueraded) IP address seen from the internet using a public IP lookup service.
Response JSON: {"ok":true,"ip":"x.x.x.x"}.
Signature
Inlay_GET_PUBLIC_IPParameters
This function takes no parameters.
Returns
Returns WAN IP lookup results in JSON (success/error state plus IP value when available).
Script Pattern
Check WAN IP
Inlay_GET_PUBLIC_IPUse Cases
- Display current WAN egress IP in diagnostic/admin layouts.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
Related Functions
Inlay_CONNECTION_DIAG
Runs a real-time connection diagnostic window (20 probes) for a host/IP and graphs latency.
Use this to troubleshoot FileMaker connectivity; for good UX, keep sustained RTT under about 50ms when possible. Returns {"ok":true,"status":"started","address":"..."} immediately.
Signature
Inlay_CONNECTION_DIAG ( IPorDNS )Parameters
IPorDNSRequiredHostname or IP address to probe for latency diagnostics.
Returns
Opens a native diagnostic window and returns immediate status JSON for launch state.
Script Pattern
Test latency to host
Inlay_CONNECTION_DIAG ( "db.filemaker.example.com" )Use Cases
- Diagnose high-latency conditions when users report slow FileMaker UX.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_CUSTOM_FUNCTION
Calls a license-bound custom function.
The first argument is the custom function name (tied to your licensee entitlement) and the second argument is a JSON payload string specific to your workflow. If your license is not entitled to that custom function, access is denied. Contact solutions@pinethree.dev to request a custom function.
Signature
Inlay_CUSTOM_FUNCTION ( CustomFunctionName ; PayloadJson )Parameters
CustomFunctionNameRequiredEntitled custom function name tied to the current licensee.
PayloadJsonRequiredJSON payload string containing inputs required by the custom workflow.
Returns
Returns custom-function execution status JSON tied to license entitlements.
Script Pattern
Run entitled custom workflow
Inlay_CUSTOM_FUNCTION ( "color_grade_pipeline" ; "{""jobId"":""J-2049"",""preset"":""broadcast""}" )Use Cases
- Execute customer-specific extensions tied to paid entitlement scope.
Notes / Caveats
- Custom functions are license-bound; calls without matching entitlement are denied.
Related Functions
Inlay_DEACTIVATE
Fully deactivates this plugin installation.
Releases the platform seat remotely when one is present [optional]; removes any registered license key from local storage [platform token OR offline Ed25519]; and invalidates the in-memory license cache so the next function call observes the unlicensed state immediately [no plugin restart required]. Takes no arguments. Returns {"status": true, "message": "deactivated", "platform_seat_found": bool, "remote_deactivated": bool, "local_key_cleared": bool}. Renamed from Inlay_PLATFORM_DEACTIVATE because the previous name misrepresented the scope. The function now covers offline licenses too.
Signature
Inlay_DEACTIVATEParameters
This function takes no parameters.
Returns
Return behavior is not explicitly documented in the registration comment.
Script Pattern
Minimal call
Inlay_DEACTIVATEUse Cases
- See example and related functions for usage context.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_OPEN_LOG
Opens the current Inlay plugin log file in the default system app.
Signature
Inlay_OPEN_LOGParameters
This function takes no parameters.
Returns
Attempts to open the active Inlay log file and returns success/error JSON.
Script Pattern
Open active plugin log
Inlay_OPEN_LOGUse Cases
- Open the rolling Inlay log quickly during support or QA sessions.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_VERIFY_CODESIGN
Verifies code-sign trust using codesign + spctl.
With no argument, verifies the running FileMaker host runtime; pass a path to verify any binary or .app bundle. PathOrHost accepts: bare HFS (Macintosh HD:u{2026}), filemac:/u{2026}, file:/u{2026}, or a POSIX path (/u{2026}). Returns {"ok":true,"trusted":true|false,"path":"...","detail":"..."}. trusted:true means Gatekeeper-level approval, not just signature presence. Unsigned or ad-hoc signed binaries return trusted:false without an error. Use in security-sensitive workflows to confirm the FM runtime or helper tools are notarized before proceeding.
Signature
Inlay_VERIFY_CODESIGN ( { PathOrHost } )Parameters
PathOrHostOptionalOptional argument. Omit to use the default behavior.
Returns
Return behavior is not explicitly documented in the registration comment. Availability: macOS only.
Script Pattern
Minimal call
Inlay_VERIFY_CODESIGNFull call pattern
Inlay_VERIFY_CODESIGN ( "/Users/shared/file.ext" )Use Cases
- See example and related functions for usage context.
Notes / Caveats
- macOS only. Calls from unsupported platforms return an error response.
Related Functions
Inlay_CHECK_FFMPEG
Checks whether FFmpeg, FFprobe, and FFplay are installed and returns their paths and versions.
Always returns ok:true; check the installed field to branch script logic. When installed:true, each tool entry includes path and version, e.g. {"ok":true,"installed":true,"ffmpeg":{"path":"/usr/local/bin/ffmpeg","version":"7.x"},...}. When installed:false, returns a message with instructions to call Inlay_INSTALL_FFMPEG. Use the returned paths as the FFmpegPath and FFprobePath arguments in Inlay_TRANSCODE and Inlay_VIDEO_METADATA to avoid ambiguity when multiple versions are present. Call this at session start to gate video workflows before attempting metadata or transcode operations.
Signature
Inlay_CHECK_FFMPEGParameters
This function takes no parameters.
Returns
Return behavior is not explicitly documented in the registration comment.
Script Pattern
Minimal call
Inlay_CHECK_FFMPEGUse Cases
- See example and related functions for usage context.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_EXCEL_EXPORT
Writes a multi-sheet xlsx workbook from a JSON spec.
Named-mode only (single JSON object arg with "_inlay": true). Sheets, rows, formulas, formats, hyperlinks, and charts are encoded inline in the JSON.
Keys (camelCase): sheets (required, array) outputPath (optional, string) filesystem path; if omitted, returns container. Accepts: POSIX path, bare HFS (Macintosh HD:Users:...), filemac:/..., filewin:/..., or file:/... filename (optional, string) default 'Export.xlsx', used in container mode asContainer (optional, boolean) if true with outputPath, returns BOTH file + container password (optional, string) if non-empty, wraps the workbook in MS-OFFCRYPTO agile encryption (AES-256 + SHA-512, 100k spin count) so Excel prompts for this password to open
Sheet object: name (string, default 'Sheet<n>') freeze (object {row, col}) autofilter (array [[r,c],[r,c]]) columns (array of {width?, format?}) rows (array of arrays of cells) charts (array of chart objects)
Cell forms: scalar string | number | boolean | null formatted scalar {value, format?} formula {formula, value?, format?} formula is an Excel expr, e.g. =SUM(B2:B10) or =Sheet1!B2 date {date, format?} ISO-8601 (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS[.fff]) hyperlink {link, text?, format?} link is https://, http://, mailto:, internal:Sheet!Cell, or external: file path
Format (string form): named tokens: bold, italic, header, int, decimal2, usd, percent, date, datetime raw Excel format code (must start with digit, $, #, 0, %, ?, ., or [)
Format (object form): bold, italic, strike, wrap booleans underline none|single|double|singleAccounting|doubleAccounting fontName, fontSize string, number fontColor, bgColor, borderColor #RRGGBB hex or named (red, blue, green, yellow, black, white, gray, cyan, magenta, orange, purple, pink, brown) border shorthand for all 4 sides; values: none|thin|medium|thick|double|hair|dashed|dotted borderTop, borderBottom, borderLeft, borderRight per-side overrides align left|center|right|justify|fill valign top|middle|bottom indent non-negative integer rotate -90..90 (or 270 for vertical) numberFormat raw Excel format code
Chart object: type (required) column | line | bar | pie | scatter | area position (required) {row, col} top-left anchor series (required, array) each {name?, categories?, values}; values is required and is an Excel range like =Sheet1!$A$1:$A$10 title (optional, string) size (optional) {width, height} in pixels offset (optional) {x, y} pixel offset within the anchor cell scale (optional) {x, y} multiplicative scale x_axis (optional) {name?} y_axis (optional) {name?} legend (optional) {position?} position: none|top|bottom|left|right
FM ergonomics: Any structural slot (sheets, rows, columns, autofilter, freeze, charts, series) accepts either a real JSON value or a string-encoded JSON value. The latter handles JSONSetElement(... ; ... ; JSONString) chains.
Returns JSON {"ok":true,"path":...,"bytes":N,"sheets":N} in path mode, or sets the FileMaker container with the workbook bytes in container/hybrid mode. On error returns {"ok":false,"message":"..."}.
Signature
Inlay_EXCEL_EXPORT ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "outputPath" ; "<path>" ; JSONString ] ;
[ "password" ; "<optional>" ; JSONString ] ;
[ "sheets" ; "<sheets-json>" ; JSONString ]
) )Parameters
JSONSetElementRequiredRequired argument for this call pattern.
Returns
Return behavior is not explicitly documented in the registration comment.
Script Pattern
Minimal call
Inlay_EXCEL_EXPORT ( "{""ok"":true}" )Use Cases
- See example and related functions for usage context.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_CORE_RUN_PING
Starts an asynchronous ping (5 echoes) against host.
Returns immediately with {"ok":true,"status":"started","label":...,"host":...}. Poll Inlay_CORE_GET_PING_RESULT(label) to retrieve the captured output. Calling again with the same label overwrites the previous result. macOS uses /sbin/ping; Windows uses ping.exe.
Signature
Inlay_CORE_RUN_PING ( Label ; IPorDNS )Parameters
LabelRequiredRequired argument for this call pattern.
IPorDNSRequiredRequired argument for this call pattern.
Returns
Return behavior is not explicitly documented in the registration comment.
Script Pattern
Minimal call
Inlay_CORE_RUN_PING ( "example" ; "db.filemaker.example.com" )Use Cases
- See example and related functions for usage context.
Notes / Caveats
- This call returns before long-running operations fully finish.
Related Functions
Inlay_CORE_GET_PING_RESULT
Returns the current state of a ping job started with Inlay_CORE_RUN_PING.
Result JSON has status one of "pending", "done", or "missing". While pending, includes partial_stdout and partial_stderr that grow as the child process writes output. When done, includes the final stdout, stderr, exit_code, started_at_ms, finished_at_ms, and elapsed_ms.
Signature
Inlay_CORE_GET_PING_RESULT ( Label )Parameters
LabelRequiredRequired argument for this call pattern.
Returns
Return behavior is not explicitly documented in the registration comment.
Script Pattern
Minimal call
Inlay_CORE_GET_PING_RESULT ( "example" )Use Cases
- See example and related functions for usage context.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_CORE_RUN_TRACE
Starts an asynchronous traceroute against host and streams its output into the job entry as the child process emits it.
Returns immediately with {"ok":true,"status":"started","label":...,"host":...}. Poll Inlay_CORE_GET_TRACE(label) to see partial_stdout grow until the job flips to status "done". macOS uses /usr/sbin/traceroute -q 1 -w 1 -m 20 (one query per hop, 1s wait, max 20 hops). Windows is not implemented yet and returns {"ok":false,"message":"trace not implemented on this platform yet"}.
Signature
Inlay_CORE_RUN_TRACE ( Label ; IPorDNS )Parameters
LabelRequiredRequired argument for this call pattern.
IPorDNSRequiredRequired argument for this call pattern.
Returns
Return behavior is not explicitly documented in the registration comment.
Script Pattern
Minimal call
Inlay_CORE_RUN_TRACE ( "example" ; "db.filemaker.example.com" )Use Cases
- See example and related functions for usage context.
Notes / Caveats
- This call returns before long-running operations fully finish.
Related Functions
Inlay_CORE_GET_TRACE
Returns the current state of a traceroute job started with Inlay_CORE_RUN_TRACE.
Result JSON has status one of "pending", "done", or "missing". While pending, includes partial_stdout and partial_stderr that grow line-by-line as traceroute emits each hop. When done, includes the final stdout, stderr, exit_code, started_at_ms, finished_at_ms, and elapsed_ms.
Signature
Inlay_CORE_GET_TRACE ( Label )Parameters
LabelRequiredRequired argument for this call pattern.
Returns
Return behavior is not explicitly documented in the registration comment.
Script Pattern
Minimal call
Inlay_CORE_GET_TRACE ( "example" )Use Cases
- See example and related functions for usage context.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_CORE_LIST_JOBS
Diagnostic.
Returns JSON describing every ping/trace job currently held in the plugin's in-memory state, with fields kind, label, status, host, started_at_ms, and (for done jobs) finished_at_ms, elapsed_ms, exit_code, stdout_bytes, stderr_bytes. Useful for confirming that an Inlay_CORE_RUN_* call actually populated the map.
Signature
Inlay_CORE_LIST_JOBSParameters
This function takes no parameters.
Returns
Return behavior is not explicitly documented in the registration comment.
Script Pattern
Minimal call
Inlay_CORE_LIST_JOBSUse Cases
- See example and related functions for usage context.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Media
3 functions
Inlay_INSPECT_CONTAINER
Returns JSON describing a container field's contents: stream type, byte size, and image dimensions when available.
Signature
Inlay_INSPECT_CONTAINER ( Container )Parameters
containerRequiredFileMaker container field value to inspect.
Returns
Returns JSON metadata about the container stream and media properties when available.
Script Pattern
Inspect a container field
Inlay_INSPECT_CONTAINER ( Media::AssetContainer )Use Cases
- Branch workflow logic based on detected stream/media type inside a container field.
- Validate upload candidates before pushing them to object storage.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_LOAD_IMAGE
Loads a local JPEG, PNG, GIF, BMP, or PDF and returns it as a FileMaker container.
path accepts: bare HFS (Macintosh HD:Users:…), filemac:/…, file:/…, or a POSIX path (/Users/…).
Signature
Inlay_LOAD_IMAGE ( Path )Parameters
PathRequiredRequired argument for this call pattern.
Returns
Returns container data for the local file when the path is valid.
Script Pattern
Load local poster image
Inlay_LOAD_IMAGE ( "/Users/shared/posters/titlecard.png" )Use Cases
- Inject a local poster, graphic, or PDF into a FileMaker container field.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_LOAD_REMOTE_IMAGE
Downloads an image from URL and returns it as a FileMaker container.
Optional TTLHours, EncryptKey, and SourceDate control freshness and cached reuse. Named form example: Inlay_LOAD_REMOTE_IMAGE({ "_inlay": true, "url": "https://example.com/image.jpg", "ttlHours": 24, "encryptKey": "<optional>", "sourceDate": "2026-04-01" })
Signature
Inlay_LOAD_REMOTE_IMAGE ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "url" ; "<image-url>" ; JSONString ]
) )Parameters
JSONSetElementRequiredRequired argument for this call pattern.
_inlayOptionalOptional argument. Omit to use the default behavior.
TrueOptionalOptional argument. Omit to use the default behavior.
JSONBooleanOptionalOptional argument. Omit to use the default behavior.
Returns
Returns container data for the downloaded image; cache settings can affect fetch behavior.
Script Pattern
Load CDN image with cache controls
Inlay_LOAD_REMOTE_IMAGE ( "https://cdn.example.com/posters/titlecard.jpg" ; 24 ; "poster-cache-key" ; "2026-03-10" )Use Cases
- Render externally hosted poster/key-art in FileMaker without manual download steps.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
- TTL/SourceDate settings control cache freshness and when objects are re-fetched.
Related Functions
S3 Storage
15 functions
Inlay_S3_GET
Downloads a private object from S3-compatible storage (AWS S3, Spaces, etc.) and returns a FileMaker container.
Use direct credentials or ConfigKey; optional TTLHours, EncryptKey, and SourceDate control cached reuse. Named form example: Inlay_S3_GET({ "_inlay": true, "config": "prod", "path": "/folder/clip.mxf", "ttlHours": 24, "encryptKey": "<optional>", "sourceDate": "2026-04-01" }) config may be a saved config name [string] or an inline object with domain; region; accessKey; secretKey; bucket.
Signature
Inlay_S3_GET ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "path" ; "<object-path>" ; JSONString ]
) )Parameters
ConfigKeyRequiredName of an S3 profile previously registered with Inlay_S3_SET_CONFIG. Use this mode for cleaner scripts.
SourcePathRequiredObject key path in the bucket (for example, posters/episode1/keyart.jpg).
DomainRequiredS3-compatible endpoint host when using direct-credentials mode.
RegionRequiredRegion identifier used for signing requests (for example, us-east-1).
AccessKeyRequiredAccess key ID for direct-credentials mode.
SecretKeyRequiredSecret access key for direct-credentials mode.
BucketRequiredBucket name that contains SourcePath.
TTLHoursOptionalCache freshness window in hours for local reuse.
EncryptKeyOptionalPassphrase used to encrypt/decrypt cached object bytes on disk.
SourceDateOptionalSource modified date used to force refresh when object changes.
Returns
Returns the object body as container data after access and caching checks.
Script Pattern
ConfigKey mode
Use a saved S3 profile so the call stays short inside scripts and calculations.
Set Variable [ $asset ;
Inlay_S3_GET (
"prod-media" ;
"posters/episode1/keyart.jpg"
)
]Argument context
ConfigKeyName of an S3 profile previously registered with Inlay_S3_SET_CONFIG. Use this mode for cleaner scripts.
SourcePathObject key path in the bucket (for example, posters/episode1/keyart.jpg).
Direct credentials mode
Use the explicit endpoint form when you need to pass domain, region, keys, and bucket in the same call.
Set Variable [ $asset ;
Inlay_S3_GET (
"nyc3.digitaloceanspaces.com" ;
"us-east-1" ;
"DO_ACCESS_KEY" ;
"DO_SECRET_KEY" ;
"inlay-assets" ;
"posters/episode1/keyart.jpg" ;
24 ;
"media-cache-key" ;
"2026-03-10"
)
]Argument context
DomainS3-compatible endpoint host when using direct-credentials mode.
RegionRegion identifier used for signing requests (for example, us-east-1).
AccessKeyAccess key ID for direct-credentials mode.
SecretKeySecret access key for direct-credentials mode.
BucketBucket name that contains SourcePath.
SourcePathObject key path in the bucket (for example, posters/episode1/keyart.jpg).
TTLHoursCache freshness window in hours for local reuse.
EncryptKeyPassphrase used to encrypt/decrypt cached object bytes on disk.
SourceDateSource modified date used to force refresh when object changes.
Use Cases
- Show private S3 media directly inside container fields.
- Pull source assets from storage before handing off to transcode workflows.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
- TTL/SourceDate settings control cache freshness and when objects are re-fetched.
Related Functions
Inlay_S3_PUT_CONTAINER
Uploads a FileMaker container to S3 using ConfigKey.
Sync/async behaviour is controlled by WaitForCompletion in Inlay_S3_SET_CONFIG.
Signature
Inlay_S3_PUT_CONTAINER ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "destinationFolder" ; "<folder>" ; JSONString ]
) )Parameters
OptionalConfigKey: saved config name (from Inlay_S3_SET_CONFIG), or an inline JSON object with domain, region, accessKey, secretKey, bucket.
OptionalDestinationFolder: S3 key prefix (e.g. "media/2026" or "" for root).
OptionalSourceContainer: the FileMaker container value to upload.
MetadataOptionalJSON object of S3 object metadata.
DestinationFilenameOptionaloverride the container's filename.
TTLHoursOverrideOptionalcache TTL override.
EncryptKeyOverrideOptionalcache encryption key override.
Returns
A JSON envelope with `ok`, plus `key`, `etag`, `bytes` on success. When WaitForCompletion is false, returns `{"ok": true, "status": "started", "key": "..."}` immediately.
Script Pattern
Upload a container field
Push a FileMaker container to object storage while attaching metadata and a stable filename.
Set Variable [ $upload ;
Inlay_S3_PUT_CONTAINER (
"prod-media" ;
"exports/invoices" ;
Invoices::PdfContainer ;
"{""customerId"":""C-10042"",""docType"":""invoice""}" ;
"invoice-10042.pdf"
)
]Argument context
ConfigKeyUsed in this pattern.
DestinationFolderUsed in this pattern.
SourceContainerUsed in this pattern.
MetadataJSON object of S3 object metadata.
DestinationFilenameoverride the container's filename.
Use Cases
- Upload generated PDFs from container fields into archive buckets.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
- Transfer behavior can be synchronous or async based on WaitForCompletion profile settings.
Related Functions
Inlay_S3_PUT_FILE
Opens a native file picker and uploads the selected file to S3 using ConfigKey.
Supports optional metadata and destination filename, plus sync/async behavior via WaitForCompletion. Named form example: Inlay_S3_PUT_FILE({ "_inlay": true, "config": "prod", "destinationFolder": "media/2026", "metadata": "{\"author\":\"alice\"}", "destinationFilename": "clip.mp4", "ttlHoursOverride": 48, "encryptKeyOverride": "<optional>" }) config may be a saved config name [string] or an inline object with domain; region; accessKey; secretKey; bucket.
Signature
Inlay_S3_PUT_FILE ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "destinationFolder" ; "<folder>" ; JSONString ]
) )Parameters
JSONSetElementRequiredRequired argument for this call pattern.
_inlayOptionalOptional argument. Omit to use the default behavior.
TrueOptionalOptional argument. Omit to use the default behavior.
JSONBooleanOptionalOptional argument. Omit to use the default behavior.
configOptionalOptional argument. Omit to use the default behavior.
JSONStringOptionalOptional argument. Omit to use the default behavior.
Returns
Opens a native file picker and returns JSON describing upload status/result.
Script Pattern
Pick local file and upload
Inlay_S3_PUT_FILE ( "prod-media" ; "uploads/source-footage" ; "{""project"":""episode1""}" ; "fishing.mov" )Use Cases
- Let operators pick a local file and push it to the active project bucket.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
- Transfer behavior can be synchronous or async based on WaitForCompletion profile settings.
Related Functions
Inlay_S3_VERIFY
Verify an S3 object is reachable with the provided credentials and return basic object details without downloading the body.
Named form example: Inlay_S3_VERIFY({ "_inlay": true, "config": "prod", "path": "/folder/clip.mxf" }) config may be a saved config name [string] or an inline object with domain; region; accessKey; secretKey; bucket.
Signature
Inlay_S3_VERIFY ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "path" ; "<object-path>" ; JSONString ]
) )Parameters
ConfigKeyRequiredNamed profile key from Inlay_S3_SET_CONFIG.
SourcePathRequiredObject key path to validate before downloading or rendering.
DomainRequiredEndpoint host for direct-credentials mode.
RegionRequiredRegion used for request signing.
AccessKeyRequiredAccess key ID for direct-credentials mode.
SecretKeyRequiredSecret access key for direct-credentials mode.
BucketRequiredBucket containing SourcePath.
Returns
Returns object-availability JSON without downloading the full object body.
Script Pattern
Mode A: ConfigKey
Inlay_S3_VERIFY ( "prod-media" ; "trailers/episode1/final.mp4" )Mode B: Direct credentials
Inlay_S3_VERIFY ( "s3.amazonaws.com" ; "us-east-1" ; "AWS_ACCESS_KEY" ; "AWS_SECRET_KEY" ; "media-prod" ; "trailers/episode1/final.mp4" )Use Cases
- Confirm object availability before attempting download/render.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
- Verification functions validate object state and do not return container file bodies.
Related Functions
Inlay_S3_VERIFY_HASH
Validates an S3 object against an expected SHA-256 value and returns whether it matches, plus object size and returned hash details.
Named form example: Inlay_S3_VERIFY_HASH({ "_inlay": true, "config": "prod", "path": "/folder/clip.mxf", "expectedHash": "<sha256-hex>" }) config may be a saved config name [string] or an inline object with domain; region; accessKey; secretKey; bucket.
Signature
Inlay_S3_VERIFY_HASH ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "path" ; "<object-path>" ; JSONString ] ;
[ "expectedHash" ; "<sha256-hex>" ; JSONString ]
) )Parameters
JSONSetElementRequiredRequired argument for this call pattern.
_inlayOptionalOptional argument. Omit to use the default behavior.
TrueOptionalOptional argument. Omit to use the default behavior.
JSONBooleanOptionalOptional argument. Omit to use the default behavior.
configOptionalOptional argument. Omit to use the default behavior.
JSONStringOptionalOptional argument. Omit to use the default behavior.
pathOptionalOptional argument. Omit to use the default behavior.
Returns
Returns JSON hash verification results for the requested object.
Script Pattern
Verify object hash
Inlay_S3_VERIFY_HASH ( "prod-media" ; "trailers/episode1/final.mp4" ; "6de9d78f2f95ef7fda94d11fbe9f0e7d5e9a5e7f0be42a8a43a0b8b14f76d6db" )Use Cases
- Validate media integrity after upload or external processing.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
- Verification functions validate object state and do not return container file bodies.
Related Functions
Inlay_S3_GET_THUMBNAIL
Returns a preview image (<OriginalFileName>_Preview.png) from the same S3 folder as a FileMaker container.
If no preview exists yet, one is generated and stored for reuse. Named form example: Inlay_S3_GET_THUMBNAIL({ "_inlay": true, "config": "prod", "path": "/folder/clip.mxf", "ttlHours": 24, "encryptKey": "<optional>", "sourceDate": "2026-04-01" }) config may be a saved config name [string] or an inline object with domain; region; accessKey; secretKey; bucket.
Signature
Inlay_S3_GET_THUMBNAIL ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "path" ; "<object-path>" ; JSONString ]
) )Parameters
ConfigKeyRequiredNamed profile key from Inlay_S3_SET_CONFIG.
SourcePathRequiredObject key whose sidecar preview image should be returned.
DomainRequiredEndpoint host for direct-credentials mode.
RegionRequiredRegion used for request signing.
AccessKeyRequiredAccess key ID for direct-credentials mode.
SecretKeyRequiredSecret access key for direct-credentials mode.
BucketRequiredBucket containing SourcePath and preview assets.
TTLHoursOptionalCache freshness in hours for the generated/loaded preview image.
EncryptKeyOptionalPassphrase for encrypted thumbnail cache entries.
SourceDateOptionalModified-date hint used for cache refresh decisions.
Returns
Returns a PNG preview container for the target object.
Script Pattern
Load a preview image
Fetch a lightweight preview image instead of the full media file when you only need a visual thumbnail.
Set Variable [ $preview ;
Inlay_S3_GET_THUMBNAIL (
"prod-media" ;
"trailers/episode1/final.mp4"
)
]Argument context
ConfigKeyNamed profile key from Inlay_S3_SET_CONFIG.
SourcePathObject key whose sidecar preview image should be returned.
Use Cases
- Display preview images for larger media objects without loading full files.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
- TTL/SourceDate settings control cache freshness and when objects are re-fetched.
Related Functions
Inlay_S3_SET_CONFIG
Saves reusable S3 connection settings under ConfigKey for the current FileMaker session.
One-argument form clears an existing ConfigKey. Named form example: Inlay_S3_SET_CONFIG({ "_inlay": true, "configKey": "prod", "domain": "s3.us-east-1.amazonaws.com", "region": "us-east-1", "accessKey": "AKIA...", "secretKey": "<secret>", "bucket": "media", "ttlHours": 24, "encryptKey": "<optional>", "waitForCompletion": true }) A 1-arg call with a JSON object lacking _inlay:true continues to be interpreted as a positional call for backward compatibility.
Signature
Inlay_S3_SET_CONFIG ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "configKey" ; "<config-key>" ; JSONString ] ;
[ "domain" ; "<s3-domain>" ; JSONString ] ;
[ "region" ; "<region>" ; JSONString ] ;
[ "accessKey" ; "<access-key>" ; JSONString ] ;
[ "secretKey" ; "<secret-key>" ; JSONString ] ;
[ "bucket" ; "<bucket>" ; JSONString ]
) )Parameters
ConfigKeyRequiredProfile key you reference in later S3 functions (for example, prod-media).
DomainRequiredS3 endpoint host used when creating/updating the profile.
RegionRequiredS3 region for request signing (for example, us-east-1).
AccessKeyRequiredAccess key ID for this profile.
SecretKeyRequiredSecret access key for this profile.
BucketRequiredDefault bucket for this profile.
TTLHoursOptionalDefault cache duration in hours for reads that support caching.
EncryptKeyOptionalDefault passphrase for encrypted local cache storage.
WaitForCompletionOptionalSet 1 for synchronous transfers or 0 for async background behavior where supported.
Returns
Returns JSON confirming config save/update/clear operations for the active session.
Script Pattern
Create a reusable S3 profile
Configure the connection once, then reference the profile by ConfigKey in later S3 functions.
Set Variable [ $config ;
Inlay_S3_SET_CONFIG (
"prod-media" ;
"nyc3.digitaloceanspaces.com" ;
"us-east-1" ;
"DO_ACCESS_KEY" ;
"DO_SECRET_KEY" ;
"inlay-assets" ;
24 ;
"media-cache-key" ;
1
)
]Argument context
ConfigKeyProfile key you reference in later S3 functions (for example, prod-media).
DomainS3 endpoint host used when creating/updating the profile.
RegionS3 region for request signing (for example, us-east-1).
AccessKeyAccess key ID for this profile.
SecretKeySecret access key for this profile.
BucketDefault bucket for this profile.
TTLHoursDefault cache duration in hours for reads that support caching.
EncryptKeyDefault passphrase for encrypted local cache storage.
WaitForCompletionSet 1 for synchronous transfers or 0 for async background behavior where supported.
Clear an existing profile
Pass only the ConfigKey when you want to remove the saved profile.
Set Variable [ $config ;
Inlay_S3_SET_CONFIG ( "prod-media" )
]Argument context
ConfigKeyProfile key you reference in later S3 functions (for example, prod-media).
Use Cases
- Register per-environment profiles (prod, staging) once per session.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
Related Functions
Inlay_S3_GET_METADATA
Returns S3 object metadata and content length for the target object path.
Named form example: Inlay_S3_GET_METADATA({ "_inlay": true, "config": "prod", "path": "/folder/clip.mxf" }) config may be a saved config name [string] or an inline object with domain; region; accessKey; secretKey; bucket.
Signature
Inlay_S3_GET_METADATA ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "path" ; "<object-path>" ; JSONString ]
) )Parameters
ConfigKeyRequiredNamed profile key from Inlay_S3_SET_CONFIG.
SourcePathRequiredObject key to inspect for metadata and object length.
DomainRequiredEndpoint host for direct-credentials mode.
RegionRequiredRegion used for request signing.
AccessKeyRequiredAccess key ID for direct-credentials mode.
SecretKeyRequiredSecret access key for direct-credentials mode.
BucketRequiredBucket containing SourcePath.
Returns
Returns metadata JSON (including object size and metadata fields) for the target object.
Script Pattern
Inspect an object before processing
Read size and metadata before you decide whether to download, render, or transcode the asset.
Set Variable [ $meta ;
Inlay_S3_GET_METADATA (
"prod-media" ;
"posters/episode1/keyart.jpg"
)
]Argument context
ConfigKeyNamed profile key from Inlay_S3_SET_CONFIG.
SourcePathObject key to inspect for metadata and object length.
Use Cases
- Read content length and metadata before deciding processing paths.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
Related Functions
Inlay_S3_DOWNLOAD_TO_PATH
Downloads an S3 object to local disk with a cancelable progress window.
DestinationPath is optional; response JSON includes resolved path, content length, and metadata. DestinationPath accepts bare HFS paths, filemac:/…, file:/…, or a POSIX path. config may be a saved config name [string] or an inline object with domain; region; accessKey; secretKey; bucket. Named form example: Inlay_S3_DOWNLOAD_TO_PATH({ "_inlay": true, "config": "prod", "sourcePath": "/folder/clip.mxf", "destinationPath": "/Users/alice/Downloads/clip.mxf" })
Signature
Inlay_S3_DOWNLOAD_TO_PATH ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "sourcePath" ; "<s3-source-path>" ; JSONString ] ;
[ "destinationPath" ; "<local-destination>" ; JSONString ]
) )Parameters
JSONSetElementRequiredRequired argument for this call pattern.
_inlayOptionalOptional argument. Omit to use the default behavior.
TrueOptionalOptional argument. Omit to use the default behavior.
Returns
Returns JSON describing the local download result path, object details, and transfer status.
Script Pattern
Download an object to disk
Use this when a local tool or operator needs the file on disk instead of inside a FileMaker container.
Set Variable [ $download ;
Inlay_S3_DOWNLOAD_TO_PATH (
"prod-media" ;
"posters/episode1/keyart.jpg" ;
"/Users/shared/Downloads/episode1-keyart.jpg"
)
]Argument context
ConfigKeyUsed in this pattern.
SourcePathUsed in this pattern.
DestinationPathUsed in this pattern.
Use Cases
- Download source assets to local disk for external tools or manual review.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
Related Functions
Inlay_S3_OPEN_FILE_AT_PATH
Opens a local file in the OS default application.
Path accepts: bare HFS (Macintosh HD:Users:…), filemac:/…, filewin:/…, file:/…, or a POSIX path (/Users/…).
Signature
Inlay_S3_OPEN_FILE_AT_PATH ( Path )Parameters
PathRequiredAbsolute local file path (or FileMaker-style file path) to open in the default OS app.
Returns
Attempts to open a local file in the OS default app and returns success/error JSON.
Script Pattern
Open local file
Inlay_S3_OPEN_FILE_AT_PATH ( "/Users/shared/Downloads/episode1-keyart.jpg" )Use Cases
- Open a downloaded file in the default desktop app from a script step.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_S3_RENDER_MEDIA_HTML
Returns media access URL(s) and an embeddable HTML viewer (video/image/pdf/audio/file) for an S3 object.
Auto mode chooses viewer type from content type and filename extension. Named form example: Inlay_S3_RENDER_MEDIA_HTML({ "_inlay": true, "config": "prod", "path": "/folder/clip.mxf", "urlTtlSeconds": 3600, "viewerMode": "auto" }) config may be a saved config name [string] or an inline object with domain; region; accessKey; secretKey; bucket.
Signature
Inlay_S3_RENDER_MEDIA_HTML ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "path" ; "<object-path>" ; JSONString ]
) )Parameters
ConfigKeyRequiredNamed profile key from Inlay_S3_SET_CONFIG.
SourcePathRequiredObject key for the media asset to render.
DomainRequiredEndpoint host for direct-credentials mode.
RegionRequiredRegion used for request signing.
AccessKeyRequiredAccess key ID for direct-credentials mode.
SecretKeyRequiredSecret access key for direct-credentials mode.
BucketRequiredBucket containing SourcePath.
UrlTtlSecondsOptionalSigned URL lifetime in seconds for embedded playback.
ViewerModeOptionalViewer override: auto, video, image, pdf, audio, or file.
Returns
Returns JSON payload containing signed media URL details and embeddable viewer HTML.
Script Pattern
Render embeddable media viewer
Inlay_S3_RENDER_MEDIA_HTML ( "prod-media" ; "trailers/episode1/final.mp4" ; 900 ; "video" )Use Cases
- Embed signed media playback HTML in web viewers/container web areas.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
- Signed media URLs expire; regenerate HTML when viewer sessions outlive URL TTL.
Related Functions
Inlay_S3_MOUNT
Mounts or unmounts an S3 bucket as a native cloud-storage drive.
Requires a config name previously registered with Inlay_S3_SET_CONFIG in the current session. config must be a saved config name string; inline credential objects are rejected (call Inlay_S3_SET_CONFIG first to persist credentials). The Finder/Explorer drive label is the config name. macOS: mounts via FileProvider (appears in Finder sidebar). Windows: mounts via Cloud Filter API (CFAPI); S3 files appear as on-demand placeholders in File Explorer and hydrate transparently on access. Action: "register" mounts the drive; "unregister" (or "remove") unmounts it. ReadOnly accepts 1/true/yes or 0/false/no (default 0); use 1 to prevent write-back from the OS. Each config name maps to one drive slot; calling register again with the same name replaces the existing mount. Returns {"ok":true,"action":"...","config_key":"..."} on success. Named form example: Inlay_S3_MOUNT({ "_inlay": true, "config": "prod", "action": "register", "readOnly": false })
Signature
Inlay_S3_MOUNT ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "action" ; "<register|unregister>" ; JSONString ] ;
[ "readOnly" ; False ; JSONBoolean ]
) )Parameters
JSONSetElementRequiredRequired argument for this call pattern.
_inlayOptionalOptional argument. Omit to use the default behavior.
TrueOptionalOptional argument. Omit to use the default behavior.
Returns
Return behavior is not explicitly documented in the registration comment.
Script Pattern
Minimal call
Inlay_S3_MOUNT ( "{""ok"":true}" )Full call pattern
Inlay_S3_MOUNT ( "{""ok"":true}" ; "example" ; "example" )Use Cases
- Use this function to automate S3-backed FileMaker workflows with repeatable scripts.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
Related Functions
Inlay_S3_MOVE
Move an S3 object or folder prefix to another S3 location.
The source is deleted only after the destination is confirmed to exist. If sourcePath ends with "/", all objects under that prefix are moved recursively. When source and destination share the same region and domain, a server-side CopyObject is used (no data flows through the plugin). For cross-region moves, Mode controls data transfer: "stream" (default) -- bytes held in memory; "cache" -- bytes written to a temp file first, better for large files.
sourceConfig and destinationConfig may each be a saved config name [string] or an inline object with domain; region; accessKey; secretKey; bucket.
Conflict (optional 6th arg) -- what to do when the destination already exists: "overwrite" (default) -- always replace. Pro: simple, always up-to-date. Con: wastes bandwidth re-copying unchanged files. "ignore" -- skip if the destination object exists, regardless of content. Pro: fastest, zero extra requests beyond list. Con: will not re-copy a file that changed at the source. "etag" -- skip if source and destination ETags match. S3 ETags are the MD5 of the content for single-part uploads; for multipart uploads the ETag is a composite hash and two copies of the same file may not match. Pro: exact content comparison for single-part objects, no local computation. Con: unreliable for multipart-uploaded objects. "size" -- skip if source and destination byte counts match. Pro: very fast, works for all object types. Con: same-size files with different content are incorrectly skipped. "md5" -- skip if source and destination ETags match AND both are single-part (plain MD5). Falls back to copy if either object was multipart-uploaded. Pro: reliable content equality for single-part objects. Con: same limitation as etag for multipart uploads. "sha256" -- skip if both objects carry a matching x-amz-checksum-sha256 checksum. Requires AWS Checksum Mode; objects must have been uploaded with SHA256 checksums. Pro: strongest guarantee, algorithm-agnostic from S3's perspective. Con: not supported on DigitalOcean Spaces, MinIO, or objects uploaded without SHA256 checksums -- falls back to copy when checksum is absent.
Silent (optional 7th arg) -- pass "true", "1", "silent", or "yes" to skip the confirmation dialog before deleting source files. When omitted or empty, a native dialog prompts the user to confirm the delete.
Returns {"ok":true,"method":"server"|"stream","files_moved":N,"files_skipped":N,"sources_deleted":N,"bytes_transferred":N}. Returns {"ok":false,"message":"move cancelled: source files not deleted"} if the user declines the confirmation dialog. Named form example: Inlay_S3_MOVE({ "_inlay": true, "sourceConfig": "prod", "sourcePath": "/a/x.mp4", "destinationConfig": "archive", "destinationPath": "/b/x.mp4", "mode": "server", "conflict": "overwrite", "silent": true })
Signature
Inlay_S3_MOVE ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "sourceConfig" ; "<source-config-key>" ; JSONString ] ;
[ "sourcePath" ; "<source-path>" ; JSONString ] ;
[ "destinationConfig" ; "<destination-config-key>" ; JSONString ] ;
[ "destinationPath" ; "<destination-path>" ; JSONString ]
) )Parameters
JSONSetElementRequiredRequired argument for this call pattern.
_inlayOptionalOptional argument. Omit to use the default behavior.
TrueOptionalOptional argument. Omit to use the default behavior.
JSONBooleanOptionalOptional argument. Omit to use the default behavior.
sourceConfigOptionalOptional argument. Omit to use the default behavior.
sourceOptionalOptional argument. Omit to use the default behavior.
JSONStringOptionalOptional argument. Omit to use the default behavior.
Returns
Return behavior is not explicitly documented in the registration comment.
Script Pattern
Minimal call
Inlay_S3_MOVE ( "{""ok"":true}" )Full call pattern
Inlay_S3_MOVE ( "{""ok"":true}" ; "example" ; "example" ; "{""ok"":true}" ; "example" ; "example" ; "{""ok"":true}" )Use Cases
- Use this function to automate S3-backed FileMaker workflows with repeatable scripts.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
Related Functions
Inlay_S3_COPY
Copy files between a local filesystem and S3.
If sourcePath is a local filesystem path (absolute POSIX; bare HFS [Macintosh HD:…]; or prefixed with filemac:/filewin:/file:), files are uploaded to S3 at destinationPath. Otherwise files are downloaded from S3 sourcePath to the local destinationPath. If the source is a folder (path ends with "/" or is a directory), all files are copied recursively. Shows a multi-file progress window.
config may be a saved config name [string] or an inline object with domain; region; accessKey; secretKey; bucket.
Conflict [optional 4th arg] -- what to do when the destination already exists: "overwrite" [default] -- always replace. Pro: simple, always up-to-date. Con: wastes bandwidth re-copying unchanged files. "ignore" -- skip if the destination file or S3 object exists, regardless of content. Pro: fastest possible check. Con: will not re-copy a file that changed at the source. "etag" -- local files have no ETag; falls back to size comparison [same as "size"]. Use "md5" for content-based comparison on local-to-S3 or S3-to-local transfers. "size" -- skip if the destination byte count matches the source. Pro: fast, zero hashing overhead. Con: same-size files with different content are incorrectly skipped. "md5" -- compute the local file's MD5 and compare with the S3 ETag. For upload: reads the entire local file before deciding whether to upload [expensive for large files]. For download: reads the existing local file to compute its MD5. Only reliable for single-part S3 objects [ETag == MD5]; falls back to copy for multipart-uploaded objects. Pro: exact content comparison when applicable. Con: requires reading the full file; unreliable for multipart uploads. "sha256" -- compute local SHA256 and compare with x-amz-checksum-sha256 from S3. Objects must have been uploaded with a SHA256 checksum; not supported on DigitalOcean Spaces, MinIO, or objects without stored checksums. Pro: strongest guarantee; widely trusted algorithm. Con: requires full file read and AWS Checksum Mode support -- falls back to copy when checksum is absent. Returns {"ok":true,"method":"upload"|"download","files_copied":N,"files_skipped":N,"bytes_transferred":N}. Named form example: Inlay_S3_COPY({ "_inlay": true, "config": "prod", "sourcePath": "/a/x.mp4", "destinationPath": "/b/x.mp4", "conflict": "overwrite" })
Signature
Inlay_S3_COPY ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "sourcePath" ; "<source-path>" ; JSONString ] ;
[ "destinationPath" ; "<destination-path>" ; JSONString ]
) )Parameters
ConfigKeyRequiredSaved S3 profile key created with Inlay_S3_SET_CONFIG.
SrcPathRequiredSource path. Use a local filesystem path for uploads or an S3 object/prefix for downloads.
DstPathRequiredDestination path. Use an S3 key/prefix for uploads or a local filesystem path for downloads.
ConflictOptionalConflict strategy when the destination already exists: overwrite, ignore, etag, size, md5, or sha256.
Returns
Returns JSON describing local-to-S3 or S3-to-local copy results and transfer status.
Script Pattern
Upload a local file into S3
When SrcPath is local and DstPath is an S3 key, Inlay uploads the file and shows progress.
Set Variable [ $copy ;
Inlay_S3_COPY (
"prod-media" ;
"/Users/shared/Deliverables/interview.mov" ;
"projects/1234/interview.mov" ;
"overwrite"
)
]Argument context
ConfigKeySaved S3 profile key created with Inlay_S3_SET_CONFIG.
SrcPathSource path. Use a local filesystem path for uploads or an S3 object/prefix for downloads.
DstPathDestination path. Use an S3 key/prefix for uploads or a local filesystem path for downloads.
ConflictConflict strategy when the destination already exists: overwrite, ignore, etag, size, md5, or sha256.
Download an S3 object to disk
When SrcPath points at S3 and DstPath is local, Inlay downloads the object to disk with progress.
Set Variable [ $copy ;
Inlay_S3_COPY (
"prod-media" ;
"projects/1234/interview.mov" ;
"/Users/shared/Downloads/interview.mov" ;
"md5"
)
]Argument context
ConfigKeySaved S3 profile key created with Inlay_S3_SET_CONFIG.
SrcPathSource path. Use a local filesystem path for uploads or an S3 object/prefix for downloads.
DstPathDestination path. Use an S3 key/prefix for uploads or a local filesystem path for downloads.
ConflictConflict strategy when the destination already exists: overwrite, ignore, etag, size, md5, or sha256.
Use Cases
- Move assets between local disk and S3 with a native progress window for operators.
- Upload deliverables or pull review files down to a workstation without custom helper scripts.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
- This function opens a native progress window because local-to-S3 and S3-to-local copies can run longer than a typical script step.
- Conflict modes that rely on hashes may read existing files before deciding whether to copy.
Related Functions
Inlay_S3_PRECACHE
Warms the local S3 disk cache in the background.
Accepts a return-separated list of object paths (the FM-native List() form) and returns immediately with {"ok":true,"queued":N}; a pool of background worker threads fetches the source object AND its thumbnail for each path that is not already fresh in cache. Paths already fresh have their TTL window reset so the entry behaves like a freshly-fetched object. Subsequent Inlay_S3_GET and Inlay_S3_GET_THUMBNAIL calls for the same keys return instantly from cache. Empty/whitespace lines are silently dropped. Named-parameter form only. Example: Inlay_S3_PRECACHE ( JSONSetElement ( "{}" ; [ "_inlay" ; True ; JSONBoolean ] ; [ "config" ; "prod" ; JSONString ] ; [ "paths" ; $myPathList ; JSONString ] ; [ "thumbnails" ; True ; JSONBoolean ] ) ) config may be a saved config name [string] or an inline object with domain; region; accessKey; secretKey; bucket. ttlHours, encryptKey and sourceDate are optional and follow the same semantics as Inlay_S3_GET. thumbnails defaults to true; set false to skip pre-warming the thumbnail cache for binary-only flows.
Signature
Inlay_S3_PRECACHE ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "config" ; "<config-key>" ; JSONString ] ;
[ "paths" ; List (
"<object-path-1>" ;
"<object-path-2>"
) ; JSONString ]
) )Parameters
JSONSetElementRequiredRequired argument for this call pattern.
Returns
Return behavior is not explicitly documented in the registration comment.
Script Pattern
Minimal call
Inlay_S3_PRECACHE ( "{""ok"":true}" )Use Cases
- Use this function to automate S3-backed FileMaker workflows with repeatable scripts.
Notes / Caveats
- Network availability and endpoint latency directly affect response time.
- This call returns before long-running operations fully finish.
Related Functions
SMPTE Timecode
1 function
Inlay_TIMECODE
Canonical SMPTE timecode API.
action patterns: normalize(tc, rate) convert(value, fromType, fromRate, toType, [toRate], [optionsJSON]) parse(value, rate) parts(tc, rate) isValid(value, rate) rateInfo(rate) | ratePlayback(rate) | rateTimebase(rate) | rateNtsc(rate) add(tcA, tcB, rate) | subtract(tcA, tcB, rate) | compare(tcA, tcB, rate) scale(tc, factor, rate) | mod(tc, divisor, rate) negate(tc, rate) | abs(tc, rate) | rebase(tc, fromRate, toRate)
convert types: timecode | frames | seconds | ticks | feet optionsJSON: filmFormat = 35mm4 (default) | 35mm3 | 35mm2 | 16mm; mode = rebase (default) | runtime rate tokens: 23.98/23.976, 24, 25, 29.97/29.97ndf, 29.97df, 30, 47.95, 48, 50, 59.94/59.94ndf, 59.94df, 60
Returns JSON on all actions. Success is {"ok":true,"action":"...",...}; failures are {"ok":false,"message":"..."}. Named form example: Inlay_TIMECODE({ "_inlay": true, "action": "tc_to_frames", "arg1": "01:00:00:00", "arg2": "23.976" })
Signature
Inlay_TIMECODE ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "action" ; "<action-name>" ; JSONString ] ;
[ "arg1" ; "<primary-input>" ; JSONString ]
) )Parameters
actionRequiredOperation token. Choose one of the actions below.
Conversionsnormalize- Re-express a frame count or timecode as a valid SMPTE string at the same rate.
convert- Convert a timecode or frame count to a target type (smpte, frames, seconds, feet+frames).
rebase- Change the frame rate of a timecode, adjusting its value to preserve runtime.
Parsingparse- Parse a timecode string and return its components as JSON.
parts- Return HH, MM, SS, FF components of a timecode as a JSON object.
isValid- Return 1 if the timecode is structurally valid for the given rate, 0 otherwise.
Rate inforateInfo- Return metadata about a rate token (numerator, denominator, drop-frame flag).
ratePlayback- Return the playback speed of a rate as a decimal (e.g. 29.97).
rateTimebase- Return the timebase of a rate (e.g. 30 for 29.97df).
rateNtsc- Return 1 if the rate is an NTSC variant, 0 otherwise.
Arithmeticadd- Add two timecodes or a timecode and a frame offset.
subtract- Subtract one timecode from another.
compare- Compare two timecodes; returns -1, 0, or 1.
scale- Multiply a timecode by a numeric factor.
mod- Return the remainder after dividing one timecode by another.
negate- Negate a timecode (flip its sign).
abs- Return the absolute value of a timecode.
arg1RequiredPrimary input for the selected action. Usually a timecode string, numeric value, or rate token depending on action.
arg2OptionalSecond action-specific argument. Commonly rate, source type, comparison value, or numeric factor.
arg3OptionalThird action-specific argument. Commonly fromRate, toType, or tcB depending on action.
arg4OptionalFourth action-specific argument. Commonly toType or rate depending on action.
arg5OptionalFifth action-specific argument. Used by convert for optional toRate.
optionsJSONOptionalOptional JSON settings. convert currently supports filmFormat (35mm4, 35mm3, 35mm2, 16mm) and mode (rebase or runtime).
{"filmFormat":"35mm4","mode":"runtime"}
Returns
Returns JSON for every action, including normalized values, scalar conversion results, and structured parse or rate metadata.
Script Pattern
Normalize shorthand SMPTE input
Use normalize when operators enter shorthand values and you want canonical SMPTE text back.
Set Variable [ $tc ;
Inlay_TIMECODE ( "normalize" ; "1:2:3:4" ; "23.98" )
]Argument context
actionOperation token. Choose one of the actions below.
arg1Primary input for the selected action. Usually a timecode string, numeric value, or rate token depending on action.
arg2Second action-specific argument. Commonly rate, source type, comparison value, or numeric factor.
Convert timecode to frames
convert is the main bridge between timecode, frames, seconds, ticks, and feet+frames representations.
Set Variable [ $frames ;
Inlay_TIMECODE (
"convert" ;
"01:00:00:00" ;
"timecode" ;
"24" ;
"frames"
)
]Argument context
actionOperation token. Choose one of the actions below.
arg1Primary input for the selected action. Usually a timecode string, numeric value, or rate token depending on action.
arg2Second action-specific argument. Commonly rate, source type, comparison value, or numeric factor.
arg3Third action-specific argument. Commonly fromRate, toType, or tcB depending on action.
arg4Fourth action-specific argument. Commonly toType or rate depending on action.
Convert frames to feet+frames
Pass optionsJSON when you need a non-default film stock layout or runtime-preserving cross-rate conversion.
Set Variable [ $feet ;
Inlay_TIMECODE (
"convert" ;
"864" ;
"frames" ;
"24" ;
"feet" ;
"" ;
"{""filmFormat"":""35mm4""}"
)
]Argument context
actionOperation token. Choose one of the actions below.
arg1Primary input for the selected action. Usually a timecode string, numeric value, or rate token depending on action.
arg2Second action-specific argument. Commonly rate, source type, comparison value, or numeric factor.
arg3Third action-specific argument. Commonly fromRate, toType, or tcB depending on action.
arg4Fourth action-specific argument. Commonly toType or rate depending on action.
arg5Fifth action-specific argument. Used by convert for optional toRate.
optionsJSONOptional JSON settings. convert currently supports filmFormat (35mm4, 35mm3, 35mm2, 16mm) and mode (rebase or runtime).
Inspect frame-rate metadata
Use rateInfo to learn playback, timebase, and drop-frame status before building downstream workflow logic.
Set Variable [ $rate ;
Inlay_TIMECODE ( "rateInfo" ; "29.97df" )
]Argument context
actionOperation token. Choose one of the actions below.
arg1Primary input for the selected action. Usually a timecode string, numeric value, or rate token depending on action.
Add two timecodes at the same rate
Arithmetic actions work on parsed SMPTE values and enforce an explicit rate token.
Set Variable [ $sum ;
Inlay_TIMECODE (
"add" ;
"00:59:30;00" ;
"00:00:45;00" ;
"29.97df"
)
]Argument context
actionOperation token. Choose one of the actions below.
arg1Primary input for the selected action. Usually a timecode string, numeric value, or rate token depending on action.
arg2Second action-specific argument. Commonly rate, source type, comparison value, or numeric factor.
arg3Third action-specific argument. Commonly fromRate, toType, or tcB depending on action.
Use Cases
- Normalize operator-entered timecode before storing it in canonical SMPTE format.
- Convert between timecode, frame counts, runtime seconds, Premiere ticks, and film feet+frames inside FileMaker scripts.
- Perform frame-accurate arithmetic and comparison at explicit SMPTE rates, including drop-frame workflows.
Notes / Caveats
- All actions return JSON. Success responses include ok: true and the selected action; validation failures return ok: false with a message.
- 29.97 and 59.94 default to non-drop-frame. Use 29.97df or 59.94df explicitly when you need drop-frame semantics.
- optionsJSON is only meaningful for actions that support optional behavior, primarily convert.
Related Functions
No direct related functions listed.
Video / Audio
11 functions
Inlay_VIDEO_METADATA
Analyzes a media file and returns JSON metadata (format, streams, duration, frame information).
Optional FFprobePath overrides the analysis tool path. InputPath accepts: a plain path, file:/…, filemac:/…, or filewin:/… URL.
Signature
Inlay_VIDEO_METADATA ( InputPath { ; FFprobePath } )Parameters
InputPathRequiredAbsolute local source media path.
FFprobePathOptionalAbsolute path override for ffprobe executable.
Returns
Returns JSON media-analysis details such as streams, duration, and format metadata.
Script Pattern
Analyze media file
Inlay_VIDEO_METADATA ( "/Users/shared/media/fishing.mov" )Use Cases
- Read stream/frame metadata before choosing transcode presets.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_TRANSCODE
Starts a media transcode job (non-blocking).
Returns immediately with {"ok":true,"status":"started","job_id":"...","status_path":"...","result_path":"..."}. A cancelable progress window is shown while encoding.
SIMPLE MODE, 2 arguments: Inlay_TRANSCODE ( InputPath ; OutputPath ) Transcodes the source to H.264 MP4 with AAC audio, browser-ready (faststart/hinted). OutputPath should end in .mp4. Optionally pass a JSON array as a 3rd argument to override FFmpeg args, e.g. ["-c:v","libx264","-crf","18"].
ADVANCED MODE, 1 argument: Inlay_TRANSCODE ( AdvancedJobJson ) Pass a single JSON object to drive the full FFmpeg command. Required fields: inputs [array of path objects] and outputs [array of path + args objects]. Optional: global_args; filter_complex; job_id; ffmpeg_path; ffprobe_path; metadata with tape_name and master_clip_name. Enables multiple outputs from one pass (for example 1080p + proxy + poster PNG), plus filter_complex graphs and arbitrary stream mapping.
Poll result_path for {"ok":true,"status":"done"}. Path args accept: bare HFS (Macintosh HD:Users:…); filemac:/…; file:/…; filewin:/…; or POSIX path.
NAMED FORM example -- legacy: Inlay_TRANSCODE({ "_inlay": true, "inputPath": "/in.mov", "outputPath": "/out.mp4", "ffmpegArgs": ["-c:v", "libx264", "-crf", "18"] }) NAMED FORM example -- advanced: Inlay_TRANSCODE({ "_inlay": true, "advancedJob": { "inputs": [{"path": "/in.mov"}], "outputs": [{"path": "/out.mp4", "args": ["-c:v", "libx264"]}] } })
Signature
Inlay_TRANSCODE ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "inputPath" ; "<input-path>" ; JSONString ] ;
[ "outputPath" ; "<output-path>" ; JSONString ]
) )Parameters
InputPathSimple, requiredAbsolute path to the source media file. Accepts HFS (Macintosh HD:…), filemac:/…, file:/…, filewin:/…, or POSIX path.
OutputPathSimple, requiredAbsolute path for the output file, typically ending in .mp4. Same path formats as InputPath.
FFmpegArgsJsonSimple, optionalJSON array of FFmpeg CLI tokens that override the default H.264 settings, e.g. ["-crf","18"]. Omit to use the built-in H.264 MP4 preset.
AdvancedJobJsonAdvanced, replaces all abovePass a JSON object as the only argument to take full control: multiple outputs, filter_complex graphs, custom stream mapping. Required fields: inputs (array of {path}), outputs (array of {path, args}). When used, InputPath and OutputPath are not needed.
Returns
Opens a native progress window and returns immediate status JSON for the started job.
Script Pattern
Simple (H.264 MP4, default)
Two arguments are all you need. The plugin transcodes to browser-ready H.264 MP4 with AAC audio and faststart/hinting enabled automatically.
Set Variable [ $job ;
Inlay_TRANSCODE (
"/Users/shared/media/source.mov" ;
"/Users/shared/media/output.mp4"
)
]Argument context
InputPathAbsolute path to the source media file. Accepts HFS (Macintosh HD:…), filemac:/…, file:/…, filewin:/…, or POSIX path.
OutputPathAbsolute path for the output file, typically ending in .mp4. Same path formats as InputPath.
Advanced (hi-res + proxy + poster in one pass)
Pass a single JSON object as the only argument. filter_complex splits the source once so all three outputs share one decode pass, no re-reading the file.
Set Variable [ $job ;
Inlay_TRANSCODE (
"{
""global_args"": [""-y""],
""inputs"": [
{ ""path"": ""/Volumes/Media/source.mov"" }
],
""filter_complex"": ""[0:v]split=3[vhires][vproxy_src][vpost_src];[vproxy_src]scale=960:540[vproxy];[vpost_src]thumbnail=300[vposter]"",
""outputs"": [
{
""path"": ""/Volumes/Media/output_1080p.mp4"",
""args"": [""-map"",""[vhires]"",""-map"",""0:a?"",""-c:v"",""libx264"",""-preset"",""medium"",""-crf"",""20"",""-pix_fmt"",""yuv420p"",""-movflags"",""+faststart"",""-c:a"",""aac"",""-b:a"",""192k""]
},
{
""path"": ""/Volumes/Media/output_proxy.mp4"",
""args"": [""-map"",""[vproxy]"",""-map"",""0:a?"",""-c:v"",""libx264"",""-preset"",""fast"",""-crf"",""28"",""-c:a"",""aac"",""-b:a"",""96k""]
},
{
""path"": ""/Volumes/Media/poster.png"",
""args"": [""-map"",""[vposter]"",""-frames:v"",""1""]
}
]
}"
)
]Argument context
AdvancedJobJsonPass a JSON object as the only argument to take full control: multiple outputs, filter_complex graphs, custom stream mapping. Required fields: inputs (array of {path}), outputs (array of {path, args}). When used, InputPath and OutputPath are not needed.
Use Cases
- Transcode any source video to browser-ready H.264 MP4 with just two arguments, no FFmpeg knowledge required.
- Produce a hi-res delivery file, a smaller proxy, and a poster image all in one pass using the advanced JSON mode.
- Automate post-production workflows: trigger a transcode from a FileMaker script and poll the result file until done.
Notes / Caveats
- Returns immediately; transcoding happens in the background with a native progress window. Poll the result_path file in a script loop to detect completion.
- The progress window can be cancelled by the user. Check the result JSON for ok: false and status: "cancelled" to handle early exit.
Related Functions
Inlay_INSTALL_FFMPEG
Installs FFmpeg, FFprobe, and FFplay for Inlay media features.
Pass a JSON object with download URLs: {"ffmpeg":"...","ffprobe":"...","ffplay":"..."}. Returns the final install result JSON when complete.
Signature
Inlay_INSTALL_FFMPEG ( UrlsJson )Parameters
UrlsJsonRequiredRequired argument for this call pattern.
Returns
Returns final install-result JSON after tool install mode completes.
Script Pattern
Install using Homebrew
Inlay_INSTALL_FFMPEG ( "brew" )Install using explicit binary URLs
Inlay_INSTALL_FFMPEG ( "{""ffmpeg"":""https://cdn.example.com/tools/ffmpeg"",""ffprobe"":""https://cdn.example.com/tools/ffprobe"",""ffplay"":""https://cdn.example.com/tools/ffplay""}" )Use Cases
- Provision FFmpeg tools on macOS hosts before enabling advanced video flows.
Notes / Caveats
- Install step may take time based on package manager/network speed; run in admin workflows, not latency-sensitive scripts.
Related Functions
Inlay_INSTALL_WHISPER
Installs the whisper-cli binary (and on macOS the ggml-metal.metallib shader) into the Inlay helper data dir.
Required once per workstation before Inlay_TRANSCRIBE can run. Downloads are SHA-256-verified, installed atomically, and progress is shown in a native window. See the Inlay TechBlog for build/hosting guidance.
Signature
Inlay_INSTALL_WHISPER ( UrlsJson )Parameters
UrlsJsonRequiredJSON object describing the artifacts to install. Required keys: `whisper_cli` (https URL of the whisper-cli binary), `sha256_whisper_cli` (64-char lowercase hex). On macOS also required: `metal_shaders` (https URL of ggml-metal.metallib) and `sha256_metal_shaders`. Optional: `force` (boolean, defaults to false; when true, reinstalls even if the SHA already matches the on-disk file).
Returns
`{"ok":true,"status":"installed"|"already_installed","paths":{"whisper_cli":"...","metal_shaders":"..."}}` on success. On failure, `{"ok":false,"error_code":"...","message":"..."}` with codes including `download_failed` (hash mismatch or HTTP error), `invalid_args`, and `internal_error`.
Script Pattern
Minimal call
Inlay_INSTALL_WHISPER ( "{""ok"":true}" )Use Cases
- Provision a workstation for offline transcription before any Inlay_TRANSCRIBE call.
- Re-install with `force:true` to upgrade to a new whisper-cli build after re-hosting the binary.
Notes / Caveats
- macOS only. Calls from unsupported platforms return an error response.
- The whisper-cli binary should be Mach-O universal (arm64+x86_64) for cross-architecture macOS support.
- Models are installed separately via Inlay_WHISPER_MODEL_INSTALL.
Related Functions
Inlay_WHISPER_MODEL_INSTALL
Downloads a GGML whisper.cpp model into the Inlay helper data dir.
Required once per model before Inlay_TRANSCRIBE can use it. URLs and SHA-256s are baked into the plugin source (trust boundary; arbitrary URLs are not accepted). Models range from 75 MB to 3 GB depending on the variant; a native progress window shows the download.
Signature
Inlay_WHISPER_MODEL_INSTALL ( ModelNameOrJson )Parameters
ModelNameOrJsonRequiredeither a bare model-name string (one of `tiny`, `tiny.en`, `base`, `base.en`, `small`, `small.en`, `medium`, `medium.en`, `large-v3`, `large-v3-turbo`) or a JSON object `{"model":"<name>","force":false}`. When `force` is true, the model is re-downloaded even if the SHA already matches the on-disk file.
Returns
`{"ok":true,"status":"installed"|"already_installed","model":"<name>","path":"<absolute-path>","bytes":N}` on success. On failure, `{"ok":false,"error_code":"download_failed"|"invalid_args"|"internal_error","message":"..."}`. SHA-256 mismatch returns `download_failed` and the partial file is removed.
Script Pattern
Minimal call
Inlay_WHISPER_MODEL_INSTALL ( "{""ok"":true}" )Use Cases
- Pre-flight setup: install the model your transcribe workflow needs before any user-facing call.
- Multi-model workflows: install `small.en` for fast turnaround AND `large-v3` for archival accuracy, then choose per job at Inlay_TRANSCRIBE time.
Notes / Caveats
- macOS only. Calls from unsupported platforms return an error response.
- `.en` models are English-only and noticeably faster/smaller. Multilingual variants (no `.en` suffix) handle 99+ languages with whisper auto-detect.
- Downloads stream-verify, so a corrupted partial file never lands at the model path.
Related Functions
Inlay_TRANSCRIBE
Starts an offline speech-to-text job using whisper.cpp.
Non-blocking: returns immediately with a job id and opens a native progress window. Poll Inlay_TRANSCRIBE_STATUS, cancel via Inlay_TRANSCRIBE_CANCEL, or attach an onCompleteScript callback to handle terminal status. See the Inlay TechBlog for output format details and boundaryMode behavior.
Signature
Inlay_TRANSCRIBE ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "inputPath" ; "<input-path>" ; JSONString ] ;
[ "model" ; "base.en" ; JSONString ] ;
[ "outputs" ; "<outputs-json-array>" ; JSONString ] ;
[ "videoLog" ;
JSONSetElement ( "{}" ;
[ "frameRate" ; 29.97 ; JSONNumber ] ;
[ "timecodeStart" ; "00:00:00:00" ; JSONString ] ;
[ "boundaryMode" ; "auto" ; JSONString ]
)
; JSONObject ] ;
[ "onCompleteScript" ; "<script-name>" ; JSONString ]
) )Parameters
ArgsJsonRequiredJSON object. Required keys: `_inlay`:true; one of `inputPath` OR (`s3Bucket`+`s3Key`); `model` (tiny, tiny.en, base, base.en, small, small.en, medium, medium.en, large-v3, large-v3-turbo); `outputs` (non-empty array of {format, path} where format is text, json, srt, vtt, or video_log_json). Optional keys: `language` (ISO-639-1), `translate` (boolean), `s3Region`, `s3Endpoint`, `onCompleteScript`, `onCompleteScriptFile`, `onCompleteScriptParam`, `videoLog`.
videoLogOptionaltuning for video_log_json output. Keys: `source`, `timecodeStart`, `frameRate`, `pauseThresholdSeconds`, `minBlockSeconds`, `maxBlockSeconds`, `boundaryMode` (one of: auto, video_fade_to_black, scene_change, none, conservative, aggressive, speaker_change, topic_shift). All keys individually optional.
Returns
`{"ok":true,"status":"started","job_id":"tr_..."}` on accepted submission. Failures return `{"ok":false,"error_code":"...","message":"..."}` with codes `whisper_not_installed`, `model_not_installed`, `ffmpeg_not_installed`, `invalid_args`, or `internal_error`. Terminal status (`done`, `error`, `cancelled`) surfaces via Inlay_TRANSCRIBE_STATUS or onCompleteScript.
Script Pattern
Minimal call
Inlay_TRANSCRIBE ( "{""ok"":true}" )Full call pattern
Inlay_TRANSCRIBE ( "{""ok"":true}" ; "example" )Use Cases
- Generate searchable SRT/VTT subtitles from interview footage as a background script step.
- Produce a video_log_json editorial log of a promo reel for ingest into NLE/MAM/DAM tools.
- Transcribe audio-only files (.mp3/.wav/.m4a) with `boundaryMode:"none"` to skip the FFmpeg pre-pass.
- Fire-and-forget with `onCompleteScript` so the FM script returns immediately and a callback handles the result.
Notes / Caveats
- macOS only. Calls from unsupported platforms return an error response.
- Prerequisites: Inlay_INSTALL_WHISPER, Inlay_WHISPER_MODEL_INSTALL (for the chosen model), and Inlay_INSTALL_FFMPEG.
- Job state lives in plugin memory for the FileMaker session; FM quit drops the registry. Use Inlay_TRANSCRIBE_CLEAR_ALL to reset mid-session.
- The progress window can be cancelled by the user; the job records `status:"cancelled"` and any onCompleteScript still fires for that terminal state.
- inputPath accepts POSIX, filemac:/, file:/, filewin:/, and bare HFS forms.
Related Functions
Inlay_TRANSCRIBE_CANCEL
Requests cancellation of an in-flight Inlay_TRANSCRIBE job.
Writes a sentinel file the helper polls every ~1 s; on detection it terminates the active whisper-cli / FFmpeg child process and records `status:"cancelled"`.
Signature
Inlay_TRANSCRIBE_CANCEL ( JobId )Parameters
JobIdRequiredthe opaque id returned by Inlay_TRANSCRIBE (format `tr_<pid>_<unix_ms>_<seq>`).
Returns
`{"ok":true,"accepted":true,"job_id":"..."}` if the sentinel was written, `{"ok":true,"accepted":false,"reason":"not_running","status":"<terminal>"}` if the job has already finished, or `{"ok":false,"reason":"missing"}` if the job id is not in the in-memory registry.
Script Pattern
Minimal call
Inlay_TRANSCRIBE_CANCEL ( "example" )Use Cases
- Cancel a long-running transcription when the user closes the parent record or aborts the workflow.
- Force-stop a runaway job from an admin layout.
Notes / Caveats
- macOS only. Calls from unsupported platforms return an error response.
- Cancellation is cooperative: the helper kills child processes on the next ~1 s polling tick, so the actual terminal state may lag the cancel call by a second.
- The onCompleteScript callback (if any) still fires for the `cancelled` terminal state.
Related Functions
Inlay_TRANSCRIBE_STATUS
Returns the current state of an Inlay_TRANSCRIBE job.
Designed for FM polling: call repeatedly on a timer or in a script loop until status becomes terminal.
Signature
Inlay_TRANSCRIBE_STATUS ( JobId )Parameters
JobIdRequiredthe opaque id returned by Inlay_TRANSCRIBE.
Returns
`{"ok":true,"kind":"transcribe","job_id":"...","status":"<state>","progress_pct":N,"stage":"<stage>","started_at":N,"updated_at":N,...}`. `status` is one of `missing` (unknown job), `starting`, `downloading` (S3), `extracting_audio` (FFmpeg pre-process), `transcribing` (whisper-cli running), `done`, `error`, or `cancelled`. Once known, the payload also carries `language_detected`, `duration_s`, and on `done` an `outputs[]` array with each generated file's `format`, `path`, and `bytes`. On `error` the payload also carries `error_code` and `error`. Unknown job ids return `status:"missing"` rather than an error.
Script Pattern
Minimal call
Inlay_TRANSCRIBE_STATUS ( "example" )Use Cases
- Drive a FileMaker progress UI by repeatedly querying STATUS and updating a layout while the user works elsewhere.
- Decide branching logic on terminal state: import the transcript on `done`, surface an error dialog on `error`, do nothing on `cancelled`.
- Confirm a job exists in the registry (vs `missing`) before calling Inlay_TRANSCRIBE_CANCEL or Inlay_TRANSCRIBE_FORGET.
Notes / Caveats
- macOS only. Calls from unsupported platforms return an error response.
- This call is cheap (it reads a small status JSON file the helper updates as it works). Polling at 0.5-1 s is fine.
- Status is reset when the plugin unloads (FM quit or extension toggle). Surviving status across FM restart is not supported.
Related Functions
Inlay_TRANSCRIBE_LIST_JOBS
Diagnostic listing of every Inlay_TRANSCRIBE job currently tracked in this FileMaker session.
Signature
Inlay_TRANSCRIBE_LIST_JOBSParameters
This function takes no parameters.
Returns
`{"ok":true,"jobs":[ {"job_id":"...","status":"...","input_filename":"...","model":"...","started_at_ms":N,"has_callback":bool}, ... ]}`. Empty `jobs[]` array when no transcribe calls have run this session.
Script Pattern
Minimal call
Inlay_TRANSCRIBE_LIST_JOBSUse Cases
- Confirm Inlay_TRANSCRIBE actually registered a job (vs. failed pre-spawn).
- Inspect leftover registry entries before invoking Inlay_TRANSCRIBE_CLEAR_ALL.
- Surface running/finished jobs in an admin dashboard.
Notes / Caveats
- macOS only. Calls from unsupported platforms return an error response.
- Jobs persist for the FileMaker session and drop only when the plugin unloads (FM quit / extension toggle).
- `has_callback` is true if the job was started with an onCompleteScript registration that is still pending.
Related Functions
Inlay_TRANSCRIBE_FORGET
Drops a single transcribe job from the plugin's in-memory registry.
The on-disk status file is unlinked and any pending onCompleteScript watcher is cancelled so it won't fire later even if the helper writes a terminal status.
Signature
Inlay_TRANSCRIBE_FORGET ( JobId )Parameters
JobIdRequiredthe opaque id returned by Inlay_TRANSCRIBE.
Returns
`{"ok":true,"removed":true,"job_id":"..."}` if the entry existed and was removed, or `{"ok":true,"removed":false,"reason":"missing","job_id":"..."}` if the job id was unknown.
Script Pattern
Minimal call
Inlay_TRANSCRIBE_FORGET ( "example" )Use Cases
- Clean up completed jobs once their results have been imported into FileMaker.
- Suppress a stale onCompleteScript invocation when the workflow context has changed.
- Drop a single bad entry without resetting the whole session via Inlay_TRANSCRIBE_CLEAR_ALL.
Notes / Caveats
- macOS only. Calls from unsupported platforms return an error response.
- This does NOT kill the underlying whisper-cli / FFmpeg subprocess. Use Inlay_TRANSCRIBE_CANCEL first when you need to stop a running job before forgetting it.
- Idempotent: calling FORGET on an unknown or already-forgotten id is safe.
Related Functions
Inlay_TRANSCRIBE_CLEAR_ALL
Drops every transcribe job from the plugin's in-memory registry, unlinks every on-disk status file, and cancels every pending onCompleteScript watcher.
Signature
Inlay_TRANSCRIBE_CLEAR_ALLParameters
This function takes no parameters.
Returns
`{"ok":true,"removed":N}` where N is the number of registry entries that were removed.
Script Pattern
Minimal call
Inlay_TRANSCRIBE_CLEAR_ALLUse Cases
- Session reset before starting a new workflow to make sure stale jobs from a prior context don't drive callbacks.
- Diagnostic cleanup when the registry has accumulated entries from cancelled or hung jobs.
- Forced cleanup before plugin reload.
Notes / Caveats
- macOS only. Calls from unsupported platforms return an error response.
- This does NOT kill running whisper-cli / FFmpeg subprocesses. Cancel running jobs individually via Inlay_TRANSCRIBE_CANCEL first when needed.
- After CLEAR_ALL, Inlay_TRANSCRIBE_LIST_JOBS returns an empty `jobs[]` and every prior job id will return `status:"missing"` from Inlay_TRANSCRIBE_STATUS.
Related Functions
Licensing
3 functions
Inlay_REGISTER_LICENSE
Activates this plugin installation using a valid Inlay license key (offline key or platform key).
Returns {"ok":true,...} on success or {"ok":false,"message":"..."} when activation fails. Activation remains in effect across restarts.
Signature
Inlay_REGISTER_LICENSE ( Key )Parameters
KeyRequiredRequired argument for this call pattern.
Returns
Returns activation success/error JSON for the provided license key.
Script Pattern
Activate plugin license
Inlay_REGISTER_LICENSE ( "eyJwcm9kdWN0IjoiaW5sYXkiLC4uLn0.Dd7A..." )Use Cases
- Activate a newly provisioned workstation during onboarding.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_LICENSE_STATUS
Returns current license status as JSON.
Licensed response includes identity and expiration fields; unlicensed response is {"ok":true,"licensed":false}. Use this to gate scripts and show license state in your solution UI.
Signature
Inlay_LICENSE_STATUSParameters
This function takes no parameters.
Returns
Returns the current local license state JSON for script gating and UI display.
Script Pattern
Read current license state
Inlay_LICENSE_STATUSUse Cases
- Gate premium script paths to licensed installations only.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Inlay_PLATFORM_DEACTIVATE
DEPRECATED.
Alias for Inlay_DEACTIVATE preserved for one release cycle [0.2.6]; scheduled for removal in 0.2.7. Update scripts to call Inlay_DEACTIVATE. The response adds {"deprecated": true, "deprecation_note": "Inlay_PLATFORM_DEACTIVATE is deprecated; use Inlay_DEACTIVATE"} so a script can detect usage in logs.
Signature
Inlay_PLATFORM_DEACTIVATEParameters
This function takes no parameters.
Returns
Returns JSON confirming local activation state was released/cleared.
Script Pattern
Release current machine activation
Inlay_PLATFORM_DEACTIVATEUse Cases
- Release a seat before machine replacement or VM rotation.
Notes / Caveats
See example and related functions for usage context.
Related Functions
Update
1 function
Inlay_SELF_UPDATE
Checks for plugin updates (release, beta, nightly) and returns available versions for macOS/Windows.
Can also apply an update when requested. Named form example: Inlay_SELF_UPDATE({ "_inlay": true, "currentVersionOverride": "0.2.5", "channel": "beta", "requestedVersion": "0.2.6", "platform": "macos", "applyUpdate": false })
Signature
Inlay_SELF_UPDATE ( JSONSetElement ( "{}" ;
[ "_inlay" ; True ; JSONBoolean ] ;
[ "channel" ; "<stable|beta>" ; JSONString ] ;
[ "applyUpdate" ; False ; JSONBoolean ]
) )Parameters
CurrentVersionOverrideOptionalCurrent plugin version override for update comparison.
ChannelOptionalUpdate channel to query (release, beta, nightly).
RequestedVersionOptionalTarget plugin version to evaluate or install.
PlatformOptionalPlatform override used when evaluating update availability.
ApplyUpdateOptionalSet YES to apply the selected update; NO performs check-only behavior.
Returns
Returns JSON describing available versions and update/apply status.
Script Pattern
Check latest release channel
Inlay_SELF_UPDATECheck beta channel
Inlay_SELF_UPDATE ( "0.2.3" ; "beta" ; "0.2.4-beta.1" ; "macos" ; "NO" )Use Cases
- Check release/beta/nightly availability as part of admin maintenance workflows.
Notes / Caveats
See example and related functions for usage context.