Writing Comics in Ulysses

Ulysses-Mac-1024x1024So I’ve just recently switched to the Ulysses writing app. I’ve been using Scrivener for a few years, but the ongoing lack of iOS support is killing me, so I’m trying out Ulysses. My initial project on Ulysses is a six-issue comic script I’m writing on spec. Not the simplest project from a formatting perspective, but it’ll let me try out a number of the neato features in Ulysses.

Like Themes! And Filters! I needed to set these two features up properly in order to create a workable script-writing environment in Ulysses. Here’s how I did it.


Ulysses is a mostly plain-text editor. That is, it doesn’t allow you to set fonts or sizes or anything like that in the writing environment. Instead, you define different text elements using markup — simple text indicators that can be read in order to infer format and structure. So you start a line with a specific symbol in order to indicate a special heading or whatever, and then the system is able to output that line in whatever format (in theory) you desire. You don’t answer questions of font and format until you’re outputting a version of the piece for someone to read.

The idea is to ignore formatting and concentrate on the writing, but Ulysses does give you some visual indicators as you write. It does this using themes, which enable you to vary the colour and font weight (though not family or size) for various formats. As you type the necessary markup, Ulysses applies this tiny bit of formatting.

There are many available markup commands, with seven levels of headings, bold, italic, block quotes, lists and even links and images. But when I write a comic book script (I more or less follow Nate Piekos’ advice on script format), I only need a few:

  • Page Header
  • Panel Header
  • Description
  • Dialogue
  • Bold/Italic
The Theme Editor in Ulysses

The Theme Editor in Ulysses

That’s about it.

So my first step was to create a simple Theme that included just those elements. I just duplicated the standard Markdown theme and then deleted almost everything. Page Header got an opening symbol of PG, Panel Header got PN, and Dialogue got DD. Description is just the default format so it doesn’t need anything.


What my script looks like as I write.

So now when I start a new page, I just type “PG” and then “Page 3” and it appears as a bold header. Same thing with each new panel: just type “PN” and then “Panel 2” and there it is. Dialogue is just the same, with the added bonus that since I established Dialogue as a paragraph style instead of a structure style (like Page Header and Panel Header), a single return after a line of dialogue defaults to another Dialogue paragraph. A double return drops to regular text, ready for me to type PN and go on with the next panel.

Note that in the editor, it doesn’t display the dialogue indented or numbered. That will happen in another step I’ll need to figure out before this is fully completely ready to go — when I want to output a final draft I’ll need to develop a custom Style. Styles are the output “instructions” that Ulysses uses to produce its output. One problem at a time!


Workflowy, the best outlining tool anywhere.

Workflowy, the best outlining tool anywhere.

Now, my outlining/planning process works outwards: I start with a single sentence that sums up the whole story, break that out into a sentence per issue, break THAT out into five sentences per issue, and then write four pages per sentence, for a total of 20 pages, or however many I need. This idea comes from Randy Ingermason’s “Snowflake Method”, although I adjusted it a fair bit for comics (and my brain, which is not Randy’s).

I start any project in Workflowy, my dependable and simple outlining tool. List-making and nesting is effortless in Workflowy, so it’s easy to dive in and out of creative hierarchies. But once I’ve got the 5-sentences-per-issue stage done, Workflowy is no longer useful. I can’t write a script as a set of bullet points!

So I take that outline and copy/paste it straight into Ulysses. Dead simple. Ulysses also has a great “Split Here” trick that allows me to easily divide up the outline into separate sheets. What I want is a sort of hierarchy, where I can go from the single-sentence summation to a given page of comic book script effortlessly. So I put each sentence for the issue into its own sheet. I labelled all those outline sheets with a “snowflake” keyword, and then created a filter called “Outline” that only shows such sheets.

The outline transferred to Ulysses.

The outline transferred to Ulysses.

For each of the five sentences for a given issue, I then go ahead and create four sheets, one for each page that’s supposed to support that sentence. This is where I get to see if my story will actually operate properly — if I’ve created something that has the right number of beats, if I can get from point A to point B with sufficient ease. For each page I just jot down a quick sentence or fragment to indicate what’s going to happen on that page. It’s usually quite simple at this point; I’m just expanding each sentence out into four beats, and then I have a completely-outlined comic book! Heck, if I had a sufficiently ambitious artist I could just ship right now!

I wouldn’t do that. Promise.

But now I can just go page-by-page and create my panels and dialogue all that. If I’m stuck on a given page, I can just skip over it and go on to the next. I’ve still got a complete script, just at various levels of detail. I can now follow my immediate excitement, develop aspects I’m interested in, and be confident I have a full script that works beat by beat.

I keyword those pages with “page” and now I can create a filter that only shows me the actual script pages. If I want to check against the outline, I just hop over to the other filter and there it is. Ulysses does make tagging super-easy so thus far it seems like a winning system.

That’s It

I love simple structures so this is pretty exciting for me. Just a few formatting options and a keyword/filter system that keeps me on track and works for my methodology.

Next up, I’ll have to define a custom Style, so I can get Ulysses to output the final product for sharing with others, but for now this works great.

Posted in Blog.

Leave a Reply

Your email address will not be published. Required fields are marked *