Limecraft-tools is a command-line transfer and ingest application and is available for Mac OS and Windows. The command-line application makes it possible to set up integrated workflows towards Limecraft Flow based on 3rd party applications such as Telestream Vantage, Root6 Content Agent or watchfolder applications. This makes it possible to connect to existing ingest and transcoding workflows.


Note that the time values are in milliseconds, not seconds.


Ingest


The ingest command is used to ingest a single clip and associated artefacts in Flow.


Usage: ingest [options]
 
Ingest media to Limecraft Flow
 
Options:
  -u, --user <s>                  Limecraft Flow username
  -p, --password <s>              Limecraft Flow password
  --production <d>                Limecraft Flow productionId or productionName to upload in
  --source <s>                    Path to original source
  --path <s>                      Path to material to upload
  --type <s>                      Type of material ("RAW""PROXY""EDL""SHOTSTITCH""STITCH""THUMB""THUMB_SHOT""THUMB_SIXTY""WAVEFORM""AUDIO_MONO""AUDIO_SPEECH""VOLDEMORT_XML""ATTACHMENT""HDR_PROXY")
  --profile <s>                   Profile of material to upload ("web""avid")
  --quality <s>                   Quality of material ("LOW""MEDIUM""HIGH""ULTRA") (default"HIGH")
  --skipUpload                    Only create placeholder
  --markForRemoval                Uploaded material is marked for removal after processing
  --category <s>                  Collection category (by name)
  --parentCollection <s>          Use/create collection in this parent collection (by name)
  --collection <s>                Use/create collection (by name) to add media to
  --skipIngest                    Skip ingest workflow on Limecraft Flow
  --startWorkflow <s>             Start one or more workflows after material has been uploaded to Limecraft Flow ("transcription") (default: [])
  --language <s>                  Language to use in transcription
  --waitForFileCompletion         Wait until file stops growing
  --steadyStateCheckInterval <s>  Interval to check if file is no longer growing
  --steadyStateTimeThreshold <s>  Minimal time a file needs to be in steady state (no longer growing)
  -h, --help                      output usage information


Examples


Create placeholder for a clip:


In some workflows it is sufficient to create a representation or placeholder. In this scenario, the target clip is only probed and all technical characteristics of the clip are collected. Based on these file/clip characteristics, a placeholder is created in the Flow library. Neither the original nor the proxy will be uploaded. If desired, you can still upload the original file later.


$ limecraft-tools ingest --user=**** --password=**** --production=1 --source="./C0002.MXF"

Upload clip but mark for removal after material is processed on Limecraft Flow:


A common use case is uploading clips with the aim of creating a viewing proxy in Limecraft Flow. If you are not able to execute a proxy transcode first, you can immediately upload the original clip. The parameter --type=RAW is used to indicate that this is the original clip. Depending on the needs afterwards, one can decide whether or not to keep the original clip on Limecraft Flow. This is determined by the parameter -markforRemoval.


$ limecraft-tools ingest --user=**** --password=**** --production=1 --source="./C0002.MXF" --path="./C0002.MXF" --type=RAW --markForRemoval

Create placeholder for proxy:


Similar to the creation of a placeholder for the original clip, you can also choose to create a placeholder for the proxy. In this case, it is assumed that you have first transcoded the necessary proxies via a 3rd party application. The following parameters have to be given: --type=PROXY to indicate that it is a proxy. The ---skipUpload makes sure that only a placeholder is created and that no file is loaded. The profile=web parameter indicates that it is a standard Flow viewing proxy (web).


$ limecraft-tools ingest --user=**** --password=**** --production=1 --source="./C0002.MXF" --path="./C0002.mp4" --type=PROXY --profile=web --skipUpload"

Create placeholder for aaf, will upload aaf but not the referenced mxf-files:


limecraft-tools also has the necessary support to set up AVID workflows. A 3rd party application can create the necessary AVID MXF files which can then be referenced in Flow. In this specific case it is important to upload the AAF created by the 3rd party application to Flow. This contains all important information regarding MOBids and other metadata. In a later phase a selection can then be exported from Flow and the Avid material can always be linked back to.


As in previous examples, reference should be made to the source material via the --source property. The --path property contains a reference to the AAF that was delivered by the 3rd party application. In this case, the --type=EDL property should indicate an AAF (which in the context of Limecraft products is seen as an Edit Decision List (EDL)) and --profile=avid. The order of these 3 parameters is so important that they apply to the element that is given with --path. Finally, setting the parameter ---skipUpload ensures that the original files are not uploaded.


$ limecraft-tools ingest --user=**** --password=**** --production=1 --source="./C0002.MXF" --path="./C0002.aaf" --type=EDL --profile=avid --skipUpload"

Upload proxy and create placeholder for aaf:


Similar to the Avid example above, you can also choose to upload a proxy and provide a placeholder for the corresponding AAF (which refers to the Avid OPatom files). In the command below, you use the --path property twice, which refers to the proxy and the AAF respectively. The proxy is characterized by the --type=PROXY and --profile=web. The AAF by --type=EDL and --profile=avid. The ---skipUpload ensures that the AAF is not to be uploaded but only a placeholder is created.


$ limecraft-tools ingest --user=**** --password=**** --production=1 --source="./C0002.MXF" --path="./C0002.mp4" --type=PROXY --profile=web --path="./C0002.aaf" --type=EDL --profile=avid --skipUpload

Upload proxy and start transcription:


In some workflows it is desirable to start a transcription or subtitle workflow after uploading the proxy. In this case, the proxy is first uploaded via the --path property. This property will point to a proxy via --type=PROXY and --profile=web. When the proxy is ingested on Limecraft Flow, you can start the transcription workflow using the --startWorkflow=transcription. The source language is given by --language=fr property. The codes for the language can be found attached at the bottom of this page. The used speech engine is the one that is configured in the production.


$ limecraft-tools ingest --user=**** --password=**** --production=1 --source="./C0002.MXF" --path="./C0002.mp4" --type=PROXY --profile=web --startWorkflow=transcription --language=fr


Extensions


Use extensions to alter settings based on input (e.g. filename patterns).


Examples


Override production and clipname based on incoming filename pattern:


const run = async (input) => {
    if (!input.filename) {
        logger.info('no filename on input object');
        return input;
    }
    if (!input.baseName) {
        input.baseName = Path.basename(input.filename);
    }
    const [production, ...rest] = input.baseName.split('_');
    if (rest && rest.length > 0) {
        input.production = production;
        input.clipName = rest.join('');
    }
    return input;
};
 
module.exports = {
    type: 'PreLimecraftTools',
    name: 'OverrideProduction',
    run,
};
Override collection based on filename pattern:


const run = async (input) => {
    if (!input.filename) {
        logger.info('no filename on input object');
        return input;
    }
    if (!input.baseName) {
        input.baseName = Path.basename(input.filename, Path.extname(input.filename));
    }
    // override collection and parentCollection
    input.collection = ...;
    input.parentCollection = ...;
    return input;
};
 
module.exports = {
    type: 'PreLimecraftTools',
    name: 'OverrideCollection',
    run,
};


Watchfolder


The watchfolder command is used to monitor a folder and to ingest single clips in Flow that were dropped into this folder. Currently it is not possible to ingest associated artefacts through the watchfolder command.


Usage: index watchfolder [options]
 
Ingest media dropped in watchfolder to Limecraft Flow
 
Options:
  -u, --user <s>                  Limecraft Flow username
  -p, --password <s>              Limecraft Flow password
  --usePolling                    Use polling to check for new files (default:
                                  false)
  --pollingInterval <d>           How frequently to check for new files, only
                                  when usePolling is active
  --throttleUpload <d>            Max speed (bytes/sec) to upload to Limecraft
                                  Flow
  --production <d>                Limecraft Flow productionId or productionName
                                  to upload in
  --folder <s>                    folder to watch
  --type <s>                      Type of material ("RAW""PROXY""EDL",
                                  "SHOTSTITCH""STITCH""THUMB",
                                  "THUMB_SHOT""THUMB_SIXTY""WAVEFORM",
                                  "AUDIO_MONO""AUDIO_SPEECH",
                                  "VOLDEMORT_XML""ATTACHMENT""HDR_PROXY")
  --profile <s>                   Profile of material
  --quality <s>                   Quality of material ("LOW""MEDIUM""HIGH",
                                  "ULTRA") (default"HIGH")
  --skipUpload                    Only create placeholder (defaultfalse)
  --markForRemoval                Uploaded material is marked for removal after
                                  processing (defaultfalse)
  --deleteMaterial                Delete material after local processing
                                  (defaultfalse)
  --skipIngest                    Skip ingest workflow on Limecraft Flow
                                  (defaultfalse)
  --skipAafReferenceFiles         Skip files referenced in AAF (defaultfalse)
  --startWorkflow <s>             Start one or more workflows after material
                                  has been uploaded to Limecraft Flow
                                  ("transcription") (default: [])
  --language <s>                  Language to use in transcription
  --waitForFileCompletion         Wait until file stops growing
  --steadyStateCheckInterval <s>  Interval to check if file is no longer
                                  growing
  --steadyStateTimeThreshold <s>  Minimal time a file needs to be in steady
                                  state (no longer growing)
  --category <s>                  Collection category (by name)
  --parentCollection <s>          Use/create collection in this parent
                                  collection (by name)
  --collection <s>                Use/create collection (by name) to add media
                                  to
  -h, --help                      display help for command


Examples


Watchfolder to upload files as source


Upload files dropped in watchfolder to specified production as RAW


$ limecraft-tools watchfolder --user=**** --password=**** --production=productionName --folder=/path/to/watchfolder --waitForFileCompletion --steadyStateTimeThreshold=60000

Watchfolder to upload files as source with polling method


Upload files dropped in watchfolder to specified production as RAW, while polling watchfolder every second


$ limecraft-tools watchfolder --user=**** --password=**** --production=productionName --folder=/path/to/watchfolder --waitForFileCompletion --steadyStateTimeThreshold=60000 --usePolling --pollingInterval 1000


Extensions


Use extensions to alter settings based on input (e.g. filename patterns).


Examples


Examples from 'Ingest'-command also apply to watchfolder


Override source on incoming filename:


Search corresponding file in source folder and use it as source, file dropped in watchfolder handled as proxy


const sourceFolder = '.../SourceFolder';
 
async function transformMedia(input) {
    const baseName = input.baseName;
    const searchPattern = `${baseName}*`
    try {
        const files = await glob(searchPattern, { cwd: sourceFolder });
        if (!files || files.length === 0) {
            logger.info(`No files found with search pattern: ${searchPattern}`);
            return;
        }
        logger.info(`Found ${files.length} files matching search pattern ${searchPattern}`);
        // alter input.media to send file as proxy and use original source as RAW
        input.source = `${sourceFolder.replace('/''\\')}${Path.sep}${files[0]}` // set file from source folder as source
        // upload incoming file as proxy
        input.media = [
            {
                path: input.filename,
                type: 'PROXY',
                profile: 'web',
                quality: 'HIGH',
            },
        ];
    }catch (error) {
        logger.info(`No files found with search pattern: ${searchPattern}, because ${error.message}`);
    }
}
 
const run = async (input) => {
    if (!input.filename) {
        logger.info('no filename on input object');
        return input;
    }
    if (!input.baseName) {
        input.baseName = Path.basename(input.filename, Path.extname(input.filename));
    }
    await transformMedia(input)
    return input;
};
 
module.exports = {
    type: 'PreLimecraftTools',
    name: 'OverrideSource',
    run,
};

Installation


Macos | Windows


Download the limecraft-tools tar archive for your OS and then extract the archive file at an appropriate location. Depending on the use case where limecraft-tools is used, limecraft-tools should be installed in a location where it can be accessed by other applications. At the same time, if limecraft-tools need to upload files from external storage, they should also be accessible.


Persistent watchfolder setup on Windows


The watchfolder is installed as a windows service based on the NSSM tool (https://nssm.cc/)

  • install the nssm tool on your windows machine
  • start the tool via the commandline with the following command:

nssm install <servicename>

or to edit

nssm edit <servicename>

Add the path to the Limecraft-tools executable to NSSM


If you need to connect to a NAS with a certain user you can add the user credentials to the Log on tab. By default, the service is executed as localsystem


If you want to log the output of the service to a application log you can configure the service to redirect the output to a file via the I/O tab. Redirect both stdout en stderr to a log file


Integrations


Limecraft-tools was designed to integrate with 3rd party applications. In the most common use case a 3rd party application takes care of the transcoding of Avid material or proxies which then need to be uploaded to Limecraft Flow. At the same time, limecraft-tools allows more advanced workflows such as starting Limecraft FLow workflows like transcription or subtitling.


Telestream Vantage


Telestream Vantage allows you to add a "Notify Action" to the workflow configuration. According to the Telestream Vantage documentation, the Notify action transfers job information to external systems via Web Services or other methods and can be used to invoke a command shell. This action is Open Workflow capable if the Open Workflows license is installed.


Content Agent


Hazel (macos)

Hazel (https://www.noodlesoft.com/) Hazel is available on macos and is a watchfolder application that watches whatever folders you tell it to and executes actions according to the rules you create. Hazel can be used to set up watchfolder based workflows and to integrate limecraft tools as an upload tool.