October ProgBlog #1: potential end to the eternal note slog
posted on: Monday, 17 October 2022 @ 12:08pm inTitle I should be using if I cared about SEO: one way to use Obsidian to manage creative writing projects.
Apologies in advance, I accidentally upsized some of the images in this because I forgot an important character in the mogrify command, and I am too lazy to redo those screenies.
A “short” history
Once upon a time, I used to be a total pantser.
And then I started this project.
in 2003 I believeAnd continued to try to pants because that’s what I’d always done, until i realised that I actually needed to know everything that was going on.
And I do mean everything. My “history” outline (originally a 200+ page LibreOffice document) came about because I was trying to figure out why some characters were acting in a certain way (I knew it was a cultural thing, but I wanted to know why it was a cultural thing, and I found out exactly why it was a cultural thing a few centuries in the past of where I’m working, and also found many other characters along the way). And it got added to and continued because it was a very useful outline. Of absolutely everything.
The problem with this very useful outline was that I got smacked upside the head with how many massive plot chasms were everywhere (wait how did they get there? How did this one find this much stuff out in one day? Where did you come from?) and I hadn’t suspected their existence because I was too busy being cool.
Obviously I needed to make more notes!
Cue many LibreOffice documents and a folder structure that could rival the Labyrinth for ease of navigation.
it’s not actually that bad, I just question some of my decisions as I was looking for something specific earlier and past-me put it somewhere current-me wasn’t expecting, but that’s a rare occurrence, and also in a real bindctrl + F
or meta + space
is a thing
I had the history/outline/thing, reference notes (mostly worldbuilding with a smattering of how to do stuff in Lightwave/3d Coat/Blender), character profiles, ideas, scripts, and lots of drawings (mostly digital after I got my first tablet, some scanned from back in the day when I used to draw in sketchbooks and uni notebooks).
Hm. Maybe my friend was right and I needed something to organise it all better.
I reqspec’d my own project and writing software (what was recommended) wasn’t going to cut it. I wanted the timeline that had everything on it, and character profiles with a filtered timeline pertaining to only that character, and links to and from everything, and links to characters that character knew.
You know what, sounds like a job for a wiki, and guess who’s set up for webdev. Easy.
One Mediawiki instance later things were looking good til I realised that filtering the timeline per character profile was a horrible mess of transclusions (I just kept missing end tags with how it had to be done at the time).
Ergh.
Right, back to what I know then. The Drupal instance went much better for no other reason than I’m familiar with it, and while doing stuff was a lot more long-winded and unnecessarily complicated than in Mediawiki, it was at least quicker to data enter once set up.
Next major screeching roadblock. I was without my notes on Christmas Island because setting up a webserver on MacOS was more of a pain in the system than I remember it being. And even then, keeping them in sync was going to be nightmare. No I do not want to set this thing up on my server. I love Drupal but I need something with less friction.
New thing, jamstack, because I could basically compile it out to static pages. Spun up a vuejs/strapi conglomeration and most of what it did was remind me that I have an unreasonable and unrelenting hatred of javascript.
I do hate it less than Windows, but it’s still a pretty big hateAnd also apparently have to recompile the whole shebang because I changed a thing. I am much too lazy for that.
Mostly internal screaming.
Now what?
I have written previously about using Obsidian to organise my roleplaying notes (aside: it’s now floating all my games) and my life in general (the apps I was using previously were fine but apparently the pseudorganiser I cobbled together myself works better for my brain because?). I have also more recently written about how I’m “overloading” it by transferring the aforementioned notes and scripts into it.
I forgot to mention in that last progblog that originally had this screenie in it that I had to write some css to make the dual dialogue appear side by side:
div.dual-dialogue {
display: flex;
}
div.dual-dialogue .left,
div.dual-dialogue .right {
width: 50%;
}
I don’t know why it’s not in the plugin’s css file but no biggie.
The decision was mostly made because everything is md files. Text. Easy. I do have Obsidian on my laptop as well which makes that stupidly easy, but I don’t have it on my phone (well I do but it’s not working the way I want because all phone OSs suck, I just hate iOS at least an order of magnitude less than Android) but I can still access and read it on my phone with Nextcloud as long as I know where the thing I’m looking for is.
I’m still in the process of copypasting the timeline (because there’s a lot), but am now finally most of the way through, it should go pretty quickly from here on. My notes developed a lot in the last 2-3 weeks I’ve been crunching it. And not just because some got edited as they went.
This is my current not-script setup.
As you can see from the graph view in the lower right hand corner, I’ve added a few more things since the script workspace screenie.
I’m doing event creation/editing in the bottom left pane, character creation/editing in the top left pane, the timeline just sits in the top right pane. It usually has the entire right pane to itself but I split it for now as I’m doing miscellany in the bottom right pane, sometimes it’s editing a problem I picked up, most of the time it’s just linking characters together as I go through the timeline and work out who knows who.
This is the insanity I’ve been doing for most of the last couple of weeks while family has been visiting and also while I’ve been hardcore resting trying not to let a cold settle in (spoiler: partial fail, I blame being dragged to Karrinyup, the drive was stressful and the gigantic shopping centre not much better, but I did get a waffle).
The setup
Community plugins
- Advanced Tables (makes managing markdown tables much less agonising)
- Dangling Links (creates a pane that lists notes with links to notes that haven’t been created yet, useful for all those characters and notes that you are going to make “later”)
- Dataview (lets you basically use the vault like a database, it’s magical)
- Fountain (adds basic fountain support)
- Frontmatter Tag Suggest (adds tag autocomplete to frontmatter tags)
- Pane Relief (makes pane navigation much less of a headache)
- Tag Wrangler (makes tag management a hell of a lot easier)
- Templater (saves so much typing/repetitive copy/pasting)
Setting up templates
I currently have four templates set up and they are triggered when a note is created in a specific folder.
Obviously the templates are blank but in the examples I’ll be throwing there will be stuff in them because examples.
Timeline
This is where I’ve started with every instance of notes and the Obsidian version was no exception. It’s kind of the spine of the whole setup. The timeline is comprised of a bunch of events, so first thing needed is an event template. This triggers when a new note is created in the “events” folder.
The bit between the dashes is the frontmatter, and most of that is used for Dataview; the tags tell it which characters and locations involved for filtered timelines on location/character notes.
I have the date repeated in the body partly because the frontmatter is just numbers to make it order in the timeline, and I have a different calendar and month names so I write the date in the note body in the the “in-universe” way, and mostly because you can’t see the frontmatter in reading mode (which is the mode it will display in when you ctrl+hover a link). The location may contain a link to a specific location note or just be a line of text. After that is a description of the event itself if warranted (single line events just go straight in the title at this stage. though I may drop links in the bodies of those at some point because I like all my graph nodes to be connected).
The code for the main timeline is:
```dataview
table without id
year,
month,
day,
time,
file.link as event
from "events" or "media" and -#exclude
sort file.ctime asc
sort time asc
sort day asc
sort month asc
sort year asc
```
If you know how do to databases this is pretty straightforward. If you don’t, the breakdown is:
table without id
tells it I don’t want the file list column which usually appears first (because I want it as the last column).
The indented bits immediately afterwards tells it that I want those columns in the order listed. The file.link as event
one is actually the “id” thing I excluded, renamed to “event”.
from “events” or “media” and -#exclude
Only list stuff from the “events” and “media” folders, and if anything out of there has the “exclude” tag then exclude it. Without this line, it will list everything in the entire vault.
The sorts tell it to sort by the frontmatter fields in ascending order.
Locations
The location notes are nice and easy at the moment, the only thing in their template (triggered whenever a note is created in the “locations” folder) is the timeline codeblock from above, except the from line reads from #location/where
(“where” gets replaced with the actual location). This filters for events that happened that that location.
At the top I add text descriptions and images/maps (this screenie is an older one, I’ve since added more fields for location and livery).
Characters
The character template (oddly, triggered when notes are added to the “characters” folder, whodathunkit) on the other hand has a bit going on. I have a bunch of labels in there that summarises the character as well as space in the top for a portrait whenever I get around to it.
I decided to make a lot of things tags so I can dataview them down the line if I felt like it.
Mechanically aliases are so you can quickly and easily link to the note with a keyword you’re commonly going to use by something other than the note title, but I also just jam in their full names (where applicable as Tribe tend to be mononymous) and any pseudonyms they might be using (which also actually helps in events and when linking characters together as not all the characters know each other’s birth or legal names).
Example below (which is a completely different character from the one above and also shows the “Relationships” section which immediately follows the “Extra” section):
The character timeline is pretty much the same timeline codeblock again, with the from line reading from #character/character and "events"
(the second “character” obviously being replaced with the actual tag).
I had slightly more fun doing the gallery.
I really wanted masonry but whatever Obsidian is built on can’t cope with the grid-template-rows: masonry
css property and because I’m the only one that’s going to see the notes (aside from when I do stuff like this and share screenies or show someone else for whatever reason) I am putting up with ugly floats because they’re easy and close enough for now.
The gallery is two separate codeblocks. The first one is similar but different to the timeline codeblocks:
```dataview
list
embed(link(media))
from #character/character and "media" and -#exclude
sort time asc
sort day asc
sort month asc
sort year asc
```
and the second one is a similar but different again
```dataview
list
embed(link(media))
from #character/character and "media" and #exclude
sort created desc
```
The two codeblocks are directly after each other without a carriage return separator to give a vague illusion of being one thing. The reason there’s two is because I dated the ones that fit on the timeline (scenes that I’d made specifically) and wanted them to appear from earliest to latest like the timeline, whereas the “excluded” stuff (the keyword is to exclude them from the timeline) was generally concept art and test renders and I wanted the more recent stuff up the top.
The first line (that just says list
) tells it we want it as an unordered list rather than as a table.
embed(link(media))
was a fun thing I found in the Dataview docs when trying to figure out how to get the gallery thing happening. This doesn’t do quite what I want (the thumbnail as the link, which I think it’s what it’s supposed to do but does not) but is close enough (I get the thumbnail image and have to click the link title).
The required metadata is in the media template (guess which folder triggers it).
The “created” field is just the file create date according to my computer’s file manager (or sometimes the “modified” date for some of the older files because something screwy happened somewhere along the line and some of them have older modified dates than created dates which are different again from the “true” created dates in the exif).
Then it needs a css override (they live in {vault}/.obsidian/snippets
where vault is the name of your vault and the obsidian directory is hidden, note the leading dot) which looks like
.character ul {
list-style-type: none;
}
.character ul li {
float: left;
margin: 0;
max-width: 300px;
padding: 0.25rem 0.5rem;
}
and is turned on in the “Appearance” tab in Obsidian settings.
I think this one will stick.
A tad more history and forward planning
When I started this project 20 years ago, the story that I’m currently working on was going to be a comic series.
As I continued developing it, I decided to go the motion comic route because there are fun things I can do that can’t be done with traditional comic format (whether print or digital) or straight up animation.
It did eventually progress to just being an animation series because I just really, really like animating.
Now the problem with a full blown animation series (aside from the obvious of a lot of work) is that I know literally nothing about sound stuff so I would need to be pulling other people to help with that and also obviously voice actors. I know a couple of people I can ask about both those things who may also know other people who know about those things.
Additionally there is severe anxiety around working with other peopleSo because time is a thing and there is the added pressure of needing to “do well” if I’m going to be involving other people, and after discussing with sibling dearest, I decided I should probably drop back to doing the motion comic.
Literally the only downside of this is that I so very desperately want it to be an animation series.
Maybe eventually? :S
This work by ryivhnn is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License