autumn-emoto is the product name for Emoto AI, a local, Indonesian-language voice companion built for a young learner named Alfian. Emoto is not a utility dashboard or an enterprise assistant: it is a speaking friend. On startup it greets Alfian aloud, then presents a numbered main menu that mirrors the original console program's 1ā5 keys. From that menu Alfian can talk to Emoto by voice and hear spoken replies, have Emoto read the text inside a photo file aloud, have Emoto read the text inside a video file aloud, ask for study help on a topic and receive spoken encouragement, or exit and hear a farewell.
The product intent is warmth and accessibility first: every response Emoto produces is spoken aloud in Indonesian and also printed to the console, so the experience works for a learner who would rather listen than read. The audience is Alfian himself, plus the people around him ā students, families, and teachers ā using a laptop or phone in a bedroom, a classroom, or a study corner.
This document specifies the current, source-backed behavior of Emoto AI exactly as the authoritative requirement thread defines it, including its hard technology constraints (Google Indonesian speech recognition, local pyttsx3 text-to-speech at rate 175 and volume 1.0, Tesseract OCR with the Indonesian language model, single-frame video reading, and a fixed built-in study knowledge dictionary rather than a generative model).
Emoto AI is a local desktop/console program driven by a numbered text menu plus microphone and file-name text input. It runs on the learner's own machine, uses the local microphone for voice capture, calls Google's speech recognition service with Indonesian (id-ID) language for transcription, speaks through the local pyttsx3 engine, and extracts text from photo and video files with Tesseract OCR using the Indonesian language model (ind).
Actors
Accepted behavior
Emoto greets Alfian aloud on startup, then loops through a numbered main menu. Option 1 captures microphone audio, recognizes Indonesian speech, and replies aloud ā including specific answers to "siapa kamu"/"siapa kau", "terima kasih", and "siapa namamu", and a general echo-and-offer reply otherwise. Option 2 takes a photo file name, runs Indonesian OCR, and speaks the extracted text. Option 3 takes a video file name, reads a single frame, runs Indonesian OCR on that frame, and speaks the result. Option 4 takes a study topic and returns one of the fixed built-in answers for matematika, bahasa, ipa, ips, or the default encouragement. Option 5 speaks a farewell to Alfian and ends the program. Invalid menu choices produce a spoken and printed message telling Alfian to pick 1 through 5. Unclear or failed speech recognition produces a spoken apology asking him to try again.
Ownership and exclusions
All five current destinations are first-party application surfaces owned by the application, with no access requirement ā Emoto is a local program for its own user, and no account, sign-in, or permission model is part of the accepted scope. Emoto does not generate study answers with a language model; study help comes only from the fixed built-in knowledge dictionary. Emoto does not read multiple video frames, does not perform continuous or wake-word listening, and does not persist conversation history, files, or results between runs.
Emoto AI is delivered as a local, single-user desktop/console program. Alfian runs it on his own machine; there is no server, no shared account, and no remote state. Everything Emoto needs is either local (microphone, pyttsx3, Tesseract, the photo and video files Alfian names) or a single external service call (Google speech recognition for Indonesian transcription).
Because the program is local and single-user, no identity, sign-in, or access control is part of the current product. The Main Menu is the entry surface and is reachable immediately on launch; the four working surfaces (Voice Chat, Photo Reader, Video Reader, Study Help) are reachable from that menu without any access step. This is a deliberate boundary, not an omission: the accepted requirement thread never asks for accounts, profiles, or permissions, and adding them would be adjacent scope.
The current delivery horizon covers exactly the five menu options, the startup greeting, the spoken-and-printed response rule, the invalid-choice message, and the unclear-speech retry message. Anything beyond that ā generative study answers, multi-frame video reading, conversation memory, or a hosted multi-user version ā is outside the current boundary and is not specified here as current behavior.
The authoritative source supplies a fixed built-in study knowledge dictionary. Its exact entries are preserved below and are the only study answers Emoto may speak.
| Topic key | Exact answer text |
|---|---|
matematika | "Matematika itu seperti melatih otot otak. Mulai dari yang mudah, latihan setiap hari sedikit saja, lama-lama pasti makin pintar. Jangan menyerah ya!" |
bahasa | "Belajar bahasa itu seperti mengenal dunia baru. Banyak membaca, mendengarkan, dan mencoba berbicara. Kesalahan adalah cara belajar yang terbaik." |
ipa | "Ilmu Pengetahuan Alam menjelaskan bagaimana alam semesta bekerja. Amati, tanyakan, dan cari jawabannya. Semangat peneliti muda!" |
ips | "Ilmu Pengetahuan Sosial mengajarkan kita bagaimana hidup bersama, saling menghargai, dan memahami sesama." |
default | "Teruslah bertanya dan belajar, Alfian. Setiap pertanyaan adalah langkah menuju kebijaksanaan. Kalau ada yang sulit, pelan-pelan pasti bisa!" |
The source also fixes the following exact spoken strings, which Emoto must produce verbatim:
id-ID); intent matcher for "siapa kamu"/"siapa kau", "terima kasih", and "siapa namamu"; general echo-and-offer reply builder; spoken-and-printed reply renderer; retry handler.UnknownValueError produces "Maaf, aku belum mendengar dengan jelas. Coba lagi ya."; RequestError produces the connectivity-failure path and the same retry prompt. Recovery ā Alfian speaks again, or returns to the menu and re-enters option 1.lang='ind'); empty-text detector; result formatter ("Isi teks di foto: {teks}"); spoken-and-printed output; error handler.VideoCapture); single-frame reader; BGR-to-RGB conversion and frame-to-image conversion; Indonesian OCR runner (Tesseract, lang='ind'); video release; empty-text detector; result formatter ("Aku membaca di videomu: {teks}"); spoken-and-printed output; error handler.FR-1 ā Startup greeting. As Alfian, I should hear Emoto greet me aloud the moment the program starts, so that I know my friend is ready. (explicit)
FR-2 ā Main menu display. As Alfian, I should see a numbered main menu with five options, so that I can choose what to do. (explicit)
FR-3 ā Voice conversation. As Alfian, I should speak my question and hear Emoto answer aloud, so that I can talk to my friend without typing. (explicit)
id-ID), prints "\xf0\x9f\x91\xa4 Kamu: {hasil}", and speaks a reply. Continuation: return to the Main Menu. Failure/recovery: unclear speech or a recognition connectivity error produces "Maaf, aku belum mendengar dengan jelas. Coba lagi ya."FR-4 ā Identity question. As Alfian, I should be able to ask who Emoto is and hear the identity answer, so that I know who I am talking to. (explicit)
FR-5 ā Thanks response. As Alfian, I should be able to say thank you and hear Emoto respond warmly, so that the conversation feels like a friendship. (explicit)
FR-6 ā Name question. As Alfian, I should be able to ask Emoto's name and hear it answer with my name, so that the assistant feels personal. (explicit)
FR-7 ā General voice reply. As Alfian, I should hear Emoto acknowledge anything else I say and offer further help, so that the conversation never dead-ends. (explicit)
FR-8 ā Unclear speech retry. As Alfian, I should be told when Emoto could not hear me clearly, so that I know to try again. (explicit)
UnknownValueError or RequestError from speech recognition. Observable result: Emoto speaks "Maaf, aku belum mendengar dengan jelas. Coba lagi ya." Continuation: return to the Main Menu, where Alfian can re-enter option 1.FR-9 ā Photo text reading. As Alfian, I should enter a photo file name and hear Emoto read the text in that photo, so that I can have printed material read to me. (explicit)
FR-10 ā Photo success format. As Alfian, I should hear the photo's text introduced clearly, so that I know what Emoto is reading. (explicit)
FR-11 ā Video text reading. As Alfian, I should enter a video file name and hear Emoto read text from that video, so that I can have on-screen text read to me. (explicit)
FR-12 ā Video success format. As Alfian, I should hear the video's text introduced clearly, so that I know what Emoto read. (explicit)
FR-13 ā Video no-clear-text message. As Alfian, I should be told when the video frame had no clear text, so that I understand why nothing was read. (explicit)
FR-14 ā Study help. As Alfian, I should name a study topic and hear Emoto encourage me on it, so that I feel supported while learning. (explicit)
FR-15 ā Study topic matching. As Alfian, I should get the right encouragement for matematika, bahasa, ipa, or ips, so that the help fits what I am studying. (explicit)
FR-16 ā Study default answer. As Alfian, I should still get encouragement when my topic is not one of the built-in ones, so that I am never left without a reply. (explicit)
FR-17 ā Exit and farewell. As Alfian, I should be able to exit and hear Emoto say goodbye, so that the session ends warmly. (explicit)
FR-18 ā Invalid choice handling. As Alfian, I should be told when I pick a number outside 1ā5, so that I can choose correctly. (explicit)
FR-19 ā Spoken and printed responses. As Alfian, I should both hear and see every Emoto response, so that I can follow along whether I am listening or reading. (explicit)
FR-20 ā Local microphone access. As Alfian, I should have Emoto use my machine's microphone for voice interaction, so that option 1 works. (required_inference)
FR-21 ā Indonesian speech recognition connectivity. As Alfian, I should have Emoto reach Google's recognition service in Indonesian, so that my speech is understood. (required_inference)
FR-22 ā Local text-to-speech engine. As Alfian, I should have Emoto speak through the local pyttsx3 engine at rate 175 and volume 1.0, so that replies are audible and consistent. (required_inference)
FR-23 ā Indonesian OCR availability. As Alfian, I should have Emoto read photo and video text with Tesseract's Indonesian model, so that Indonesian text is recognized. (required_inference)
lang='ind'.FR-24 ā Local file accessibility. As Alfian, I should have the photo or video file I name be locally accessible, so that Emoto can open it. (required_inference)
Product context. Alfian is a young learner in Indonesia who uses Emoto AI on his own machine, in a bedroom, a classroom, or a study corner. He is the person Emoto greets by name at startup and the only human the program serves. He is comfortable with a numbered menu and with typing a file name, but he prefers to listen rather than read ā which is exactly why Emoto speaks every response aloud in addition to printing it.
Primary goal. To have a friendly companion that listens to him, answers him out loud, reads printed and on-screen text to him, and encourages him when he studies ā without needing to learn a complicated tool.
Distinct accepted responsibilities.
Relevant inputs and decisions. Alfian decides which menu number to enter; what to say into the microphone; which photo or video file name to type; and which study topic to name. He also decides, after an unclear-speech prompt or an invalid-choice message, whether to try again or pick a different option.
Interactions with other accepted participants. Alfian is the sole human participant. His speech is transcribed by the external Google recognition service, his replies are voiced by the local pyttsx3 engine, and his photo and video text is extracted by local Tesseract OCR. He never interacts with those components directly ā he only experiences their results as Emoto's spoken and printed answers.
Observable success. Alfian hears Emoto greet him at startup; hears a spoken reply to whatever he says, including the specific identity, thanks, and name answers; hears the text of his photo read back with the "Isi teks di foto: " introduction; hears the text of his video read back with the "Aku membaca di videomu: " introduction; hears the correct encouragement for his study topic or the default encouragement otherwise; and hears the farewell when he exits.
What makes this role distinct. Alfian is not an operator of a tool ā he is a companion's friend. His work is conversational and receptive: he speaks, listens, and is encouraged. Every capability in the product exists to produce something he can hear, and the product's warmth (being addressed by name, being cheered on) is part of his success, not decoration around it.
id-ID) language.UnknownValueError) or the recognition service cannot be reached (RequestError), Emoto speaks "Maaf, aku belum mendengar dengan jelas. Coba lagi ya." Alfian can then re-enter option 1 and speak again.The creative direction is authoritative for this section. The muse is Haraldur Thorleifsson, and the headline idea is big-hearted boldness for a speaking friend: warm, character-led, colour-blocked, and never enterprise software or a hacker console.
Colour tokens (light mode)
| Role | Hex | Use |
|---|---|---|
| Background (page ground) | #FFF7EC | Cream field ā the page is never white-first |
| Surface | #FFFFFF | Cards and panels laid on cream |
| Text (primary) | #171A2B | Body and headline ink on cream (contrast ā 15:1) |
| Primary | #2B3A8F | Deep ink blue: wordmark, big menu numerals, section rules, primary button fill |
| Accent | #FF6B35 | Coral: the single hot accent meaning "Emoto is speaking / listening" ā mic pulse ring, active menu index, hero underline, focus ring |
| Muted | #7A6F63 | Metadata only, at 16px and above |
| Sunflower | #F5C24B | Flat colour block inside illustration; secondary menu chip |
| Mint | #7FD1B9 | Flat colour block inside illustration; secondary menu chip |
Text on #2B3A8F is #FFFFFF (contrast ā 8.6:1). Sunflower and mint are used only as flat colour blocks and secondary chips ā never as gradients. No blue-indigo primary on white anywhere; the generic indigo/blue-on-white SaaS template is forbidden for this project.
Typography
#FF6B35.Shape language. Chunky rounded rectangles and capsules: 28px radii on cards, fully pill buttons and chips, 3px solid ink-blue borders on interactive blocks, and soft offset shadows (0 6px 0 rgba(23,26,43,0.10)) that make cards feel like stickers laid on cream. Colour-blocked panels have hard straight edges where they meet the page edge and are rounded only on the inner corner. No glass, no blur, no gradients.
Layout. Single-column, mobile-first, with generous 20/32/64px gutters. The first screen is one full-bleed cream field with a colour-blocked illustration panel bleeding off the right edge on desktop and stacking above the headline on mobile. The main menu is a vertical list of five oversized rows ā big numeral, label, one-line description, coral arrow ā each its own bordered card, never a grid of identical hover-lift tiles. Sections are separated by full-width colour-block bands (sunflower, mint) rather than hairlines. Everything is keyboard-numbered 1ā5 to mirror the original console menu, and each row is a real button with a visible number badge.
Imagery. Custom flat character illustration of Emoto itself: a rounded, friendly speaker-creature with a big ear on one side and a screen-face on the other, drawn in thick ink-blue outlines with flat coral, sunflower, and mint fills on cream ā plus a small set of spot illustrations for each capability (a microphone, a photo with text lines lifting off it, a film frame, an open book). No stock photography, no device mockups, no gradient blobs. Illustration is always flat colour on the cream ground and may bleed off the right edge.
The public entry is the Main Menu, and its signature concept is "the menu as a spoken greeting": the first screen is not a centred SaaS hero but a cream field split asymmetrically, where the type itself is the image.
#2B3A8F, and "Aku Emoto, teman pintarmu." on line two with "teman pintarmu" in coral #FF6B35 and a hand-drawn coral underline. The headline runs at 44px mobile / 112px desktop and spans nearly the full column width.#FF6B35 colour block that bleeds off the right viewport edge, with the flat Emoto character illustration sitting half on the block and half on the cream, cropped by the edge.No gradient, no centred stack, no blue button on white. The concept recomposes only accepted content ā the greeting, the five options, and the voice entry ā into a first screen that feels like a friend speaking to Alfian.
Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: layered_2d
Landing Hero Motion Brief
#FFF7EC field; ink-blue "Halo, Alfian." above coral "teman pintarmu." with its hand-drawn underline; the ink-blue "Mulai bicara" pill with a coral mic glyph and the quiet "atau pilih dari menu" link; the coral block bleeding off the right edge with the Emoto character half on it; the first numbered menu row just entering the fold.id-ID) language. (explicit) Rationale: the source calls recognize_google(audio, language="id-ID").ind). (explicit) Rationale: the source calls image_to_string(..., lang='ind').video.read() once and releases the capture.bicara function prints and speaks every message.font-size: clamp(...) with its mobile size) to fit, with no other element covering any part of them. Imagery, decoration, and motion may be cropped, bled off an edge, rotated, overlapped, or cut as the creative direction asks, as long as they cover no readable text or control. (explicit ā creative direction)prefers-reduced-motion, the interface provides a usable static arrangement: reveals resolve instantly, looping indicators become static, and every menu option remains fully readable and reachable. (explicit ā creative direction)Source-specified technology is preserved exactly.
speech_recognition (sr.Recognizer, sr.Microphone) with Google's recognition service at language="id-ID".pyttsx3, initialized with rate = 175 and volume = 1.0.cv2) ā VideoCapture, read, cvtColor(BGR2RGB), release.pytesseract with Tesseract and the Indonesian language model (lang='ind').PIL.Image) for opening photos and converting video frames to images.np) for frame array handling.time, sys.No server, database, container, or orchestration layer is required by the accepted scope: Emoto is a local, single-user program with no persisted state.
Constraints (source-stated, binding)
id-ID) language.ind).Assumptions (narrow, labeled)
Defaults (not specified by the user)
Explicit exclusions
matematika, bahasa, ipa, ips, and default.No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No comments yet. Be the first!