Reflections on Celtx after my first 100 days

So in truth I’ve been using it closer to 200 days, but it sounded cooler with the hundred. If not daily, I’ve at least been tampering with writing projects on a weekly basis since I first installed it. I’ve written a full feature (Day Before The Dead) started a book project and have a handful of other feature projects in early stages. Overall I’m quite happy, else I would have looked for alternatives at a much earlier stage. That said, I’d like to share what I believe are weak points on important features and missing or deficient functionality. This applies to Celtx version 2.9.1, Celtx Script and Celtx Studio as per November 2011.

Export Data – the ’Master Catalog’
I’m an amateur writer. Admittedly I have not paid much attention to the pre- and post-production functions in Celtx. One major thing I did notice was the poor export function for marked up content, schedules, reports etc. It does exports a .csv file which is easily imported to a spreadsheet (i.e. Microsoft Excel), but it’s only a short summary. It doesn’t contain all the details, far from it: notes, details of character info, scene info etc. is not exported. This should be left to the user/production assistant to filter and clean up, not for Celtx to censor. Export it all, it’s there! And the information contained is not massive enough to choke any normal spreadsheet!

Obviously all things cannot be reported or scheduled in detail in Celtx. While this is true, don’t put limitations in where they are not called for. I’m thinking Celtx should consider abandoning the RDF ”database” structure in favor of e.g. sqlite if they want to be able to create more elaborate and robustly generated reports and schedules, but that’s another story.

Aggressive Master Catalog auto updater
The Master Catalog captures characters quite aggressively. I’m willing to bet that most Celtx users have it filled with a number of characters called long strings of text like ”JASON HELLO MY NAME IS JASON. WHAT IS”. In fact, those are supposed to be a parenthetical or piece of a dialogue. Perhaps Celtx could introduce a second pass that occurs minutes later, to wash out those obvious non-characters? Or let us users enable the scan manually, when they think it’s OK to do so?

Limited reports
I think there should be better possibilities to make custom reports containing all or any of the Breakdown items. Oh, there is not even an export function for the default reports, like there is with the Master Catalog. One report type I’m missing in particular is ”Notes”, showing only the notes as: in the order they appear in the script, by each user, and by (reversed) chronological order.

Scheduling
Is best done in MS Project, MS Excel or similar alternative product. Celtx simply misses out on too many things when it comes to WBS and time schedule – try scheduling over night sessions, for instance. Hence the importance to add ALL details to the Master Catalog export file. But I do think this part has a lot of potential and I would rather not use e.g. MS Project.

Export Script – FDX
Let’s face it, FD is still the big colossal leader in the industry (citation needed). The Final Draft XML format is there to grab. Some producers or studios may require or wish for an FDX formatted copy, so why not provide it? Unlike the dinosaurs, having the ability to change and adapt is far more important to survive in the long run than being the number one for a limited time.

Import Script – SPMD
I’ve fallen in love with the Screenplay Markdown language. It’s so easy, it’s so portable. Now all I need from Celtx is a way to import SPMD according to it’s spec, rather than guessing (about 60% right, unscientifically guesstimated) via existing .txt import function.

Index Cards
The Index Cards-function in Celtx is limited to one scene heading per card. No more, no less. That’s all fine when writing a short outline or so, but not very useful once you are well into a full feature with hundreds of scene headers. Take a look at how MM does it. Or Fade In. I’m looking for ’meta cards’; Index cards that that span over an entire scene sequence; containing several scene headers. Then I want to shuffle. Oh, and I don’t want my cards to die when I happen to delete a scene header. Let it become grey instead. I think I recall reading that the present limit to 8 types of cards will be abandoned, which is good I one wishes to tag up an entire beatsheet, like the BS2 (Blake Snyder’s take on it) with e.g. 15 default beats.

And what about changing the view: from hierarchical, to timeline stream, to mindmap connections and so on?

Collaboration – Celtx Studio
Collaboration is a pain. A team of writers have to work sequentially, making sure only one writer at the time is ’checked in’ to the script, otherwise changes and updates may be lost. This severely hinders creativity and productivity. Google Docs currently provide the ultimate in real time writing collaboration, but I could settle with a concurrent version system like Git, Subversion et al. To that – a simple GUI that allows the user to accept or reject each change. I like the simplicity of MediaWiki history comparison, but it’s too crude. I need more granularity.

I’ve seen comments on the Celtx board saying that they are working on a major update of the Celtx Studio, hopefully released ’soon’ (November turned into December, still waiting). I sure hope this means a major improvement for the collaboration part. Me and my writing partner have spent a number of unnecessary hours to ensure all our contributions have synced and ended up in the latest version of the draft. If we were more people, I would probably not go for Celtx Studio as-is, but rather start out with Google Docs first.

Synchronizing with other devices – Celtx Script
Only some script types are supported, and only on some devices; the iDevices, that is. Non-Apple smartphones, pads etc. are not welcome, at least not yet. I regard this part as work in progress and have no reason to doubt that there eventually will be an Android and Windows Mobile versions too. I do miss the ability to read the in-line comments and I think it’s strange that the title page is not committed when printing/sending PDF via email while on the iDevice. On the Celtx forum I’ve seen a user posting a reader app for Android, so it can’t be far away.

No vivid development community
Browsing the development section of the Celtx.com forum it appears deserted. I’ve been reading their wiki and I’ve been seriously searching the Internet for more Celtx hacking/development sources. I’m not in awe. There is too little engagement from the Celtx team devs, they could put a little more effort into the dev section if they considered it important. On the other hand, there is not enough people from the community who share their findings. With just 20 minutes a day, commenting 1 or 2 posts, the Celtx crew could get far more attention from skilled developers – and less skilled developers who still may be useful and loyal to the community. Using open source is so much more productive and creative when there is an active community, I hope the Celtx team gets it.

Limited language support when Typesetting a PDF
I’m lucky to write in English and Swedish. It happens to be supported by the Celtx PDF typesetting webservice. I think they would save some bandwidth if they posted the source code and config/setup for this LaTeX-driven service, so that the community could help out in making Celtx a far more international success. I don’t understand the agenda to keep the webservice code closed, while it’s still free of charge? Well, conspiracy 1: perhaps they’d like to make it a premium service in the future, taking a small fee each time a users wishes to generate a PDF? That brings us to —

Pagination
It only seems to be 98% reliable, even when TypSet as PDF. The inline script pagination in the edit view is an estimation only, or rather, a guesstimation at best. Depending upon how the script is generated and developed, the deviation has been reported on the forum to exceed 50 percent! Wow. Perhaps yet another reason to bring the LaTeX service client side and/or open source, to make a quicker pagination update. Writers want to know how much they’ve done and what remains. The closer the deadline, the more important this feature becomes.

Unsupported tags and characters breaks Celtx
It’s too easy to introduce ’hidden’ tags (html/xml) and unsupported characters. Someone just has to write a story in MS Word or other common editor, then cut’n paste directly into Celtx. Problem occurs; file get’s corrupted, or will not sync to iDevice or some other strange symptom appears. The forum has too many of these symptoms appearing in user’s posts for several months, they should already have detected a root cause and start to address it. I don’t think it’s an easy task, but it’s definitely something the Celtx crew should address in an upcoming major release.

There, I’ve said it. And I’ve just used up some more valuable time I could have spent writing on a commercial success that could make me and my family economically independent for generations. I will very likely spend more time on tinkering with Celtx addons to resolve some of the annoyances above rather than writing scripts.

Perhaps I should just go for SPMD, once I’ve found a way to get it outputted as a proper PDF. Damn you Celtx! :-)

Celtx hacking

Pues, I wish I’ve found these pages sooner.

Making a fullscreen hack
http://www.locofilm.co.uk/blog/2011/celtxcss/
(may require to purchase the fullscreen add-on)

Production scheduling/reports extensions

Using My Celtx Mod to Production Notes / Generic.xhtml


(Look for more interesting Celtx-posts at Val’s site!)

I’m sure there’s more, but Google is not working hard for me on this one.

Understanding Celtx RDF/XML structure

I wanted to attempt improving the open source screenplay/pre-production software Celtx. It’s based on other open source components such as Firefox and built using XUL, e.g. a lot of XML, Javascript, HTML and CSS. Quite a simple and brilliant idea, making it interoperable and customizable for the handy hacker. But before I start making hacks I need to examine how Celtx works.

In a previous post I took a look at the translation of Celtx to other languages (in Swedish), but here are my findings on how Celtx v2.9.1 is working with the content rather than displayed language. I’m focusing on the screenplay perspective, which is most interesting to me.

I’m making the tedious effort to study output files instead of looking at the source code, but when you save a script in Celtx it ends up in a project file with the extension .celtx, e.g. MyMovie.celtx. It’s just a zipped file which contains all the data for a project in clear text, so it’s easy to examine. A project library can contain several types of media and data, at the moment Celtx defaults to seven kinds of templates:

  1. Film (Screenplay)
  2. Audio-Visual (Directors schedule?)
  3. Theatre (Stageplay)
  4.  Audio Play (BBC standard for radioplays/podcasts)
  5. Storyboard (based on index cards and images)
  6. Comic Book (comic stageplay)
  7. Novel (basic book writing).

The most important things, like the text of the script, are stored html text files, while the intelligence and meta data is stored in rdf/xml files.

Unzip/extracting a virgin MyMovie.celtx file gives:

  • local.rdf
    This file contains the ”master” resource definitions for the whole project.
  • project.rdf
    This file contains the meta data, the order of scenes, character info etc.
  • scratch-xeb.html
    This file contains a ”scratchpad” placeholder for ideas and information, which is related to the script but put in a separate structure as to not interfere with the original script.
  • script-xeb.html
    This file contains the actual/original screenplay script content, tagged with html.

If we add images/photos to the project they will appear next to the files above, as seen further down on this post.

Let’s have a look inside each file!

The local.rdf file
This file declares a Project Master ID (my wording), which all it’s containing rdf/xml files connect to, as well as telling what view was last open when we open Celtx. A project can contain a Novel, a Screenplay etc. This it’s all kept together logically in the local.rdf file.

It may look like this:

<?xml version="1.0"?>
<RDF:RDF xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:cx="http://celtx.com/NS/v1/"
         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
         xmlns:NC="http://home.netscape.com/NC-rdf#"
         xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <RDF:Seq RDF:about="rdf:#$3DD1u">
    <RDF:li RDF:resource="http://celtx.com/res/1kEqvojZWTHA"/>
    <RDF:li RDF:resource="http://celtx.com/res/vbHM8my1Pyk0"/>
  </RDF:Seq>
  <RDF:Description RDF:about="http://celtx.com/project/fly1RztQ01di">
    <cx:opentabs RDF:resource="rdf:#$3DD1u"/>
  </RDF:Description>
</RDF:RDF>

First we have the rdf/xml declaration, the usuals. The interesting parts are:
The ID’s of the contained content types/templates, in this case a Screenplay and it’s Master Catalog:

  <RDF:Seq RDF:about="rdf:#$3DD1u">
    <RDF:li RDF:resource="http://celtx.com/res/1kEqvojZWTHA"/>
    <RDF:li RDF:resource="http://celtx.com/res/vbHM8my1Pyk0"/>
  </RDF:Seq>

Where:
A Master Catalog is a view on tagged elements of a script, e.g. characters, sound effects, animals etc. and some meta data notes for each element (where applicable).
I’m guessing the Celtx Installation ID (my wording) is ”#$3DD1u”
The Screenplay ID is ”1kEqvojZWTHA”
The Master Catalog ID is ”vbHM8my1Pyk0”

The 12 character long strings are generated by Celtx and appears to be unique for each project file, while the Celtx Installation ID seems to stay fixed.

Then we have the declaration of what elements are open in the project, in this case the Master Catalog script:

  <RDF:Description RDF:about="http://celtx.com/project/fly1RztQ01di">
    <cx:opentabs RDF:resource="rdf:#$3DD1u"/>
  </RDF:Description>

Where the Master Project ID, again in lack of appropriate wording, is ”fly1RztQ01di”.

project.rdf
This file contains the brains and structure of e.g. a Screenplay script; the characters, the order of scenes, the meta data about characters etc. It does not contain the actual script contents, as they are stored in a separate html file.

The file is always initiated with an xml statement:
<?xml version="1.0"?>

This is followed by the master RDF declaration:
<RDF:RDF xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cx="http://celtx.com/NS/v1/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

At the bottom of the file we find this closing section:
<cx:Project RDF:about="http://celtx.com/project/fly1RztQ01di"
cx:fileVersion="1.4"
dc:title="testing"
dc:modified="2011-07-23T14:31:35Z">
<cx:components RDF:resource="http://celtx.com/res/U0xHoW9oCmfD"/>
</cx:Project>

Again we see a reference to the ”Master Project ID”: ”fly1RztQ01di”
EXPLORE: What is the cx:components ”U0xHoW9oCmfD”?

Between the initial and closing sections we find stuff more randomly ordered, or in reverse order? I guess it doesn’t really matter. Since most personal computers these days have a fair amount or RAM and CPU horsepower, and a screenplay script is just a couple of hundred pages (around 90-120 in case of Hollywood standard specs), it shouldn’t really matter from a performance perspective.

OK, moving on.

Scenes are stated like this:
<RDF:Description RDF:about="http://celtx.com/res/5r38m100"
cx:sceneid="7k38m100"
cx:location=" "
dc:title="INT. SCENE 2 - NIGHT"
cx:intext="INT"
cx:setting="SCENE 2"
cx:daynight="NIGHT"
cx:ordinal="2"
cx:sortord="0002">
<cx:members RDF:resource="rdf:#$E+uWw1"/>
<cx:markup RDF:resource="rdf:#$F+uWw1"/>
</RDF:Description>

Where the non-obvious are:

sceneid		A key linked to the content in the script-xeb.html file.
sortord		Tells us the scene number.
cx:members	(We'll figure this out later.)
cx:markup	(We'll figure this out later.)

Cast is marked up like this, here with a character called ”Daniel”:
<cx:Cast RDF:about="http://celtx.com/res/dF4dFMsdbEdt"
dc:title="DANIEL" />

The cast characters are detailed in the Master Catalog view. Opening this in Celtx and adding info, this section can look like this:
<cx:Cast RDF:about="http://celtx.com/res/dF4dFMsdbEdt"
dc:title="DANIEL"
cx:tags="DANIELTAG"
NS1:character-full-name="Daniel The Barbarian"
dc:description="This is Daniels description: He's a mean bastard."
NS1:character-age="36"
NS1:character-hair="Brown hair"
NS1:character-eyes="Green/brown"
NS1:character-height="184"
NS1:character-princ_func="protagonist"
NS1:character-goal="Daniel wants to understand Celtx and improve it. He'd like to see a screenplay of his turn into a full feature film some day, but enjoys hacking Celtx for the fun of it."
NS1:character-ach_goal="The character's way to achieve his goal is to study the source code, understand rdf/xml better and then attempt to write and publish some extended features."
NS1:character-fam_back="Daniel is the only son in an intercontinental family."
NS1:character-habits="Dives into stuff 110% for a period of time. Then dives into something else. Zooms in and out of stuff quickly."
NS1:character-education="While a BSc in Mechanical Engineering, he's mostly self made when it comes to IT."
NS1:character-person="A nice guy."
NS1:character-likes="Watching good flicks, hunting and learning how stuff works."
NS1:character-dislikes="He dislikes the limited number of hours per day."
NS1:character-traits="My character traits are treating me well."
NS1:character-dist_feat="I'm so normal and have no distinguished features!"
NS1:character-weight="about 90 kg's, in a showroom mirror.">
<cx:media RDF:resource="http://celtx.com/res/WDOkyiQ3kwhM"/>
</cx:Cast>

In the Master Catalog we can add images/photos of the character.
The cx:media resource is thus ”WDOkyiQ3kwhM”

Further down in the project.rdf we find:

  <cx:Image RDF:about="http://celtx.com/res/gZc7yg59RFIg"
                   cx:localFile="protagonist.gif"
                   dc:title="protagonist.gif" />

Other files
The image file protagonist.gif is stored in the root of the zipped .celtx file, next to the rdf files.

How does Celtx know that the image is contained related to the character, e.g. how does Celtx know what scenes this character is in? (as shown in Master Catalog)?

Ah! It adds a separate tag for this in the project.rdf file:
<RDF:Seq RDF:about="http://celtx.com/res/WDOkyiQ3kwhM">
<RDF:li RDF:resource="http://celtx.com/res/gZc7yg59RFIg"/>
</RDF:Seq>

See! WDOkyiQ3kwhM is the resource ID in the cx:Cast for the character ”Daniel”, and it contains a reference to an element gZc7yg59RFIg, which in turn states it’s an image with the file name protagonist.gif!

Now we are getting at it. The project.rdf file is a sort of database, containing connections between different resources; be it scenes, characters and their meta data. We can start to work out a structured schema of how things are put together based upon these connecting ID’s.

Once we have a complete view of the schema, it’s easy to build things that need the meta data and structure, for instance export a custom report to Excel/LibreOffice/OpenOffice/Google Docs Sheets. If we know the XML structure of Final Draft, we can build an ”Export/Import Final Draft screenplay”. While this may be useful, my intention is to build something basic first. And I don’t have Final Draft to explore it’s structure. I’ll give this some more thought and try to come up with a useful ”Hello World” case eventually.

Pitchfest med indexkort

Flera av mina vänner arbetar i film- och mediabranschen. Det inspirerade mig till att börja skriva korta noveller och pitchar på filmer. Vem vet, en dag blir de verklighet.

Eftersom jag är en amatör på området har jag börjat söka kunskap med stor energi. Så här långt har jag läst ett par bra böcker, inklusive Blake Snyders Save The Cat!-trilogi, men även böcker om Hollywood-standards för screenplays och spec scripts (vad dessa heter på svenska får jag ta reda på). På datorn har bekantat mig med det kommersiella men öppna källkodsprogrammet Celtx, som verkar OK för nybörjare och hemmasnickrare.

Om någon månad ska jag träffa ett par själsfränder och ha en manushelg. Vi ska pitcha för varandra och försöka ta några idéer till nästa fas, bara för att det är kul. Till en sån liten pitchfest tänker jag ta med mig indexkort, samt några tjocka tuschpennor och stora A2-sidor. ”Index cards” och ”The Board” är verktyg som nämns av de flesta konossörer, en metod för att arrangera och strukturera handlingen. Jag gjorde några fumliga försök att hitta ”indexkort” i svenska butiker men fann dem enklare på Amazon.co.uk.

En enkel och tydlig handledning för hur man ska jobba med indexkort finns på John August’s utmärkta blogg:

Keep it short. Maximum seven words per card.

A card represents a story point, be it a scene or a sequence. You don’t need a card for every little thing.

Keep cards general enough that they can be rearranged. (“Battle in swamp” rather than “Final showdown”)

Horizontal (a table or counter) often works better than a vertical (a corkboard).

Post-It notes make good alternative index cards.

Consider a letter code for which characters are featured in the sequence. Helpful for figuring out who’s missing.

Most movies can be summarized in less than 50 cards.

Cards are cheap. Don’t hesitate to rework them.

Consider a second color for action sequences. Helps show the pacing.

Write big. You want to be able to read them from a distance.

Jag ser verkligen fram emot vårt lilla äventyr, och jobbar på några utkast och idéer att ta med. Kanske kan en flaska absint bidra till kreativiteten.