Skip to content

works-on-your-machine/conjure

Repository files navigation

Conjure

Conjure is a Rails app for building visual presentation decks with AI. You define a visual world, write slide prompts, generate multiple image variations per slide, pick finalists, refine them, and export the finished deck.

It is a standard Rails 8 app with SQLite, Hotwire, Tailwind, Solid Queue, Solid Cable, and Active Storage. No Redis is required for local development.

Requirements

  • Ruby: tested here with ruby 4.0.1
  • Bundler
  • SQLite3
  • A Gemini API key for image generation
  • Optionally, a Gemini API key for text generation

The repo now pins Ruby 4.0.1 in .ruby-version, and this README was verified against that version.

Quick Start

git clone <your-fork-or-this-repo-url>
cd conjure
bin/setup --skip-server
bin/dev

Then open http://localhost:1618.

Notes:

  • bin/setup installs gems, generates config/active_record_encryption.key, prepares the database, and clears logs/tmp files.
  • Plain bin/setup will start the dev stack for you at the end. --skip-server is useful if you want the explicit two-step flow above.
  • Always use bin/dev, not rails s. It starts three processes via foreman: the Rails server, the Tailwind watcher, and the Solid Queue job worker. Running rails s alone means background jobs (image generation) won't process and Turbo Stream updates won't arrive — generated images will appear broken until you refresh.
  • If foreman is missing, bin/dev installs it automatically.

First-Run Configuration

On first boot, Conjure redirects you to Settings until an image-generation key is configured.

Use these fields:

Setting field Required Used for Notes
Nano Banana 2 API key Yes Gemini image generation This is the key the app requires before you can use the rest of the UI.
LLM API key No, but recommended Gemini text generation Used for outline-to-slides and prompt assembly.

Important details:

  • The image-generation path uses Gemini image generation (gemini-3.1-flash-image-preview).
  • The text-generation path currently also calls Gemini (gemini-3-flash-preview).
  • If your Gemini key has access to both image and text models, you can use the same key in both fields.
  • If you leave the LLM key blank, the app still works, but it falls back to simpler behavior:
    • outline generation degrades to splitting lines into slides
    • prompt assembly degrades to concatenating the grimoire and slide text

API keys are stored in the app database using Active Record Encryption. The local encryption key file at config/active_record_encryption.key is generated by bin/setup and is gitignored.

Optional Demo Data

To load sample grimoires and a sample project:

bin/rails db:seed

How To Use The App

  1. Open Settings and add your API keys.
  2. Open Grimoire library and create or edit a grimoire. A grimoire is the visual theme for a deck.
  3. Create a Project and choose a grimoire.
  4. In Incantations, add slides manually or use Generate from outline.
  5. Click Conjure in the project sidebar and choose how many variations per slide you want.
  6. In Visions, review generated images and select one winner per slide.
  7. In Final cut, refine selected slides if needed and export the deck.

Exports

Conjure currently supports:

  • Export to Figma: downloads a ZIP of selected slide PNGs
  • Export PDF: downloads a PDF of selected slides
  • Export project: downloads a ZIP with grimoire text, slide text, prompts, metadata, and generated images

Export PDF is only fully useful once every slide has a selected vision.

Helpful Commands

# initial setup without starting the dev server
bin/setup --skip-server

# start the local app
bin/dev

# reset the local database during setup
bin/setup --reset --skip-server

# load sample data
bin/rails db:seed

# run the test suite
bundle exec rspec

Troubleshooting

“Conjure needs to be set up first!”

Run:

bin/setup --skip-server

That generates the local encryption key file the app needs in order to store encrypted API keys.

bin/dev says a server is already running

Remove the stale PID file and start again:

rm -f tmp/pids/server.pid
bin/dev

The app loads, but generation features are weak or missing

  • Make sure the image key is set in Settings
  • Add the optional LLM key if you want better outline parsing and prompt assembly
  • Keep in mind that total image calls scale with slides × variations

Development Notes

  • Local databases and uploaded/generated files live under storage/
  • Generated images are stored with Active Storage
  • Background jobs run through Solid Queue
  • Real-time generation updates are pushed with Turbo Streams

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors