Studio22-Dev - Script Sequencer (Early Access)

Script-to-Sequencer provides automation for animation and cinematic productions. Import a .fountain or .fdx script/screenplay and get a complete template in Unreal, complete with a Sequence per scene, a master Sequence, audio tracks for future voice acting lines, placeholder scratch audio files, placeholder cameras per sequence or script shot note, or a custom combination of any of these assets. Make edits to your script/screenplay, and all manual edits made in-engine stay untouched.

Full Feature List

  • Imports .fountain and .fdx files.

  • Builds a master Level Sequence whose Shots track holds one shot per scene, or one per [[SHOT:]] note.

  • Scenes use unique codes (sc010, sc015, sc010_sh0020) from naming templates, with a folder per episode

  • Scenes, action and dialogue markers, empty scratch audio per line, and empty cine cameras with camera cuts, all optionally generated

  • Live updates: save the script and only plug-in-generated, untouched content changes. Anything an artist, an EDL or OTIO import, or Take Recorder changed is owned and left alone.

  • Three live update/sync modes (on save, ask, manual) and two timing modes (ripple, hold).

  • Customizable estimated timing of lines using word count

  • Team-safe: one editor per script syncs; files are checked out first; files someone else holds wait. Tested with Perforce and Git LFS 2

  • Publishes an open data format spec (sync record, change journal, asset tags) for your own pipeline tools

Technical Details

Engine versions: 5.6, 5.7, 5.8

Platforms: Windows (Win64), Mac

Module: 1 Editor module (ScriptSequencer), loading phase PostEngineInit; editor only, nothing in packaged games

Required plug-ins (enabled automatically): Python Editor Script Plugin, Editor Scripting Utilities, Sequencer Scripting

Input formats: Fountain (.fountain), Final Draft (.fdx)

Source control: Perforce, Git LFS 2 (UEGitPlugin), any provider with check-outs; built-in Git provider without locking

Data contract: 1.0 (Docs/DataContract.md; a technical file-format spec, not a legal agreement)

Network: none

Third-party code: none

Documentation: https://studio22-dev.github.io/Script-Sequencer-Docs/

Support: studio22.development@gmail.com

Early Access

This plug-in is in Early Access, allowing you to lock in a low price while it lasts. Everyone who purchases Script Sequencer will receive every future update.

Version 0.3.0 In Progress

0.2.0, on Fab now: ScriptSequencer creates a master sequence with a shot per scene or per shot note, makes markers and silent scratch audio per line, optionally creates empty cameras, updates automatically on every save or with review and manual modes, EDL and OTIO edits are respected, and is tested with Perforce and Git LFS where one machine syncs per script.

Coming in 0.3.0: A sync report window with choices per script edit, revision-aware Final Draft reports, a casting table, Take Recorder slates tied to script lines, capture lists, changed-after-capture flags, and batch import for series. Roadmap

I’ll post here as each piece gets completed, with short clips.

Documentation

0.3.0 progress: the sync report window

The first big piece of 0.3.0 is working. When you save a script change that would move timing you’ve already set, Script Sequencer now opens a window before it changes anything. Every change is listed by scene, and each one that needs a decision has a dropdown:

  • Extend the shot, Ripple later shots, or Ignore when a scene grows past its shot length
  • Shorten and Ripple or Keep when a held shot is now longer than the script needs
  • Keep or Remove anyway for lines you’ve placed by hand that were cut from the script

A few smaller things came out of testing it:

  • Lines inside a scene now ripple the way shots do on the master. Hand-placed lines move as one piece, keeping their gaps, trims and keys.
  • Drag a line’s audio and its marker follows it to the new start (on by default).
  • Sequencer stays open during syncs.
  • Unused scratch audio can be deleted from the Tools menu.
  • Rewriting a line keeps its ID even in scripts without ID notes, so the report shows one changed line, not a removal and an addition.

0.2.1 hotfix (on Fab now): if you deleted a script’s imported sequences and then imported a script with the same name, Script Sequencer refused it, because the old sync record was still there. 0.2.1 offers to replace that old import instead. 0.3.0 extends this to importing the same script again, in case you’d like to start fresh.

Next up: looking into writing line IDs back into Final Draft (.fdx) files, so .fdx scripts can track rewritten lines as well as Fountain ones. As before, all of this comes to everyone who owns Script Sequencer as a free update.

0.3.0 progress: Final Draft scripts keep their line IDs

Until now Script Sequencer matched each line of an .fdx script to its earlier version by scene and by how similar the text is, so a line rewritten beyond recognition could count as a new line ID, with new scratch audio and a new marker.

The plan was to write Script Sequencer’s own IDs into the .fdx file, as it does with hidden notes in Fountain scripts. Testing with Final Draft version 13.4 turned up something better: Final Draft gives every paragraph an ID of its own and keeps it when you edit the text. In 0.3.0, Script Sequencer reads those IDs, so a line keeps its shot, scratch audio, and marker however much it’s rewritten.

  • Your .fdx file is never written to, so there is no need to close the script before or after importing (like with a Fountain file)
  • A pasted copy of a line is a new line, as you’d expect
  • Scripts saved by older Final Draft versions are matched by text, as before. Open and save them in Final Draft 13 to give lines their IDs

0.3.0 progress: revisions, merged scenes, and markers that are easier to read

If you revise in Final Draft, Script Sequencer now reads your revision sets. Turn on revision mode, make your changes, save, and the report in Unreal says which set you’re in, for example “MyScript.fdx — Second Revision”.

  • Each changed line is tagged with the newest set marked on it, so a blue-pages change and a leftover pink one are set apart
  • A row at the top adds up the changes per set, with the sequences they touch: “Second Revision: 2 lines changed (sc010, sc020)”
  • The set goes into the sync record and the change journal too, so a studio’s own tools can see which revision each line last changed in
  • Fountain users can add “Revision: Blue” to the title page to name the revision

Markers were improved a lot too:

  • Markers follow shots: drag a shot section on the master’s Shots track, or let an EDL import move it, and its scene heading marker moves with it, the way line markers already follow their lines
  • Marker labels: Full text, Shortened (each label is shortened, so they overlap each other less often), or Character only
  • Show IDs in markers: turn it off and markers show just the line, such as “FRED: This is my example line that…”. Script Sequencer still finds every marker by placing the ID into the marker’s comment instead

Also in this update:

  • With the Report window option on, the report window now opens after every save that changes Sequencer, so you always see what happened. Your choices in the report window are applied when you close it
  • One progress window per sync. The first sync after starting the editor no longer flashes a ton of tiny loading windows
  • When you delete a scene heading and two scenes become one, the scene that brought the most lines keeps its sequence. The other sequence is removed from the Shots track but stays in your project with everything in it, and any line you edited by hand there is listed with “Remove anyway” or “Keep”

Release and Roadmap Update

Adding all the planned 0.3.0 features is taking a bit longer than estimated, so I’m changing up the release schedule. My priority is to get a version released that feels nice to use overall with the least amount of hinderances toward any creative process or workflow. So, 0.3.0 is mostly a ‘quality of life’ improvement release. But don’t worry, development on 0.4.0 is starting ASAP!

Happy script writing and virtual production! :memo::slight_smile:

Expect 0.3.0 to be released very very soon

What’s new in 0.3.0:

  • A report window: each sync’s changes in one list, with a choice per warning (ripple later shots, extend the shot, ignore, keep or remove)
  • Final Draft lines followed by Final Draft’s own paragraph IDs, so heavy rewrites keep their links. The .fdx file is never changed
  • Revision-aware reports for Final Draft scripts: changes grouped by revision set, each changed line tagged with its set
  • Markers that follow dragged lines and shots, with shortened labels and IDs that can be hidden
  • Merged scenes keep the sequence of the scene that brought the most lines
  • Data contract 1.1 for pipeline tools, with every 1.0 file still valid

The following features will now be pushed to a 0.4.0 update:

  • A casting table: each character gets an empty binding of its Blueprint or MetaHuman in every scene sequence
  • Speaker cameras: a placeholder camera per speaker plus a wide, cutting on each change of speaker
  • Take Recorder slates set from scene codes, with each take recorded against the script lines it covers, virtual-camera recordings included
  • Capture lists per scene for the stage, as CSV or Markdown, plus a slate export for Mocap Manager
  • Flags on lines rewritten after they were captured
  • Batch import for series: a folder of episode scripts, one grouped report
  • Naming tokens for render file names that follow script codes

Read the updated roadmap here
And you can find the documentation here

Plugin update note

When working on a team with source control, always update the plugin on the machine which owns the script first. Version 0.2.x drops the upcoming 1.1 data contract fields it doesn’t recognize, so it’s best to update to 0.3.0 before using source control features. If multiple computers own their own scripts, update each to 0.3.0 together.

Script Sequencer 0.4 is out on Fab

Version 0.4 is live! This release is about production and capture work. Take a script from the page to the stage and keep track of what’s been captured.

What’s new

  • Casting table. Map each character to a Blueprint or MetaHuman class, and every scene gets one empty binding per character with dialogue
  • Speaker cameras. A placeholder camera per on-screen speaker, plus a wide camera, cutting on each change of character dialogue. Optionally, the cameras are aimed at characters you’ve placed, from eye height. Reposition any camera and the plugin won’t move it
  • Take Recorder slates. Prepare a take and the slate is set to the shot’s code, with the script lines it covers
  • Capture lists. Per scene, as CSV or Markdown, for the stage. There’s also a slate export for Mocap Manager
  • Changed-after-capture flags. Rewrite a line you’ve already captured, and it’s flagged until you recapture it or dismiss the flag
  • Batch import for series. Import a whole folder of scripts! You can either sync one episode at a time, or get one single report window grouped by episode in Batch mode
  • Naming tokens. Use script codes like {ss.episode} and {ss.unit} in Movie Render Queue file names and Cinematic Assembly templates to keep things organized
  • A tidier Tools menu. The Tools menu was getting quite long with all the added features! The menu is now grouped into Import, Sync, Sync Options, Capture, and Other

Try out the new features by going to Tools > Automation Settings and enable them.

Take Recorder, Mocap Manager (Performance Capture Workflow) and Naming Tokens are optional Epic plug-ins. Script Sequencer works without any of them, and the related commands tell you what they need.

What’s next

Work on 1.0 is beginning soon. It includes a Script panel inside the editor, a script display for the stage, production reports, revision history, a subtitle track, ShotGrid, ftrack, and Kitsu hooks, and more.

As always, questions, requests, and bug reports are welcome in this thread. Happy script writing and virtual production! :memo::slight_smile: