diff --git a/ventures/havre/favicon.svg b/ventures/havre/favicon.svg index c750feb..9796000 100644 --- a/ventures/havre/favicon.svg +++ b/ventures/havre/favicon.svg @@ -1,6 +1 @@ - - - - - - + diff --git a/ventures/havre/index.html b/ventures/havre/index.html index 099bcc8..bddd07f 100644 --- a/ventures/havre/index.html +++ b/ventures/havre/index.html @@ -3,284 +3,280 @@ - + Havre - + - + - + - -
- havre -

A harbor for characters

- - Get early access + + +
+

HAVRE

+

a harbor for characters.
talk to venice characters on your own key.
no account. no server. nothing kept but what you keep.

+
-
-
- +
+ + + + + + + sent to api.venice.ai and nowhere else. get a key +
- + +

+
    +

    (v1, v2, v3, json or png) /

    +
    -
    -
    - -
    -

    Havre

    -

    -

    -
    -
    - - -
    -
    -
    -

    Demo mode: replies come from the card's own examples. to really talk.

    +
    +
    +

    CHAT

    + +
    +
      - - - +
      + + + +
      +
      - -
      -
      - - - -
      - -
      -
      -
      - -
      - - - -
      -
      - - - - - - - -
      - Flow optional stages for meeting someone new -
        - -
        -
        - Examples teach the voice; demo mode replies with these -
          - -
          - -
          - - -
          - -
          -

          Lineage

          -
            -

            Where this character came from. Entries are only ever added.

            -
            - -
            -
            - - - - -
            -
            - -
            -
            -

            Every character needs a harbor

            -

            Characters live inside apps, and apps come and go. Havre keeps a character as a file you own, gives it a place to talk, and writes down where it came from.

            -

            The name is a small salute. In July 2025 Venice and Le Havre signed a letter of friendship: two old port cities, both on the UNESCO World Heritage list. Havre means harbor. Our characters make the crossing.

            -

            Havre talks to Venice's API with your own key. It is an independent project, not part of Venice and not endorsed by it.

            -
            -
            - A small yellow sailboat crossing to Havre at dusk, Venice behind it: Maren waving from the stern, Odile with a mug of tea, and Taskmaster holding up a stopwatch and pointing at the lighthouse on the harbor wall. -
            -
            -
            - -
            -

            How it works

            -
              -
            • Keep

              Every character is a card file: Havre JSON, or a character card (V2 or V3, JSON or PNG) that SillyTavern, RisuAI and other card apps can read. It lives in your browser until you export it. Nothing is uploaded.

            • -
            • Talk

              Add your Venice key and talk for real; without one, characters answer from their own examples. Replies arrive as short texts, and a character can follow a flow, like Taskmaster's assess, plan, execute.

            • -
            • Remix with credit

              Love a character you didn't make? Havre reads it and writes down only the ideas. A second pass that never sees the original writes someone new. Havre checks the new words against the old and keeps the credit in the card's lineage.

            • -
            -
            - -
            -

            Use it with your agent

            -

            Copy this prompt into any agent. It reads the skill, writes the character, and hands back the files.

            -
            
            -    
            Change the second line to who you want.
            -

            What comes back

            -
              -
            • A Havre cardOne .havre.json file: persona, voice, flow, examples and lineage. Drop it on Import.
            • -
            • A character card V3The same character for SillyTavern, RisuAI and other card apps.
            • -
            • A system promptPlain text for any OpenAI-compatible API, Venice's included.
            • -
            -

            The files: skill.md (how to write a Havre character), card.schema.json (the format), Maren, Taskmaster and Odile (the first arrivals), llms.txt (this list, for agents).

            -
            - -
            -

            Plans

            -
              -
            • Studio

              Free, today

              Everything on this page, in your browser: as many characters as you like, import and export, remix with credit. You bring a Venice key and pay Venice for what you use.

            • -
            • Harbor

              Planned at $8 a month for founding members. Nothing is charged now.

              Characters hosted with a page and a link of their own. An API and an MCP server to create, update and talk to them. Channels beyond the web, starting with Whop. Offers inside a character's flow, and payouts to creators.

              - Join early access -

              Early access is a public issue on Teahub: no email, nothing charged.

            • -
            -
            - -
            -

            The fine print

            -
            -
            Your characters, your files
            Characters and conversations are saved in this browser. Export them to keep them anywhere else.
            -
            Your key goes only to Venice
            The key stays in this browser and is sent only to api.venice.ai: the page's security policy blocks every other address. Conversations run on your Venice account, under Venice's terms.
            -
            Bringing over someone else's character
            Names and broad ideas aren't protected by copyright; a character's written expression can be. So a Venice character comes in as a link with credit, not a copy, and Remix writes someone new from ideas alone. When in doubt, ask the creator. This isn't legal advice.
            -
            Not affiliated
            Havre is independent. It is not part of Venice.ai and isn't endorsed by Venice; it uses Venice's public API, with your key.
            -
            Safe for work
            Havre only lists Venice characters that aren't marked adult.
            -
            -
            - -
            -

            Coming next

            -
              -
            • A hosted harbor: every character gets a public page and a link to share.
            • -
            • An API and an MCP server, so agents can create, update and talk to characters without a browser.
            • -
            • Flows that can make an offer: a checkout link from the creator's Whop, and payouts to creators.
            • -
            • Channels: Whop apps first, then iMessage.
            • -
            • Crews: characters with helpers of their own.
            • -
            • A lineage tree for every remix.
            • -
            -
            - +
            +
            +

            YOUR HARBOR

            + kept in this browser. export a file to keep a character anywhere else. +
            +
            + + + +
            NAMEFROMLICENSEFILE
            +
            +

            nothing here yet. pick one of venice's characters, import a card, or write one.

            +
            - -
            -

            Your Venice key

            -

            Characters talk through Venice's API on your own account. Make a key at venice.ai → Settings → API.

            - - - -

            The key stays in this browser and goes only to api.venice.ai; this page's security policy blocks every other address. Without "remember", it's gone when you close the tab.

            -

            -
            - - - +
            +
            +

            CARD

            + the character as a file: edit it, remix it, export it. +
            +

            no character yet. the card shows up here once someone is in your harbor.

            +
            +
            + + + +
            + +
            + +
            +
            + +

            /

            + +
            + + + + + +
            +
            + + +
            + FLOW optional stages for meeting someone new +
              + +
              +
              + EXAMPLES they teach the voice; without a key, replies come from these +
                + +
                + +
                + + +
                + +
                +

                LINEAGE

                +
                  +

                  where this character came from. entries are only ever added.

                  +
                  + +
                  + +
                  + +
                  + + + + + + +
                  +

                  HOW IT WORKS

                  +
                  +
                    +
                  1. Paste your Venice API key. It stays in this browser, and the page can reach api.venice.ai and nothing else.
                  2. +
                  3. Pick a character: one of Venice's, a card file you import, or one you write. Venice's characters say hello first.
                  4. +
                  5. Talk. Replies come as a few short texts. Without a key, the characters you write answer from their own examples.
                  6. +
                  7. Keep them. Export a character as a file, or remix them into someone new; the credit stays in the card.
                  8. +
                  +
                  +
                  + +
                  +

                  FOR AGENTS

                  +
                  +

                  Copy this into any agent. It reads the skill, writes the character, and hands back the files. Change the second line to who you want.

                  +
                  
                  +    

                  files: skill.md / card.schema.json / card.js / venice.js / llms.txt

                  +

                  What comes back: a Havre card (.havre.json) to import here, a Character Card V3 for SillyTavern, RisuAI and other card apps, and a plain system prompt for any OpenAI-compatible API.

                  +
                  +
                  + +
                  +

                  COSTS

                  +
                  +

                  You pay Venice directly, for what you use. Havre adds nothing. Rough prices, October 2026:

                  + + + + + + +
                  a chat turn$0.0007 to $0.005, by model (3,000 tokens in, 150 out)
                  a hello from a venice characterone chat turn
                  a remixtwo short calls; five more for a venice character
                  +

                  each card's model list shows venice's price per million tokens.

                  +
                  +
                  + +
                  +

                  PLANS

                  +
                  +

                  Studio, free. Everything on this page, in your browser: as many characters as you like, import and export, remix with credit.

                  +

                  Harbor, planned at $8 a month for founding members. Hosted character pages with a link of their own, an API and an MCP server, channels starting with Whop, and payouts to creators. Nothing is charged now. Join early access.

                  +

                  early access is a public issue on teahub: no email, nothing charged.

                  +
                  +
                  + +
                  +

                  COMING NEXT

                  +
                  +
                    +
                  • Photos: a character sends a picture of themselves, made from their card photo, with the price on it.
                  • +
                  • Voice notes: a voice for each character, with the words under it.
                  • +
                  • Hearing you and seeing your photos, if you switch them on.
                  • +
                  • Scenes: two characters take turns from your opening line.
                  • +
                  • A hosted harbor: a page and a link for every character, and an API and an MCP server.
                  • +
                  +
                  +
                  + +
                  +

                  FINE PRINT

                  +
                  +

                  Characters and conversations are saved in this browser. Export them to keep them anywhere else.

                  +

                  Your key stays in this browser and goes only to api.venice.ai; the page's security policy blocks every other address. Conversations run on your Venice account, under Venice's terms.

                  +

                  Safe for work only: Havre lists only Venice characters that aren't marked adult.

                  +

                  Someone else's character comes in as a link with credit, not a copy, and Remix writes someone new from ideas alone. Names and broad ideas aren't protected by copyright; a character's written expression can be. When in doubt, ask the creator. This isn't legal advice.

                  +

                  Havre is independent. It isn't part of Venice.ai and isn't endorsed by Venice.

                  +
                  +
                  + +
                  +

                  THE NAME

                  +
                  +

                  Havre means harbor. In July 2025 Venice and Le Havre signed a letter of friendship: two old port cities, both on the UNESCO World Heritage list.

                  +
                  +
                  + +
                  -

                  Bring a character in

                  -
                  - Drop a card hereHavre JSON, or a character card V1, V2 or V3 (JSON or PNG) - or press to choose a file +

                  IMPORT A CARD

                  +
                  +
                  + DROP A CARD HEREHavre JSON, or a character card V1, V2 or V3 (JSON or PNG) + or press to choose a file +
                  + + +

                  +

                  - - -

                  -
                  - - - -
                  - -
                  - - -
                  -

                  Find a character on Venice

                  -

                  Public, safe-for-work characters. Havre brings in a link and the credit: the character keeps speaking with its own prompt, through Venice, and you can remix it into someone of your own.

                  - -

                  -
                    -
                    diff --git a/ventures/havre/llms.txt b/ventures/havre/llms.txt index 4242ee6..5f3be8a 100644 --- a/ventures/havre/llms.txt +++ b/ventures/havre/llms.txt @@ -1,6 +1,6 @@ # Havre -> A harbor for characters: keep them in a file you own, talk to them on your own Venice key, and remix the ones you love into someone new, with credit. +> A harbor for characters: talk to Venice's characters on your own key, keep characters in a file you own, and remix the ones you love into someone new, with credit. Read skill.md first and follow it. card.js and venice.js are ES modules with no dependencies (Node 20+ or a browser). @@ -9,13 +9,7 @@ Read skill.md first and follow it. card.js and venice.js are ES modules with no - [skill.md](https://havre.yolopreneur.lol/skill.md): how to write a Havre character, export it, talk to it through Venice, and remix with credit - [card.schema.json](https://havre.yolopreneur.lol/card.schema.json): the card format (havre: 1), as JSON Schema - [card.js](https://havre.yolopreneur.lol/card.js): read, check and convert cards (Character Card V1/V2/V3, PNG cards, system prompts), and the similarity check -- [venice.js](https://havre.yolopreneur.lol/venice.js): the Venice API calls the studio makes - -## Examples - -- [Maren](https://havre.yolopreneur.lol/cast/maren.havre.json): the harbormaster, a guide -- [Taskmaster](https://havre.yolopreneur.lol/cast/taskmaster.havre.json): a coach with a flow (assess, plan, execute) -- [Odile](https://havre.yolopreneur.lol/cast/odile.havre.json): the lighthouse keeper, a storyteller +- [venice.js](https://havre.yolopreneur.lol/venice.js): the Venice API calls the page makes ## Coming next diff --git a/ventures/havre/venice.js b/ventures/havre/venice.js index 1fca866..1f35d70 100644 --- a/ventures/havre/venice.js +++ b/ventures/havre/venice.js @@ -59,12 +59,29 @@ export class Venice { }); } - /** public Venice characters, safe-for-work only */ - async characters({ search = "", limit = 24, offset = 0 } = {}) { - const q = new URLSearchParams({ limit: String(limit), offset: String(offset) }); + /** + * One page of public Venice characters, safe for work only: { list, more }. sort: featured, imports, highestRating, + * mostRecent (or any other sortBy Venice takes); search matches names, descriptions and #tags. + */ + async characterPage({ search = "", limit = 24, offset = 0, sort = "" } = {}) { + const q = new URLSearchParams({ limit: String(limit), offset: String(offset), isAdult: "false" }); if (search) q.set("search", search); - const d = await this.call("/characters?" + q); - return (d && d.data || []).filter((c) => !c.adult).map(characterInfo); + if (sort) q.set("sortBy", sort); + let d; + try { + d = await this.call("/characters?" + q); + } catch (e) { + if (e.status !== 400) throw e; + q.delete("sortBy"); q.delete("isAdult"); // asked for something this API doesn't take: ask plainly + d = await this.call("/characters?" + q); + } + const raw = d && Array.isArray(d.data) ? d.data : []; + return { list: raw.filter((c) => c && !c.adult).map(characterInfo), more: raw.length >= limit }; + } + + /** public Venice characters, safe for work only */ + async characters(opts = {}) { + return (await this.characterPage(opts)).list; } async character(slug) { @@ -104,6 +121,6 @@ function characterInfo(c) { slug: c.slug, name: c.name || c.slug, description: c.description || "", creator: c.author || "", photo: /^https:\/\/outerface\.venice\.ai\//.test(c.photoUrl || "") ? c.photoUrl : "", url: "https://venice.ai/c/" + encodeURIComponent(c.slug), model: c.modelId || "", tags: c.tags || [], - imports: c.stats && c.stats.imports || 0, rating: c.stats && c.stats.averageRating || 0, + imports: c.stats && c.stats.imports || 0, rating: c.stats && c.stats.averageRating || 0, web: !!c.webEnabled, }; }