Answered
Premiere Pro Synthetic Importer: recognize and update the duration of an existing synthetic clip
Hello Adobe Community,
I am currently developing an Resizable Synthetic Importer for Premiere Pro and am encountering a persistent issue with how Premiere Pro handles dynamic clip durations, despite following the SDK guidelines and prior discussions. I'm hoping someone with deep expertise in Premiere Pro native plugin development might have a solution or a workaround.
Intended Workflow
My importer, SDK_Importer, uses a hybrid approach: a native C++ Premiere Pro plugin coupled with a web-based interface for content creation graphical overlays (lower thirds and such).
1. Content Creation Phase:
◦ When a user creates a new "MySynthClip" (my custom file type), my native plugin launches a local web view which loads a web application where users create/edit content. The app saves a series of PNG image files and a _SUCCESS marker file to a user-specified folder.
2. Import/Playback Phase (Dynamic Duration):
◦ A background thread in my C++ plugin monitors this folder. Upon detecting the _SUCCESS file, it calls g_importerFileManagerSuite->RefreshFileAsync() to notify Premiere Pro that the media is ready and its properties should be re-evaluated.
◦ My plugin is designed to serve frames dynamically:
▪ IN Phase: Sequentially serves frames from an IN subfolder for the initial part of the clip.
▪ HOLD Phase: Serves a single hold.png image for the middle section, stretching it to fill any dragged duration.
▪ OUT Phase: Sequentially serves frames from an OUT subfolder for the final part of the clip.
◦ To enable infinite resizability, my SDKInit function sets importInfo->canDoContinuousTime = kPrTrue; .
◦ My SDKGetInfo8 function also sets fileInfo8->vidInfo.noDuration = imNoDurationNoDefault; and fileInfo8->mayBeGrowing = kPrTrue; for both the pending and ready states. imNoDurationNoDefault explicitly tells Premiere Pro that the clip "can be stretched in the timeline".
◦ Frame serving in SDKImportImage correctly implements the IN/HOLD/OUT logic, scaling images to imageRec->dstWidth and imageRec->dstHeight as required for an importer using imImportImage. The timebase (frameDurationInTicks) is correctly retrieved using stdParms->piSuites->timeSuite->GetTimePerFrame.
Limitation/Issue:
My goal is for the clip's duration to behave as follows:
• Placeholder State (Media Not Ready): When first created, SDKGetInfo8 reports a fixed placeholder duration of 10 seconds (250 ticks at 25fps).
• Ready State (Media is Ready): Once the _SUCCESS file is detected and RefreshFileAsync() is called, SDKGetInfo8 reports a much longer, "infinite" duration of 10 minutes (15000 ticks at 25fps). This longer duration is intended as a display hint, with the imNoDurationNoDefault flag ensuring it can be stretched further by the user.
The Problem: Even with all the correct flags set (canDoContinuousTime = kPrTrue, noDuration = imNoDurationNoDefault, mayBeGrowing = kPrTrue) and my log confirming that SDKGetInfo8 is called and correctly reports the 10-minute duration in the "ready" state, Premiere Pro's UI (in the Project Panel and on the timeline) remains stuck at the initial 10-second placeholder duration (often displayed as 00:00:09:23). The clip is not stretchable beyond this initial placeholder duration.
I suspect this might be related to a strict interpretation of the SDK statement: "You can create a still frame, a movie of a set duration, or an 'infinite' length movie, but cannot change the properties of a synthetic file once imported." Even though I'm attempting to change the reported duration of an already existing clip that started as a synthetic file, Premiere Pro seems to resist updating this core property.
Exact Question(s):
How can I make Premiere Pro correctly recognize and update the duration of an existing synthetic clip from an initial placeholder (10 seconds) to a longer, "infinitely" stretchable duration (10 minutes as a display hint) after content generation is complete and RefreshFileAsync() is called?
If directly changing the reported vidDuration in imGetInfo8 for an existing clip is indeed blocked by the SDK's "cannot change properties" rule, is there an alternative strategy to achieve this "placeholder-to-infinite" transition for synthetic importers, or a specific selector/suite call I'm missing that would force Premiere Pro to re-evaluate and update the displayed duration on the timeline?
Any insights or workarounds would be greatly appreciated!
Thank you,
