StoryMate: Where you inform the Roadmap!

Sorry I couldn’t resist the title. My wife and I are playing Game Books at night for fun and this type of banter is gloriously on the tip of my tongue. As an adult you can smash at least one Choose Your Own Adventure per evening. Anyhow…

As the title somewhat insinuates, I’d appreciate some advice on what to develop next in StoryMate. We have some thoughts.

  • An interface for adding conditional logic to passages?
  • The ability to export stories in EPUB?
  • A place within our ecosystem to save your stories and share them with others?

We’re currently building the ability to export your story as HTML because this opens up the ability to save your story online or embed it elsewhere. We’re just deciding how to save the markup and things like file and folder structure at the moment.

If you have thoughts on any of the above I’d love to hear it :pray:


*our thinking for conditional passages

4 Likes

A place for sharing content: We already have IFDB and github.

Exporting to Epub: Only makes sense to me if the Epub file is a gamebook/CYOA. If it is about transcripts from playing imho it makes no sense.

Conditional logic: If I were using StoryMate I would expect such a feature. Because opening up exits after some stuff accomplished is very important.

3 Likes

Excellent feedback. Thanks Peter.

Exporting to Epub: Yes I’m thinking gamebook (since its what I want)

Conditional login: excellent, great to know :pray:

1 Like

I just experimented with StoryMate. It quickly writes stories based upon your brief ideas.

I had heard that author’s days were numbered. Sadly, I’m almost a believer.

All of these are just suggestions. Feel free to use or reject them as you wish.

  • ability to use AI to add to existing text instead of restarting it (e.g. given the start text, say “add information about the protagonist” and it will do so without deleting what’s already there)
  • UI: have the “use this response” be the main button, instead of “regenerate”. It’s a lot easier to regenerate the text after accidentally picking the response than wanting to use the text but having it disappear forever.
  • more prominent “new” button, or an ability to (e.g.) double-click anywhere to create a new node.
  • a drag-and-drop way to add arrows between nodes (there’s the downwards arrow but that’s less intuitive)
  • fullscreen button in text edit mode doesn’t do anything?
  • if you use AI to make the choices, there’s now two choice “menus”: the text one generated by AI (doesn’t do anything), and the hyperlinks connected to the nodes. See below
  • have choices be a separate AI generation or automatically create nodes for the new choices
  • if your conditional image is a mockup, I like the yes/no boolean more than the toggle. It allows for more options in the future with more complicated conditionals that could have more than two outcomes.
1 Like

Thanks for your feedback. We’ll have to watch this space. I believe in writing and in AI helping out. That’s my ideal.

The last couple of years have been the HARDEST in my life creatively. Thanks to COVID and burnout I’m not myself. So I’m incredibly grateful for AI as I’m managing to write briefs and short emails and all kinds of things and have ChatGPT help along the way. In that way I think its going to be a collaboration. At least I hope so :pray:

1 Like

Thanks! Some of these AI improvements / addons I’ve thought about myself. We have put some things on hold while we get one thing out at a time.

The general user improvements etc though - 100%.

Thanks for your input.

1 Like

I must admit that AI/procedural generation can be useful and actually is not new. But I’m a bit annoyed that “everybody” comes up with AI now. But StoryMate seems to offer human authorship and (only if the author wants) some help from the AI. Sounds like a winning team!

Only drawback: It’s web only or mobile only. Which means that it doesn’t work on my old Android phone. Haven’t tested it on Desktop PC yet.

2 Likes

Update: Works perfectly on my Desktop PC. It seems to be rudimentary yet. But looks good and is easy to understand. (I haven’t tested the AI.)

2 Likes

Yes very. Also, could it export in some kind of text format? eg xml, json? I always want to save my work somewere in case it all goes horribly wrong and i need to revert. So, it would also need to import this text format back again as well.

2 Likes

We have a staging version now where you can save the JSON and export HTML. Let me know if you want to have a play or just want to wait for the next update and I’ll do a post about it.

2 Likes

I’ll wait for the next update. Great to hear this is a forthcoming feature!

2 Likes

We’ve released another update (Beta Three (1.0.0-beta.3). The feature is there now. You can Download HTML and Export the JSON from the File menu.

Hopefully that works for you and I’m looking forward to knowing what you think.

2 Likes

This is excellent fun. I really like the import/export. Sometimes it’s easier to edit the exported json then re-import it.

So, I had hopes on the HTML export. But it didn’t work properly. Here’s my game,

{
  "title": "Attack of the Moose",
  "author": "Kipper",
  "nodesData": [
    {
      "id": 1,
      "title": "Start",
      "text": "Ranger Joe, a humorous and resourceful park ranger, has a rogue moose on his hands. The sprawling National Park he protects is in chaos, and it's up to him to restore peace. Will he outwit the clever moose or fall to distraction by other critters? The journey awaits.",
      "prompt": "the moose is loose",
      "position": {
        "x": 2230,
        "y": 26
      },
      "parentIds": [
        6,
        7,
        11,
        13
      ],
      "childrenIds": [
        2,
        3
      ],
      "choicesText": [
        {
          "id": 2,
          "choiceText": "Go looking"
        },
        {
          "id": 2,
          "choiceText": "Get help"
        }
      ],
      "imagePrompt": "moose excaping",
      "imageURL": ""
    },
    {
      "id": 2,
      "title": "Trail",
      "text": "Joe sets out on the trail, armed with his wits and a tranquilizer gun. He meets a crossroads: should he follow the moose's tracks or investigate a strange noise coming from the bushes?",
      "prompt": "",
      "position": {
        "x": 2072.6666870117188,
        "y": 177
      },
      "parentIds": [
        1
      ],
      "childrenIds": [
        6,
        7
      ],
      "choicesText": [
        {
          "id": 6,
          "choiceText": "Follow Tracks"
        },
        {
          "id": 7,
          "choiceText": "Investigate"
        }
      ],
      "imagePrompt": "",
      "imageURL": ""
    },
    {
      "id": 3,
      "title": "Experts",
      "text": "Ranger Joe grabs his hat, and goes to find help. Time to call in the experts.",
      "prompt": "",
      "position": {
        "x": 2450.6666259765625,
        "y": 189.66668701171875
      },
      "parentIds": [
        1,
        8
      ],
      "childrenIds": [
        4,
        5
      ],
      "choicesText": [
        {
          "id": 4,
          "choiceText": "Talk to Flint"
        },
        {
          "id": 5,
          "choiceText": "Talk to Sam"
        }
      ],
      "imagePrompt": "",
      "imageURL": ""
    },
    {
      "id": 4,
      "title": "Flint",
      "text": "Joe finds Flint, an old, grizzled ranger known for his moose tracking skills. Flint's a grumpy old codger, but maybe you can persuade him.",
      "prompt": "",
      "position": {
        "x": 2389.6666259765625,
        "y": 348.66668701171875
      },
      "parentIds": [
        3
      ],
      "childrenIds": [
        9,
        5
      ],
      "choicesText": [
        {
          "id": 9,
          "choiceText": "Persuade Flint"
        },
        {
          "id": 5,
          "choiceText": "Try Sam"
        }
      ],
      "imagePrompt": "Grizzled old ranger\n",
      "imageURL": ""
    },
    {
      "id": 5,
      "title": "Sam",
      "text": "Joe approaches Sam, the local vet, known for her moose expertise. Sam says she'd love to help, but first she has to feed some puppies. And can she have $200. After all, she is a vet!",
      "prompt": "",
      "position": {
        "x": 2530.6666259765625,
        "y": 349.66668701171875
      },
      "parentIds": [
        3,
        4,
        4
      ],
      "childrenIds": [
        8
      ],
      "choicesText": [
        {
          "id": 8,
          "choiceText": "No money"
        }
      ],
      "imagePrompt": "portrait of attractive female vet, good with animals",
      "imageURL": ""
    },
    {
      "id": 6,
      "title": "Untitled",
      "text": "Following the tracks, Joe stumbles upon a newly wrecked village. Unfortuately the now homeless villager aren't impressed. Angrily the blame Joe. They chop him into bits. Sorry, you lose.",
      "prompt": "",
      "position": {
        "x": 2010.6666870117188,
        "y": 338
      },
      "parentIds": [
        2
      ],
      "childrenIds": [
        1
      ],
      "choicesText": [
        {
          "id": 1,
          "choiceText": "Start"
        }
      ],
      "imagePrompt": "",
      "imageURL": ""
    },
    {
      "id": 7,
      "title": "Untitled (2)",
      "text": "Joe steps into the bushes and is eaten by a Lion. Too bad You've lost.",
      "prompt": "",
      "position": {
        "x": 2152.6666870117188,
        "y": 337
      },
      "parentIds": [
        2
      ],
      "childrenIds": [
        1
      ],
      "choicesText": [
        {
          "id": 1,
          "choiceText": "Start"
        }
      ],
      "imagePrompt": "",
      "imageURL": ""
    },
    {
      "id": 8,
      "title": "Untitled (3)",
      "text": "Unfortunately you don't have any money. Maybe later.",
      "prompt": "",
      "position": {
        "x": 2590.6666259765625,
        "y": 521.6666870117188
      },
      "parentIds": [
        5
      ],
      "childrenIds": [
        3
      ],
      "choicesText": [
        {
          "id": 3,
          "choiceText": "Think again"
        }
      ],
      "imagePrompt": "",
      "imageURL": ""
    },
    {
      "id": 9,
      "title": "Untitled (4)",
      "text": "After a lot of talk and several whiskeys, Flint agrees to help. But on one condition; he gets to wear the antlers.",
      "prompt": "",
      "position": {
        "x": 2332.6666870117188,
        "y": 511
      },
      "parentIds": [
        4
      ],
      "childrenIds": [
        10,
        11
      ],
      "choicesText": [
        {
          "id": 10,
          "choiceText": "Agree"
        },
        {
          "id": 11,
          "choiceText": "No deal"
        }
      ],
      "imagePrompt": "",
      "imageURL": ""
    },
    {
      "id": 10,
      "title": "Untitled (5)",
      "text": "Joe and Flint set off into the forest. Flint find some tracks and you both follow deep into the undergrowth.",
      "prompt": "",
      "position": {
        "x": 2270,
        "y": 670
      },
      "parentIds": [
        9
      ],
      "childrenIds": [
        12
      ],
      "choicesText": [
        {
          "id": 12,
          "choiceText": "Keep going"
        }
      ],
      "imagePrompt": "",
      "imageURL": ""
    },
    {
      "id": 11,
      "title": "Untitled (6)",
      "text": "Flint shoots you with his moose rifle. Ostensibly for drinking his whiskey and being a timewaster. You're dead.",
      "prompt": "",
      "position": {
        "x": 2412.6666870117188,
        "y": 671
      },
      "parentIds": [
        9
      ],
      "childrenIds": [
        1
      ],
      "choicesText": [
        {
          "id": 1,
          "choiceText": "Start"
        }
      ],
      "imagePrompt": "",
      "imageURL": ""
    },
    {
      "id": 12,
      "title": "Untitled (7)",
      "text": "After what seems like hours, you realise it has been hours! Maybe Flint is lost? You argue with Flint. He's cantankerous but insists he knows what he's doing.",
      "prompt": "",
      "position": {
        "x": 2210,
        "y": 830
      },
      "parentIds": [
        10
      ],
      "childrenIds": [
        13,
        14
      ],
      "choicesText": [
        {
          "id": 13,
          "choiceText": "Take the lead"
        },
        {
          "id": 14,
          "choiceText": "Trust Flint"
        }
      ],
      "imagePrompt": "",
      "imageURL": ""
    },
    {
      "id": 13,
      "title": "Untitled (8)",
      "text": "You tell Flint, you've had enough and he's following you from now on.\nUnforuntately, you round the next corner and fall off a cliff.\nYou're dead.",
      "prompt": "",
      "position": {
        "x": 2150,
        "y": 989
      },
      "parentIds": [
        12
      ],
      "childrenIds": [
        1
      ],
      "choicesText": [
        {
          "id": 1,
          "choiceText": "Start"
        }
      ],
      "imagePrompt": "",
      "imageURL": ""
    },
    {
      "id": 14,
      "title": "Untitled (9)",
      "text": "Reluctantly, you trust Flint. He leads you further into the forest. But then, to your astonishment, you encounter a clearing in which the moose is quietly standing.\nWell done you've found the moose.",
      "prompt": "",
      "position": {
        "x": 2290,
        "y": 989
      },
      "parentIds": [
        12
      ],
      "childrenIds": [],
      "choicesText": [],
      "imagePrompt": "",
      "imageURL": ""
    }
  ],
  "storyImages": [
    {
      "nodeId": 1,
      "base64Data": "https://test-ai-writing.s3.ap-southeast-2.amazonaws.com/images/1708469432169_gzfuhr89.png"
    },
    {
      "nodeId": 4,
      "base64Data": "https://test-ai-writing.s3.ap-southeast-2.amazonaws.com/images/1708469820400_6pixv1yy.png"
    },
    {
      "nodeId": 5,
      "base64Data": "https://test-ai-writing.s3.ap-southeast-2.amazonaws.com/images/1708469946246_f66x6fbp.png"
    }
  ],
  "styleData": {
    "titleFont": "Fredoka",
    "titleFontSize": 22,
    "titleFontColor": "#ffffff",
    "textFont": "Fredoka",
    "textFontSize": 17,
    "textFontColor": "#ffffff",
    "backgroundColor": "#333740",
    "isFullWidth": false
  }
}

It plays when imported, but after export some of the choices go to the wrong node.

Good stuff tho’.

1 Like

Is that just in the HTML version when you load it and play it in your browser locally?

Update: Wait, sorry I see what you’re saying. Exported StoryMate HTML doesnt recognise the changes you made in the JSON.

I was actually thinking we should make an edit JSON button which would essentially be a full screen JSON / text editor. Would that be handy?

Edit Json feature:

Tempting, but the sort of people who will export the JSON and mess with it are also the people who already have json editors and so on. So, while a great idea, this shouldn’t be a priority.

Instead, I’m finding working in the web visual editor gets cramped after a while. As you get more nodes it gets harder to organise because you can’t resize the edit window (or can you). Going full screen doesn’t give you more space either.

I know you can zoom, but it would be much easier to work on a physically larger canvas after a while.

One other suggestion:

Generate image lets you supply a prompt, but generate text does not. It would be nice if you could type something into the edit window which it will then take as a text generation prompt when you switch on “use AI assistant”.

I really like this system, but pretty soon you’re going to need some sort of scripting. I see there’s a forthcoming “variables” feature. So I’m wondering how that will work. For example are you going to use an existing script system or something totally new?

1 Like

The JSON version plays in the StoryMate Website, but when I export to HTML, the game does not play correctly locally. the choices jump to the wrong node. Could this be some node ID mixup or duplicate node name issue?

1 Like

I agree. This sort of thing:

3 Likes

A variables feature is coming and is almost ready to share :slight_smile:

Not sure if we’ll add a coding feature or not. It would depend on whether there is demand for it. I tend to think once you’ve got variables working you’ve got a fairly decent engagement loop to work with and entertain readers.

1 Like