Smarter notes, on device.
Title and tag notes as users write, suggest emoji for headings, turn rough sketches into clean shapes, and transcribe dictation and meetings, all on device.
AI models built for notes
Nothing leaves the device
Every model runs on the user's phone, tablet or laptop. Private journals, health notes and company data don't get processed on a server, so people can use the features on any note.
No per-call cost
Title every note, sort every image and transcribe every meeting with no bill per call. Your team can add a feature without first forecasting cloud spend.
Works offline
Once the models are downloaded, every feature works without a connection. Titles, dictation and sketch cleanup work on a plane or in a meeting room with no signal.
Examples
Each example replays real output from a model. Open a model page for the full details, and try Gist, Emo or Shapes on your own text or sketch.
Title · Titles and descriptions
Add a title to every note
As users write, Title suggests a short title and description, and updates both as the note grows. Title runs on Apple platforms only and can get a detail wrong, so let users edit what it writes.
Gist · Content topic tagging
Tag notes automatically
Gist assigns each note one or more of 36 topic tags. Use them to organize notes into topic tabs and let users filter search results by topic. Gist supports 101 languages.
Emo · Emoji suggestions
Suggest emoji for headings and bullets
When a line ends, Emo suggests an emoji for it: 🛂 for renewing a passport, 💡 for the electricity bill, 👥 for a team meeting. Suggestions take under 2ms, so they keep up with users as they type.
Eye · Image classification · Beta
Label and sort images
Eye recognizes whiteboards, screenshots, maps and photos, and identifies what's in each photo. Use it to organize images by type, so users can quickly find Tuesday's whiteboard.
Voz · Speech recognition
Dictate into a note
Voz writes speech into the note a few words at a time as users talk. Live transcription runs on Apple platforms only; on Android and the web, Voz transcribes a recording once it ends. Voz covers 25 European languages, so pair it with Ear to name the language first.
Who · Who said what · Beta
Label who said what
Pair Who with Voz, and each line of the meeting notes shows which speaker said it. Who tells up to four speakers apart in each five minutes, and more across a whole meeting. Who does best when each person has their own microphone, as on a video call.
Shapes · Shape recognition
Turn rough sketches into clean shapes
Underline a sentence, circle a word or sketch a flow chart, and Shapes snaps each stroke to a clean shape in under 10ms. Notes and diagrams drawn in a meeting come out neat enough to share.
Get started
Install the models you need from one SDK, in Swift, Kotlin or JavaScript. The example tags a note with Gist and Emo. On Apple platforms it also writes the note's title with Title.
iOS, macOS, Linux, Windows
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/desert-ant-core.git", from: "4.3.0",
traits: ["MLX"])
// target dependencies
.product(name: "Title", package: "desert-ant-core")
.product(name: "Gist", package: "desert-ant-core")
.product(name: "Emo", package: "desert-ant-core")
import Title
import Gist
import Emo
let titles = try await Titles(directory: modelFolder)
let gist = Gist()
let emo = Emo()
// after a pause in typing
let card = try await titles.describe(note)
let topic = try await gist.classify(note).first
let emoji = try await emo.suggestions(for: note).first?.emoji
Android
// build.gradle.kts (Maven Central)
implementation("ai.desertant:gist:4.3.0")
implementation("ai.desertant:emo:4.3.0")
import ai.desertant.emo.Emo
import ai.desertant.gist.Gist
val gist = Gist(context)
val emo = Emo(context)
// after a pause in typing
val topic = gist.classify(note).firstOrNull()
val emoji = emo.suggestions(note).firstOrNull()?.emoji
Web, Node.js
npm i @desert-ant-labs/gist @desert-ant-labs/emo @litertjs/core
import { Emo } from "@desert-ant-labs/emo";
import { Gist } from "@desert-ant-labs/gist";
const gist = await Gist.load();
const emo = await Emo.load();
// after a pause in typing
const [topic] = await gist.classify(note);
const [suggestion] = await emo.suggestions(note);
Building a notes app?
Tell us what you want to add for your users, and we'll help you pick the models and plan the integration.






