HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/resolve/Developer/Workflow Integrations/Examples/CompatibleSamplePlugin/renderer.js
// This file is required by the index.html file and will
// be executed in the renderer process for that window.

// Cached objects
let resolveObj = null;
let projectManagerObj = null;

// Perform action on DOM loaded.
window.addEventListener('DOMContentLoaded', () => {
    loadRenderPreset();
});

window.addEventListener('beforeunload', function (e) {
    CleanupResolveInterface();
});

// Gets resolve object.
function getResolve() {
    if (!resolveObj) {
        resolveObj = GetResolveInterface();
    }

    return resolveObj;
}

 // Gets project manager object.
function getProjectManager() {
    if (!projectManagerObj) {
        projectManagerObj = getResolve().GetProjectManager();
    }

    return projectManagerObj;
}

// Gets current project object.
function getCurrentProject() {
    return getProjectManager().GetCurrentProject();
}

// Gets media pool object.
function getMediaPool() {
    return getProjectManager().GetCurrentProject().GetMediaPool();
}

// Opens input page.
function openPage(page) {
    resolve = getResolve();

    if (resolve.GetCurrentPage() != page) {
        resolve.OpenPage(page);
    }
}

// Gets folder object by name.
function getFolder(rootBin, folderName) {
    if (!rootBin) return null;

    const folderList = rootBin.GetSubFolderList();
    if (!folderList || (folderList.length === 0)) return null;

    for (const folder of folderList) {
        if (folder.GetName() === folderName) return folder;
    }

    return null;
}

// Gets timeline object by name.
function getTimeline(project, timelineName) {
    if (!project) return null;

    const timelineCount = project.GetTimelineCount();
    if (!timelineCount || (timelineCount <= 0)) return null;

    for (let i = 1; i <= timelineCount; i++) {
        timeline = project.GetTimelineByIndex(i);
        if (timeline && (timeline.GetName() === timelineName)) return timeline;
    }

    return null;
}

// Load render preset list.
function loadRenderPreset() {
    var cbRenderPreset = document.getElementById('cbRenderPreset');

    if (!cbRenderPreset.options || (cbRenderPreset.options.length === 0)) {
        const project = getCurrentProject();
        const renderPresetList = project.GetRenderPresets();

        for (var index in renderPresetList) {
            option = document.createElement('option');
            option.text = renderPresetList[index];
            option.value = renderPresetList[index];
            cbRenderPreset.appendChild(option);
        }
    }
}

// Creates a new project.
function createProject() {
    const projName = document.getElementById('projName').value;
    if (!projName) {
        alert('Error: Project name is empty!');
        return;
    }

    projectManager = getProjectManager();
    if (!projectManager) {
        alert('Error: GetProjectManager() failed!');
        return;
    }

    project = projectManager.CreateProject(projName);
    if (!project) {
        alert(`Error: Failed to create project: ${projName}`);
        return;
    }

    const isSaved = projectManager.SaveProject();
    if (!isSaved) {
        alert(`Error: Failed to save project: ${projName}`);
        return;
    }

    console.log(`Created project: ${projName}`);
}

// Opens a project.
function openProject() {
    const projName = document.getElementById('projName').value;
    if (!projName) {
        alert('Error: Project name is empty!');
        return;
    }

    projectManager = getProjectManager();
    if (!projectManager) {
        alert('Error: GetProjectManager() failed!');
        return;
    }

    project = projectManager.LoadProject(projName);
    if (!project) {
        alert(`Error: Failed to open project: ${projName}`);
        return;
    }

    console.log(`Opened project: ${projName}`);
}

// Saves current project.
function saveProject() {
    projectManager = getProjectManager();
    if (!projectManager) {
        alert('Error: GetProjectManager() failed!');
        return;
    }

    const isSuccess = projectManager.SaveProject();
    if (!isSuccess) {
        alert('Error: Failed to save project');
        return;
    }

    console.log('Saved project');
}

// Creates a new bin.
function createBin() {
    const binName = document.getElementById('binName').value;
    if (!binName) {
        alert('Error: Bin name is empty!');
        return;
    }

    openPage('media');

    mediaPool = getMediaPool();
    rootBin = mediaPool.GetRootFolder();

    // Add new bin in root bin
    const bin = mediaPool.AddSubFolder(rootBin, binName);
    if (!bin) {
        alert(`Error: Failed to create bin: ${binName}`);
        return;
    }

    console.log(`Created bin: ${binName}`);
}

// Selects a bin.
function selectBin() {
    const binName = document.getElementById('binName').value;
    if (!binName) {
        alert('Error: Bin name is empty!');
        return;
    }

    openPage('media');

    mediaPool = getMediaPool();
    rootBin = mediaPool.GetRootFolder();

    const folderToSelect = getFolder(rootBin, binName);
    if (!folderToSelect) {
        alert(`Error: No folder exists with name: ${binName}`);
        return;
    }

    // Set current folder
    const isSuccess = mediaPool.SetCurrentFolder(folderToSelect);
    if (!isSuccess) {
        alert(`Error: Failed to select bin: ${binName}`);
        return;
    }

    console.log(`Selected bin: ${binName}`);
}

// Deletes a bin.
function deleteBin() {
    const binName = document.getElementById('binName').value;
    if (!binName) {
        alert('Error: Bin name is empty!');
        return;
    }

    openPage('media');

    mediaPool = getMediaPool();
    rootBin = mediaPool.GetRootFolder();

    const folderToDelete = getFolder(rootBin, binName);
    if (!folderToDelete) {
        alert(`Error: No folder exists with name: ${binName}`);
        return;
    }

    const folderList = [folderToDelete];
    const isSuccess = mediaPool.DeleteFolders(folderList);
    if (!isSuccess) {
        alert(`Error: Failed to delete folder with name: ${binName}`);
        return;
    }

    console.log(`Deleted bin: ${binName}`);
}

// Add clips to media pool.
function addClips() {
    // Get selected file paths
    const selectedFileInputs = document.getElementById('fileSelectClips');
    let filePathsArray = [];
    for (const fileInput of selectedFileInputs.files) {
        filePathsArray.push(fileInput.path);
    }

    if (filePathsArray.length === 0) {
        alert('Error: Empty file list detected!');
        return;
    }

    openPage('media');

    mediaStorage = getResolve().GetMediaStorage();

    // Add clips to the current folder
    const clips = mediaStorage.AddItemListToMediaPool(filePathsArray);
    if (!clips) {
        alert(`Error: Failed to add clips: ${filePathsArray}`);
        return;
    }

    console.log(`Added clips: ${filePathsArray}`);
}

// Creates a new timeline with all the clips in current folder.
function createTimeline() {
    const timelineName = document.getElementById('timelineName').value;
    if (!timelineName) {
        alert('Error: Timeline name is empty!');
        return;
    }

    openPage('media');

    mediaPool = getMediaPool();

    // Get current folder
    currentFolder = mediaPool.GetCurrentFolder();
    if (!currentFolder) {
        alert('Error: Failed to get current folder!');
        return;
    }

    // Get current folder clips
    const clips = currentFolder.GetClipList();
    if (!clips || (clips.length === 0)) {
        alert('Error: Failed to get current folder clips!');
        return;
    }

    // Create timeline with current folder clips
    const timeline = mediaPool.CreateTimelineFromClips(timelineName, clips);
    if (!timeline) {
        alert(`Error: Failed to create timeline: ${timelineName}`);
        return;
    }

    console.log(`Created timeline: ${timelineName}`);
}

// Selects a timeline using name.
function selectTimeline() {
    const timelineName = document.getElementById('timelineName').value;
    if (!timelineName) {
        alert('Error: Timeline name is empty!');
        return;
    }

    project = getCurrentProject();

    const timeline = getTimeline(project, timelineName);
    if (!timeline) {
        alert(`Error: No timeline exists with name: ${timelineName}`);
        return;
    }

    // Set current timeline
    const isSuccess = project.SetCurrentTimeline(timeline);
    if (!isSuccess) {
        alert(`Error: Failed to select timeline: ${timelineName}`);
        return;
    }

    console.log(`Selected timeline: ${timelineName}`);
}

// Render current timeline.
function renderTimeline() {
    const targetDirPath = document.getElementById('targetDirPath').value;
    if (!targetDirPath) {
        alert('Error: Target directory path is empty!');
        return;
    }

    const targetClipName = document.getElementById('targetClipName').value;
    if (!targetClipName) {
        alert('Error: Target clip name is empty!');
        return;
    }

    project = getCurrentProject();

    const timeline = project.GetCurrentTimeline();
    if (!timeline) {
        alert('Error: No timeline exists!');
        return;
    }

    openPage('deliver');

    // Load render preset
    const renderPresetName = document.getElementById('cbRenderPreset').value;
    if (renderPresetName && (renderPresetName.length > 0)) {
        isSuccess = project.LoadRenderPreset(renderPresetName);
        if (!isSuccess) {
            alert(`Error: Failed to load render preset: ${renderPresetName}`);
            return;
        }
    }

    // Set render settings
    isSuccess = project.SetRenderSettings({ 'TargetDir': targetDirPath, 'CustomName': targetClipName });
    if (!isSuccess) {
        alert('Error: Failed to set render settings!');
        return;
    }

    // Add render job
    const jobId = project.AddRenderJob();
    if (!jobId) {
        alert('Error: Failed to add render job!');
        return;
    }

    // Start rendering render job
    isSuccess = project.StartRendering(jobId);
    if (!isSuccess) {
        alert(`Error: Failed to render timeline: ${timelineName}`);
        return;
    }

    console.log(`Render timeline started: ${timelineName}`);
}