Fountain script to help storyboarding

Fountain script add-on for Blender

About

This add-on allows Blender to use Fountain to describe a storyboard or a screenplay if you prefer.

Edit: Added an introduction video for the add-on

Motivation

Storyboarding is hard. Inside Blender, we can use grease pencil to help draw the animation. However, a script must start
from somewhere and that’s where a good fountain script can help you out. It’s a simple markup language that allows
you to quickly show actions and dialogues for a screen play scene. Something like

EXT. BRICK'S PATIO - DAY

A gorgeous day.  The sun is shining.  But BRICK BRADDOCK, retired police detective, is sitting quietly, contemplating -- something.

The SCREEN DOOR slides open and DICK STEEL, his former partner and fellow retiree, emerges with two cold beers.

STEEL
Beer's ready!

BRICK
Are they cold?

In turn, this simple text can be used to generate a PDF. The later requires an application. You can browse the Fountain apps page for a list of those. Personally, I find that CinemaVision Fountain Editor does a very good job, is full featured and it’s free.

In the source, there is a fountain script and the resulting PDF.

Once you’re happy with the script, use this plugin and start to add the grease pencil elements to get your scene to come to life. The source contains an example blend file with a really bad storyboard in grease pencil. I’m not exaggerating, it’s bad… Still, if you import the script with the add-on and do play (make sure to click on show information) you’ll quickly see the value of mixing fountain scripts and Blender.

Installation

Do the usual install from disk by specifying that you want to install from disk. You can grab the release from GitHub.

  • In File / User Preferences, select add-ons
  • Click on “Install Add-on from file”
  • Save user settings
  • The addon is inside the Animation tab of the toolbar

Features

This animation add-on allows you to:

  • Import a fountain script
    • This adds markers to elements inside the script like
      • Section headers
      • Scene headers
      • Transitions
      • Dialogue
      • Actions
  • View the fountain elements on the View3D
    • Click on ‘Show Scene Information’ to enable this
  • Click on a fountain marker to
    • quickly jump in the timeline
    • move the cursor to the appropriate line in the script
  • Clear all markers
  • Update the fountain script
    • This adds notes that identify the frame and duration of each element.
  • Clean Script
    • This removes the notes to have a cleaner version of the script. Useful when exporting the text.
  • Export to SRT
    • prints the time and the marker’s content in a format you can use for Youtube subtitles.
  • Sync markers
    • after you move the markers around make sure that
      fountain is aware of the changes.
  • Move markers
    • you can decide where you want a marker to be moved and all subsequent markers will follow that change

Usage

  • In the text editor, open or write a fountain script.
  • In the fountain add-on under the animation tab, select the script
  • Click import
  • Notice that markers are added to the timeline
    • Default duration is 0.5 seconds per word and 1 second per action phrase.
  • Click on a scene element
    • Notice the timeline moves
    • Notice the text cursor is moved
  • Enable the ‘show scene information’ to view onscreen information about the scene inside the 3D viewport.
  • Add greasepencil or other elements to complete your story board

Disclaimer

It’s my first add-on for Blender, please let me know how to improve it.

6 Likes

Sounds really innovative and useful. Will test when I got a spare moment.

Maybe a video or some screenshots in you post or at github will help people understand how to use the add-on better?

Good idea, I added a link to the screenshot. I’ll try to create a youtube video to help show what it does. Finding time is always hard.

Thanks for giving this a try.

It is good you included a demo-file, or else I don’t think I would have understood how it is working. It is an interesting idea to auto-time the script. And I’m curious to find out, how the workflow would be if I write a script while drawing(making it up on the way) or drawing first and then write?

I had to uncheck and check the “Show scene information”(using 2.79) to get the texts visible in the 3d view. For my taste I would prefer shorter lines as default and center everything and also have character names and their dialog in individual lines and centered, so you do not have to move your eyes too far from the center of attention, to be able to read the lines.

I can see in your script that clicking markers are supposed to scroll the text to that line and vice versa, but I couldn’t get it to work?

I’ve been working on an add-on which lets the Sequencer control the camera and scene switching of the 3d view, but unfortunately, the Sequencer can’t access strips from the same scene as the sequencer anymore(has been disabled because of bugs). If this was not the case, it would be interesting to see, if fountain, grease pencil, 3d view and the sequencer(with subtitles) could work together.

Anyway, great job on this add-on. I’m looking forward to seeing where you’re are heading with it.

Btw. if you want to improve your demo file, maybe this https://www.blendernation.com/2018/08/12/free-download-grease-pencil-character-rigs/ or this https://www.blendernation.com/2018/08/16/learn-grease-pencil-2d-animation-in-blender-2-8-alpha-2/ can help?

Thanks so much for doing this! This is something I was planning on writing up a Right Click Select post to propose! Looking forward to trying it.

Btw. if you want the ‘print markers’ function to be useable for YouTube the exported file must be in srt format. Actually there is a markers to srt export add-on, which might inspire you here: https://github.com/jamesruan/SimpleSubtitleEditor/blob/master/SimpleSubtitleEditor.py

Thanks for the suggestion. The print markers in 0.9.2 now generates a SCR file.

On startup, I can’t get the draw method to work as expected. I’ll try to get help in the support section on this.

Clicking on the fountain list works as expected, i.e. it moves the timeline frame and moves the cursor in the script text. I’ll try to add support so that selecting a marker does the same thing.

In terms of workflow, for now I’d say:

  • Write a basic fountain script with a single scene in it
  • Add actions / texts click on import
  • the markers are added
  • add some drawings, see if it works, move things around, etc.
  • insert new dialogue actions in the script, click import again.
    • the frames from the known markers are respected, new ones will be added as needed.
    • Adjust the markers
  • to make sure you can easily sync fountatin and markers, click on update script.

Personally, I start with a text first since I have to get approval from colleagues and that my 2d drawing skills are what they are… However, I like to start playing with timing, draw some basic interactions, to validate that the script works.

Thanks for the kind words. The addon looks very interesting but it targets 2.8 which doesn’t have a stable Python API.

1 Like

Thanks for the suggestion. The print markers in 0.9.2 now generates a SCR file.

Oh, that was quick! When using print markers, I had to manually add the .srt extension(it was .blend). And used https://github.com/doakey3/Subsimport to import the subtitles to the Sequencer. It did throw an error because of this line:

1
00:00:00,000 → 00:00:00,000
BRICK’S PATIO - DAY

If I change it to:

1
00:00:00,000 → 00:00:01,000
BRICK’S PATIO - DAY

Then it works fine, so a subtitle apparently can’t be zero frames long.

Adding a camera to your scene, it could be added to the sequencer. So the sequencer can be used to collect all the storyboard shots or scenes into a sequence with real-time playback.

Fixed, v0.9.3 will now skip any elements with 0 length.

When I started on this, I realized that for long shots, the sequence editor is where it will all come together. However, for story boarding, you still want an editable rough somewhere. I’m thinking of allowing someone to specify a subscene of a script when doing the import to have different scenes or different blender files focus on different areas.

I just released v1.0. It centers the action and dialogues on the UI. Also, it now properly supports dual dialogues.

Great idea and its realization. Thanks

Great stuff. So much easier to read the texts this way.

Maybe “Print Markers” should be “Export Markers”?

Just released v 1.1.0.

  • Changes Print to Export
  • Fixes problem where starting blender was not properly starting the addon for ‘show information’
    - You’ll have to click on import to resynch the internal data if your scene already has fountain markers.
  • Action is only shown while it’s valid
    - Action can still overlap a dialogue if / when needed.
1 Like

Uploaded version 1.3 which has a show end and move tool.

I did a little video to show how to use them.

Show end allows you to see the end marker and then move them to control the duration of an element.
Move allows you to move an element to a place in time. It also fixes the duration of previous element to prevent overlap and move every other marker after it.

I hope you find this useful. It was for me when I did my introduction video :slight_smile:

Thank you. For inspiration I checked up on the subtitle standards and found BBC’s page on the matter. They say max. 37 characters pr. line and max. two lines pr. sign. 160-180 words-per-minute (WPM) or 0.33 to 0.375 second per word. From here: http://bbc.github.io/subtitle-guidelines/

On the retiming, it is nice to see your new functions, but I can’t help thinking that doing the retiming in the Sequencer would give you much more control over the timing. Exporting to Sequencer would mean that all shots would need to have individual cameras. And then in a new scene all cameras would be added as scene strips getting the timings from the markers. I’ve looked for a “bind camera to markers” converted to Sequencer scene strips add-on, but couldn’t find any.

I thought the second video showed how I used the sequence editor to properly move things around. In the sequence editor, you can select a marker, then set the current frame where you want to move it. Click move.

I’m not sure what you mean by ‘all steps would be individual cameras’. Can you elaborate ?

I’ll read on your bbc link, thanks for sharing.

Thanks

New version 1.2.1:

  • You can now specify the WPM or Seconds per Words when doing an import. Defaults to 160 WPM.
  • The scene, section, transition, action and dialogue checkboxes are moved to the Import and export modal windows to remove clutter.

Imagine you would have to do a dialog scene between two characters, where you cut back and forth between two drawings of each character, then it would be helpful to have two drawings side by side and have a camera on each, so instead of making a new drawing each time you could cut between them.

So in a way for each shot(clean canvas/camera setup), a new camera could be created and placed ex. to the right(out of the view of the previous camera).

If cameras are set up with “bind to marker” then when finished each camera could be converted to a scene strip and the texts could be converted to text strips in the Sequencer, which has all the tools for fine-tuning the timings.

The Sequencer can be set up to switch cameras in the 3d view, so you could continue to fine-tune the drawings from the Sequencer. I did a script to add cameras to sequencer scene strips and also switch cameras in 3d view with timings from the Sequencer.

One thing to note though, is that adding scene strips to the same scene as the Sequencer is, has been disabled in 2.8. I really hope it will be back. Because what I’m descriping can’t be done in 2.8 as it is now and controlling the 3d view from the Sequencer opens up a lot of workflow enhancements.

The add-on which links Sequencer and 3d view: https://youtu.be/b4eQrns5KpQ

I’m just thinking out loud here, no need to change anything for my sake in your add-on. :slight_smile:

Ok, I understand your idea a bit more.

I was going in a different direction :slight_smile:

I was thinking that creating an initial story board with grease pencil, should be done in 1 flow. In grease pencil, it’s very trivial to move the camera or just copy & paste between frames.

However, as you move from drawing to animation. I feel, that it helps if we create new blender scenes corresponding to each movie scene and then filter the elements so that only elements to that scene are visible. The kitchen scene or the patio scene would most likely be built and animated independently. So only elements to those would be shown. In the example scenario, the camera cuts to a different scene then goes back to the patio scene (for example)

To re-sync the output of multiple scenes into one coherent movie would need that I could somehow keep a mapping between rendered frames and the marker they were associated with: 001.png -> S3_A1. A tool could then automatically insert image strips at the right place in the sequencer. I’m thinking out loud. Maybe there is another way :slight_smile:

In my tutorial, I rendered the island scene in one go then manually imported the elements inside the sequencer. Keeping a mapping would have helped. Not sure if it’s doable. Do you know if I can add metadata to a rendered image ? like the current or previous marker name associated with that frame ?

Thanks