Skip to content

Releases: efficiencyx/JunOS

v1.0.3-beeeta

v1.0.3-beeeta Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Oct 22:57

Jun OS v1.0.3-beeeta 🐑

Still beeeta.

Your graphics card is too small for the model you want? She can now borrow a GPU or a TPU from the Colab notebook (or Kaggle) and keep everything else on your computer. On Colab itself she runs on a TPU now, and a TPU is way faster than the free T4.

⚠️ Before you upgrade

  • Nothing to do. Chats, memory and settings carry over as they are.
  • Using the notebook's brain sends your messages to it. In Cloud mode or with the notebook lines in .env, every prompt goes to your notebook on Google's machines through a Cloudflare tunnel, with the recent conversation and recalled memories riding along. Your account, the database and the memory files stay on your computer. The privacy page says the same now.
  • I'm not sponsored and i do not think using Colab or Kaggle for this is the right way to enjoy JunOS. But it's here for unfortunate people with no GPU and bad phones.
  • Kaggle has not been tested (I am NOT giving my face to Persona)
  • This version has been tested with less than 5 hours of sleep, something will break.

What comes with this release

Lend her the notebook's GPU or TPU

  • In the notebook, set Mode to Inference only. Step 3 prints a few lines starting with AI_PROVIDER=.
  • Give them to her: ./JunOS/start.sh link on Linux, the Notebook link button in the manager on Windows.
  • The link and its key change every time Step 3 runs. When the old one stops answering, starting her says so and asks for the new lines.
  • The notebook only exposes chat and a few read-only endpoints, behind a key that's new every run. Someone who finds the URL can't use the GPU or touch the models.
  • On Kaggle the notebook always runs this way.

Cloud install

  • The installers have a third choice next to Express and Custom: Cloud. Everything gets installed except the model, so nothing big downloads, and it asks for the notebook's lines (or you add them later with start.sh link / Notebook link).

Colab on a TPU

  • Pick a TPU runtime if Colab offers you one. She runs on vLLM there and answers way faster than on the T4.
  • Step 2 has a model selector. auto takes the full-precision 12B on a v6e-1 and a new INT8 12B on a 16 GB v5e-1, where she gets 6144 tokens of context. (I MANAGED TO SQUEEZE HER IN, BARELY)
  • The TPU builds are v8 now, same Jun as the GGUF release.
  • Thinking turns work on a TPU too.
  • The first start compiles her for the TPU, give it around 10-20 minutes

Smaller fixes

  • Colab on a TPU runtime loads the page without hand edits.
  • Running Colab's Step 1 a second time in the same session works again, and pulls updates instead of keeping the first copy.
  • Colab says why it couldn't read a secret instead of quietly falling back to the public copy.
  • TEAM.md corrected the timeline.

This is beta software.

Still beta, still bugs I haven't found.

If something breaks, open an issue with what you were doing, your platform, provider/model and logs if you can. "it's not working!!!!" is just a way to piss me off, and i might consider ghosting you for a couple hours.

v1.0.2-beeeta

Choose a tag to compare

@github-actions github-actions released this 18 Oct 21:44

Jun OS v1.0.2-beeeta 🐑

Still beeeta.

The browser can stop yelling at you about her certificate, she lands on your phone as an app, and AMD cards on Windows get counted right.

⚠️ Before you upgrade

  • Your browser warns one more time. Her certificate is now signed by a small certificate authority your install makes for itself, so the first start after updating makes a new one. Run ./JunOS/start.sh trust (Windows: powershell .\JunOS\start.ps1 trust from the folder above JunOS) once, restart the browser, and that's the last warning on that computer. Or click through it like before.
  • Nothing else to do. Chats, memory and settings carry over as they are.

What comes with this release

Her certificate can be trusted

  • Fresh installs ask trust her certificate on this machine?. Say yes and the browser just opens her, no Advanced -> Proceed.
  • On Linux it goes into the system store (your sudo password) and into Chrome, Chromium and Firefox, snap and flatpak ones included. Chrome and Firefox need certutil (libnss3-tools on Ubuntu/Debian, nss-tools on Fedora, nss on Arch), it tells you if that's missing.
  • On Windows it goes into your user's certificate store, and Windows asks you to confirm "Jun OS local CA". Edge and Chrome stop warning after a restart. Firefox only reads that store with security.enterprise_roots.enabled set to true in about:config.
  • The authority can only vouch for local names and private addresses (localhost, *.local, 192.168.x.x and friends). If its key ever leaked, it still couldn't fake a real website.
  • A new address for her (DHCP, a new BIND_ADDR) gets a new certificate from the same authority, so a computer that trusts it doesn't notice anymore.
  • The uninstallers offer to take it back out.
  • Phones still get the warning, trusting it only covers the computer you did it on.

Android app

  • Every release now carries JunOS.apk, the Android app, still a work in progress. arm64 phones on Android 10 or newer, the first start downloads a ~2.6 GB model.

Smaller fixes

  • On Windows, a 16 GB RX 9070 XT showed up as 4 GB and got the smallest model. AMD memory is now read per card from the driver, so a big card next to an integrated GPU gets its real size and the right model. If your AMD box on Windows got E2B before, a reinstall picks the right one.

This is beta software.

Still beta, still bugs I haven't found.

If something breaks, open an issue with what you were doing, your platform, provider/model and logs if you can. "it broke" is emotionally relatable and technically as useful as driving with the parking break on.

v1.0.1-beeeta

Choose a tag to compare

@efficiencyx efficiencyx released this 17 Oct 14:27

Jun OS v1.0.1-beeeta 🐑

Still beeeta. Sheep is still stalking me

She moves like a person now instead of a security camera, coming home got a whole scene, and a couple of things that were quietly broken since the last release work again.

⚠️ Before you upgrade

  • The first start after updating can download a model. Her models are checked on every start now, not just on the first boot. If the one in OLLAMA_MODELS_TO_PULL got a newer upload under the same tag, it comes down with this restart, and on the default model that's a few GB. Later restarts only check.
  • Nothing else to do. Chats, memory and settings carry over as they are.

What comes with this release

She moves better

  • No more snapping. Her face and body ease into every expression and ease back out, instead of teleporting there.
  • Expressions wear off. A look or a gesture lasts a few seconds, then she goes back to idle. Before, one glance away early in a reply could leave her staring at the wall for the rest of the chat.
  • Her eyes go first. They dart to a new spot and her head follows a moment later, part of the way, like people actually look around.
  • Her hair swings when she moves her head, and her tail is out where you can see it, wagging.
  • She stopped rocking side to side while idle.

Coming home

  • Leave her alone for a while and coming back starts in the hallway outside her door, with your phone. The lock screen shows what she sent while you were gone: missed calls, texts, the last one as the preview. Tap it and the chat opens on the ones you haven't read.
  • The longer you were away, the more there is, and the more it escalates.
  • Put the phone away and you walk in. She reacts in her face bubble, out loud if voice is on, and she knows exactly how long you were gone.
  • Reply from the phone instead and her answer is the reaction.
  • Back in under two hours? Nothing to read, so no phone, just her.

Smaller fixes

  • With MTP on the 12B, a turn with thinking off could come back completely empty. The MTP model now gets the right prompt format for its size, and an empty turn gets retried once before you ever see it
  • The pre-warm, the part that loads her while the stack starts so your first message doesn't sit through the cold load, never actually ran on a default install. On Windows it loaded her with the wrong settings and she got reloaded on the first message anyway. It now loads her with the same settings chat uses, on Linux, Windows and Colab, and the Linux installer waits for it before it says she's ready
  • First reply after a start still crawling? docker logs omega-php | grep prewarm on Linux, JunOS\runtime\logs\prewarm.log on Windows, tells you whether the pre-warm made it

This is beta software.

Still beta, still bugs I haven't found.

If something breaks, open an issue with what you were doing, your platform, provider/model and logs if you can. "it broke" is emotionally relatable and technically useless.

As before: Jun's original Live2D assets are NOT included. They belong to My Dystopian Robot Girlfriend. Jun OS rebuilds what it needs from your own copy of the game, and the recovered files stay local and gitignored. Please don't redistribute them.

Jun OS is still local by default. Model downloads, optional lyrics lookup, Jun's web-search tool, certificate issuance and OpenRouter can reach the internet on purpose. Your local conversations aren't being shipped anywhere, there's no telemetry.

Full changelog: v1.0.0-beeeta...v1.0.1-beeeta

v1.0.0-beeeta

Choose a tag to compare

@efficiencyx efficiencyx released this 11 Oct 20:02

Jun OS v1.0.0-beeeta 🐑

Turns out v0.1.0-alpha-ca wasn't enough code.

You might ask why beeeta? Because it's beta, and sheep go beee. That's it. I learned nothing from alpha-ca.

This release lands 134 commits after the first public alpha. Calling it a small update would be dishonest: large parts of Jun OS were rebuilt, new systems showed up, old ones got noticeably less dumb, and Jun has a lot more ways to interact with you.

And sometimes i still ask myself why i added some of the following features.

⚠️ Before you upgrade

  • Your data gets encrypted on first login. Existing plaintext chats, memories and preferences are migrated automatically the first time each account logs in after updating.
  • Save your recovery code. New accounts get a one-time recovery code at signup. If you lose both your password and that code, your data is gone. That's encryption doing its job, and no backup can undo it.
  • HTTPS is now the default. Linux and Windows installs generate a local certificate (LAN addresses included). Plain HTTP redirects to HTTPS. Expect a browser warning on self-signed certs; the traffic is still encrypted.
  • Sidecars now require authentication. If you call the TTS/STT/karaoke services directly, requests need the generated sidecar secret.
  • Trips are gated. Activity pages use temporary trip grants instead of being directly reachable. Set FREE_ROAM=on to restore the old behavior.
  • Jun can now leave the conversation. See FLEE_BANS below if you want to soften that.
  • Updates follow release channels now. Re-running the installer (or pressing Update in the Jun OS app on Windows) moves you along Stable (newest full release, the default), Latest (pre-releases included) or Experimental (main), saved as JUN_CHANNEL in .env. Installs from before this were on main and stay on Experimental until you set JUN_CHANNEL=stable.
  • The install commands changed. They now download the installer from the latest release instead of from main. Old bookmarked commands still work, but grab the new ones from the README.
  • The license is now Apache-2.0 (it was MIT). The asset rules moved out of LICENSE into their own NOTICE file; what they allow didn't change.

What comes with this release

Going out with Jun

  • Real activities. Shopping, karaoke, lunch, dinner and blackjack are proper activities now, not buttons that teleport you to another page. Ask her out in chat or through Settings, and she decides whether she wants to go.
  • She can ask you out too. Jun occasionally takes the initiative instead of waiting for you to drive every conversation.
  • Dates are actual dates. Talk while ordering, pick your food, let Jun pick hers, call the waiter, head home. The whole outing gets written back into her memory.
  • Three restaurants. Lantern, Marigold and a counter spot, each with its own layout, lighting and art. The venue is picked per trip and stays the same if you refresh mid-date.
  • Blackjack. Because an AI companion orchestration system clearly needed turn-based blackjack. Jun plays her own hand, decides when to hit or stand, and reacts to the table.
  • Trips are part of the relationship. Pages use temporary trip grants instead of letting you drag Jun wherever you like. FREE_ROAM=on turns you into the god of transportation.
  • Jun can leave. Push things far enough and she walks out, refusing to come back for a while. Repeat offenses mean longer lockouts. FLEE_BANS=off removes the lockout but keeps her ability to leave.
  • She notices a bad streak. When her last few moods keep souring within half an hour, walking out gets suggested to her. She still decides whether you've earned it.

Achievements 🏆

  • 25 of them, from Yapper to Door Slammed, each climbing Bronze → Silver → Gold → Diamond.
  • Counted where things actually happen: chatting, tools, mood shifts, outings, karaoke, outfit changes and blackjack.
  • They unlock nothing. They're for bragging. Some stay hidden until you stumble into them. I've heard that someone dedicated enough could cheat their way to unlocking every achievement.

Thinking and generation

  • Reasoning Modes. auto / low / medium / high, so "hi" no longer gets treated like a doctoral dissertation. You can also expose the reasoning stream if you're curious.
  • Budget-aware fine-tunes. The live context ends with a <think:low|med|high> marker, so compatible Jun models (Currently v7 and v8) adjust how much effort each turn gets.
  • MTP speculative decoding. Supported Jun models can use a small drafter to guess several tokens ahead. Right guesses are accepted in batches, wrong ones thrown away. Same answer, potentially faster.
  • MTP auto-tuning. The installer benchmarks draft depths against normal decoding using Jun's real prompt, keeps the fastest setup, and switches MTP off if your hardware doesn't benefit. Swap GPUs and it can retune itself.
  • A tiny model for chat titles. TITLE_MODEL (a small, CPU-pinned model) names your conversations so that job doesn't eat Jun's VRAM or interrupt her. Works on Ollama and llama.cpp.

llama.cpp is a first-class citizen now

Running Jun on llama-server instead of Ollama used to mean a lesser Jun. Not anymore.

  • Same prompt, byte for byte. Her thinking switch on llama.cpp builds exactly the prompt Ollama's renderer builds. Checked character by character, not vibes.
  • She can hear you on llama.cpp too. The Jun model repos ship the file that gives her ears, and llama.cpp loads it automatically.
  • Titles, a model picker, and karaoke that can borrow the GPU. llama-server runs in router mode, so it can hold the title model on the CPU, list every model you've set up, and step aside while karaoke splits a song.
  • Context that fits your card. Capped at 16k like the Ollama side, and shrunk first on small cards instead of pushing half of Jun onto the CPU.
  • She's loaded before you say hi. The start script loads her right away, so your first message isn't secretly a 2-12 GB download.
  • It actually downloads now. The previous llama.cpp setup couldn't fetch a model at all inside its read-only container. Embarrassing. Fixed.

Memory

  • Smarter durable-memory retrieval. Memories are picked by relevance to what you're talking about, not by "which category changed most recently?"
  • Better cross-chat recall. Search now matches words instead of requiring one exact substring, so Jun actually finds past conversations.
  • Karaoke goes into memory. Finished, scored performances can be stored, so she can bring up your vocal crimes later.

Voice

  • Room awareness. On spoken turns, Jun decides whether you're talking to her or she's just overhearing you talk to someone else.
  • Hear Everything mode. Don't trust an LLM to judge who you're addressing? Flip the switch and she answers everything. Yes, even your mom telling you to stop kissing the monitor.
  • Direct audio input. Compatible models receive the audio itself, no Whisper in the middle. Ollama or llama.cpp.
  • Whisper still runs alongside. Its transcription replaces the temporary <audio> entry in history, so memory search, consolidation and reloads still have real words to work with.
  • Graceful fallback. If the model can't take audio, the same recording goes through local speech-to-text instead of vanishing.
  • Cleaner stay_silent. Jun can deliberately ignore an overheard conversation without leaving junk turns in history.

Wardrobe

  • Better outfit sync. State resyncs correctly after changes, recolors repaint properly, and mods can let the Live2D rig keep driving parameter-based clothing instead of freezing it in one pose.
  • Android wardrobe support. The Android client got the missing wardrobe API and state path, so outfit changes work instead of 404ing during boot.

The world looks different too

  • Rooms are real SVG scenes. The boutique, karaoke lounge, restaurants and blackjack room moved from CSS-gradient architecture to proper scene files with individually placeable props.
  • Dynamic time of day. Sky, room exposure, city lights and window lights follow the real clock instead of "lunch = day, dinner = night."
  • Seasonal daylight. 18:00 in December and 18:00 in June no longer share the same sky.
  • Redesigned karaoke. Setup is a single screen instead of a mini installation wizard, and once the song starts the lyrics take over the stage instead of living in a narrow side panel.
  • A shared visual system. Wardrobe, date and karaoke pages now share consolidated design tokens, a minimum text size, and a lot less decorative UI that did nothing.
  • A full-page blackjack table. Correct cards, chips, turn states, accessibility fixes, and Jun sitting where she's supposed to instead of somewhere in the CSS stacking dimension.

Privacy and security

A security audit drove a good chunk of this work. Several "local-only" services are now treated as if someone will eventually expose them by mistake, because someone will.

  • Encryption at rest. Every account gets its own random data key. Conversations, titles, summaries, preferences, welcome data and memory files are sealed before they touch disk.
  • Passwords don't encrypt data directly. The account key is wrapped with an Argon2id-derived password key.
  • Recovery codes. Signup gives you a one-time code that can unwrap the same account key if you forget your password. Save it.
  • Automatic migration. Older plaintext histories are encrypted on first login after the update.
  • HTTPS by default. Local certificates are generated for Linux and Windows (LAN addresses included), and HTTP redirects to HTTPS. Using Jun on your LAN no longer means sending passwords and chats around in plaintext...
Read more

v0.1.0-alpha-ca

v0.1.0-alpha-ca Pre-release
Pre-release

Choose a tag to compare

@efficiencyx efficiencyx released this 11 Sep 13:46
Immutable release. Only release title and notes can be modified.

Jun OS v0.1.0-alpha-ca 🦙

I guess it's finally time to release Jun in the wild

You might ask why alpha-ca? Because it sounds like "Alpaca" and Alpaca = camelids = llama. inference engine is llama.cpp.
I couldn't resist, sorry.

You might also ask why JunOS if it's not an operating system? It's an Orchestration System O.S. OS in short.

What comes with this release

  • Live2D reactions while she talks. Expressions and gestures are injected into the stream, so she can react on the actual word instead of awkwardly changing face three seconds after the sentence ended.
  • Memory across conversations. She can search old chats, keep longer-term notes and maintain a journal between sessions.
  • Affection, trust and tension. Those aren't decorative bars. They move based on the conversation and get fed back into how she treats you.
  • Voice mode. Kokoro and Pocket TTS are supported, with Whisper handling speech recognition. Her mouth follows the generated audio too.
  • Karaoke. Yes. You can sing with Jun. Demucs separates the track, Whisper timestamps the lyrics, and Jun gets to witness whatever you're doing to the song.
  • Wardrobe + presets. Change outfits, recolor things and save combinations. She knows what she's wearing, so she can and will judge your decisions.
  • Mod support. Compatible game-mod zips can be loaded locally in the browser.
  • Lore retrieval. No mystery embedding database quietly eating RAM in the corner. It's plain keyword/IDF retrieval over the lore corpus.
  • Ollama, llama.cpp and OpenRouter. Local by default. OpenRouter is there if you deliberately want cloud inference.
  • Jun fine-tunes. E2B, E4B and 12B depending on how much VRAM you're willing to sacrifice to Jun.
  • NVIDIA, AMD and CPU support. Multi-GPU support is here too, although spreading one model across multiple cards is mostly for fitting something that otherwise wouldn't.
  • Linux, macOS and Windows. Docker on Linux/macOS, native install on Windows.
  • Free Colab demo. If your GPU is held together by thoughts and prayers, a T4 can run her for you.

This is alpha software.

There are probably bugs I haven't even earned the privilege of discovering yet.

If something breaks, open an issue and tell me what you did before everything broke. Logs are even better. "it doesn't work" gives me substantially less spiritual guidance.

Also: Jun's original Live2D assets are NOT included. They're copyrighted game assets. The installer can recover what Jun OS needs from your own copy of My Dystopian Robot Girlfriend, and the recovered files stay local and gitignored. Please don't redistribute them.

And while Jun OS is local by default, a few things can intentionally touch the internet: model downloads, lyrics lookup, her web-search tool, and obviously OpenRouter if you select it. Your normal local conversations aren't secretly being shipped off somewhere.

This has gone from "what if I made Jun talk" to an unreasonable amount of PHP, JavaScript, Python, Docker, model training and arguments with Live2D.