# nonhyperion/memocut architecture

> Architecture diagram of the GitHub repository nonhyperion/memocut, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nonhyperion/memocut
- Repository: https://github.com/nonhyperion/memocut

## Overview

MemoCut is an Android app for making video-based sticker-order quizzes. The principal flow selects a video and sticker images, places stickers at times in the video, previews the quiz, lets a player order the stickers, and shows the result. MainActivity delegates screen selection to MainViewModel; the sampled screens also use that model for navigation and shared state. The README is empty, and MainViewModel, HomeScreen, ResultScreen, Image, and Sticker implementations were not sampled, so their internal behavior and some navigation links cannot be verified.

Main entry points: [`app/src/main/java/com/contest/memocut/AskScreen.kt`](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/AskScreen.kt) (Place timed stickers), [`app/src/main/java/com/contest/memocut/AnsScreen.kt`](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/AnsScreen.kt) (Order stickers), [`app/src/main/java/com/contest/memocut/ChooseImageScreen.kt`](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/ChooseImageScreen.kt) (Choose stickers), [`app/src/main/java/com/contest/memocut/MainViewModel.kt`](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/MainViewModel.kt) (Screen and quiz state)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_navigation["App navigation"]
  node_main_activity["Main activity<br/>[MainActivity.kt]"]
  node_home["Home screen<br/>[HomeScreen.kt]"]
end

subgraph group_creation["Quiz creation"]
  node_choose_video["Choose video"]
  node_choose_image["Choose stickers"]
  node_ask["Place timed stickers<br/>[AskScreen.kt]"]
end

subgraph group_playback["Quiz play"]
  node_look["Preview quiz<br/>[LookScreen.kt]"]
  node_answer["Order stickers<br/>[AnsScreen.kt]"]
  node_result["Quiz result<br/>[ResultScreen.kt]"]
end

subgraph group_shared["Shared model"]
  node_view_model["Screen and quiz state<br/>[MainViewModel.kt]"]
  node_sticker["Sticker data<br/>[Sticker.kt]"]
  node_image["Image display<br/>[Image.kt]"]
end

node_user(("User"))
node_media_picker["Android media picker"]

node_user -->|"opens app"| node_main_activity
node_main_activity -->|"obtains model"| node_view_model
node_main_activity -->|"invokes screen"| node_view_model
node_user -->|"uses"| node_home
node_user -->|"selects video"| node_choose_video
node_choose_video -->|"requests video"| node_media_picker
node_media_picker -->|"returns URI"| node_choose_video
node_choose_video -->|"continues with URI"| node_choose_image
node_choose_image -->|"requests images"| node_media_picker
node_media_picker -->|"returns URIs"| node_choose_image
node_choose_image -->|"sets available images"| node_view_model
node_choose_image -->|"opens with video"| node_ask
node_ask -->|"reads and edits state"| node_view_model
node_ask -->|"uses sticker data"| node_sticker
node_ask -->|"renders stickers"| node_image
node_ask -->|"opens preview"| node_look
node_look -->|"reads sticker data"| node_sticker
node_look -->|"renders stickers"| node_image
node_look -->|"starts answering"| node_answer
node_answer -->|"reads sticker data"| node_sticker
node_answer -->|"renders sticker choices"| node_image
node_answer -->|"submits ordering"| node_result
node_answer -->|"navigates"| node_view_model

click node_main_activity "https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/MainActivity.kt"
click node_home "https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/HomeScreen.kt"
click node_view_model "https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/MainViewModel.kt"
click node_choose_video "https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/ChooseVideoScreen.kt"
click node_choose_image "https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/ChooseImageScreen.kt"
click node_ask "https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/AskScreen.kt"
click node_sticker "https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/Sticker.kt"
click node_image "https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/Image.kt"
click node_look "https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/LookScreen.kt"
click node_answer "https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/AnsScreen.kt"
click node_result "https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/ResultScreen.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main_activity,node_home,node_user toneBlue
class node_choose_video,node_choose_image,node_ask toneAmber
class node_look,node_answer,node_result toneMint
class node_view_model,node_sticker,node_image toneRose
class node_media_picker toneIndigo
```

## Components

### App navigation

- [Main activity](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/MainActivity.kt): `app/src/main/java/com/contest/memocut/MainActivity.kt`
- [Home screen](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/HomeScreen.kt): `app/src/main/java/com/contest/memocut/HomeScreen.kt`

### Quiz creation

- [Choose video](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/ChooseVideoScreen.kt): `app/src/main/java/com/contest/memocut/ChooseVideoScreen.kt`
- [Choose stickers](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/ChooseImageScreen.kt): `app/src/main/java/com/contest/memocut/ChooseImageScreen.kt`
- [Place timed stickers](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/AskScreen.kt): `app/src/main/java/com/contest/memocut/AskScreen.kt`

### Quiz play

- [Preview quiz](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/LookScreen.kt): `app/src/main/java/com/contest/memocut/LookScreen.kt`
- [Order stickers](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/AnsScreen.kt): `app/src/main/java/com/contest/memocut/AnsScreen.kt`
- [Quiz result](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/ResultScreen.kt): `app/src/main/java/com/contest/memocut/ResultScreen.kt`

### Shared model

- [Screen and quiz state](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/MainViewModel.kt): `app/src/main/java/com/contest/memocut/MainViewModel.kt`
- [Sticker data](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/Sticker.kt): `app/src/main/java/com/contest/memocut/Sticker.kt`
- [Image display](https://github.com/nonhyperion/memocut/blob/master/app/src/main/java/com/contest/memocut/Image.kt): `app/src/main/java/com/contest/memocut/Image.kt`

### Other components

- **User**
- **Android media picker**

## Connections

- User → Main activity: opens app
- Main activity → Screen and quiz state: obtains model
- Main activity → Screen and quiz state: invokes screen
- User → Home screen: uses
- User → Choose video: selects video
- Choose video → Android media picker: requests video
- Android media picker → Choose video: returns URI
- Choose video → Choose stickers: continues with URI
- Choose stickers → Android media picker: requests images
- Android media picker → Choose stickers: returns URIs
- Choose stickers → Screen and quiz state: sets available images
- Choose stickers → Place timed stickers: opens with video
- Place timed stickers → Screen and quiz state: reads and edits state
- Place timed stickers → Sticker data: uses sticker data
- Place timed stickers → Image display: renders stickers
- Place timed stickers → Preview quiz: opens preview
- Preview quiz → Sticker data: reads sticker data
- Preview quiz → Image display: renders stickers
- Preview quiz → Order stickers: starts answering
- Order stickers → Sticker data: reads sticker data
- Order stickers → Image display: renders sticker choices
- Order stickers → Quiz result: submits ordering
- Order stickers → Screen and quiz state: navigates
