{"id":30222887,"url":"https://github.com/khip01/scanthesis","last_synced_at":"2026-04-15T18:01:36.455Z","repository":{"id":309201149,"uuid":"968681615","full_name":"Khip01/Scanthesis","owner":"Khip01","description":"\"What you see is what you copy.\" - Flutter desktop app with a customizable AI API, using Google Gemini to OCR code from images","archived":false,"fork":false,"pushed_at":"2025-09-13T15:11:55.000Z","size":2519,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-13T16:42:36.174Z","etag":null,"topics":["ai-powered-tools","flutter-desktop","google-ai-studio","linux-app","ocr","windows-app"],"latest_commit_sha":null,"homepage":"https://khip01.github.io/me/#/creation/details?id=2pcF","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Khip01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-18T14:31:33.000Z","updated_at":"2025-09-13T15:11:59.000Z","dependencies_parsed_at":"2025-08-28T03:13:00.578Z","dependency_job_id":"3d693a37-cc4f-496a-8e95-a2ea46891425","html_url":"https://github.com/Khip01/Scanthesis","commit_stats":null,"previous_names":["khip01/scanthesis"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Khip01/Scanthesis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Khip01%2FScanthesis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Khip01%2FScanthesis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Khip01%2FScanthesis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Khip01%2FScanthesis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Khip01","download_url":"https://codeload.github.com/Khip01/Scanthesis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Khip01%2FScanthesis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31853279,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-powered-tools","flutter-desktop","google-ai-studio","linux-app","ocr","windows-app"],"created_at":"2025-08-14T11:18:09.835Z","updated_at":"2026-04-15T18:01:36.436Z","avatar_url":"https://github.com/Khip01.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Scanthesis-AI%20Code%20Extraction-blue?style=for-the-badge\" alt=\"Scanthesis - AI Code Extraction\" /\u003e\n  \u003ch1\u003e🔍 Scanthesis App 🖥️\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eExtract code from images and get AI-powered responses\u003c/strong\u003e\u003c/p\u003e\n  \u003cp\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Flutter-Desktop-02569B?style=flat-square\u0026logo=flutter\u0026logoColor=white\" alt=\"Flutter\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Windows-Tested-0078D6?style=flat-square\u0026logo=windows\u0026logoColor=white\" alt=\"Windows\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Linux-Tested-FCC624?style=flat-square\u0026logo=linux\u0026logoColor=black\" alt=\"Linux\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Gemini%201.5-Flash-8E75B2?style=flat-square\u0026logo=google\u0026logoColor=white\" alt=\"Gemini 1.5 Flash\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/API-Customizable-4CAF50?style=flat-square\u0026logo=postman\u0026logoColor=white\" alt=\"Customizable API\" /\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://i.ibb.co.com/yKpD2w7/app-clean.jpg\" alt=\"Scanthesis App Screenshots\" style=\"width: 750px; border-radius:12px; box-shadow: 0 4px 8px rgba(0,0,0,0.2);\"\u003e\n\u003c/p\u003e\n\n## Overview\n**Scanthesis** is a simple multi-platform desktop application built with Flutter, designed primarily for extracting code from images through AI-powered services. The app provides a straightforward interface similar to chat AI applications, with each interaction consisting of a single prompt and response.\n\n## Features\n- **Code Extraction from Images**: Convert code in images to text using AI services\n- **Custom API Integration**: Connect to your preferred AI backend by configuring endpoints\n- **Platform Support**: \n  - Fully tested and **functional on Windows 11 and Linux** (ubuntu/debian based)\n  - Built with Flutter for potential macOS compatibility _(untested)_\n- **Simple Chat Interface**: Single prompt and response per chat session\n- **Customizable Backend**: Use the included Golang API example (using Gemini 1.5 Flash) or configure your own AI service\n- **Markdown Output**: Receive AI responses formatted in Markdown\n\n## Technical Implementation\nThis application serves as a desktop interface for AI services, allowing you to:\n- Configure API endpoints in the settings page\n- Use the included Golang backend example (requires your API key)\n- Customize the JSON response structure to work with different AI providers\n\n\u003cbr\u003e\n\n### So? What do you want to do with this repository? 🤔 💭\n\n\u003cbr\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eI want to \u003cstrong\u003einstall this cool app on my device\u003c/strong\u003e so I can use it 👊🏼😎\u003c/summary\u003e\n\n## Getting Started\n\nYou can use either your own [My Custom API (Option 2)](#option-2-using-a-custom-api), or the [Simple Built-in Golang API that comes with this project (Option 1)](#option-1-using-the-built-in-golang-api) _(without the pain of creating your own API and manually editing the source code)_.\n\n### Option 1: Using the Built-in Golang API\n\nThe repository includes a simple Golang API implementation that connects to Gemini 1.5 Flash.\n\n1. __Download the separate API from the [latest release](https://github.com/Khip01/Scanthesis/releases) according to your operating system (Windows/Linux).__\n\n2. __Run the API server using command-line arguments for endpoint and API key:__\n\n   ```bash\n   # Linux/macOS\n   ./scanthesis_api --endpoint=\"localhost:8080\" --api_key=\"your_api_key_here\"\n   ```\n\n   ```cmd\n   :: Windows\n   scanthesis_api.exe --endpoint=\"localhost:8080\" --api_key=\"your_api_key_here\"\n   ```\n\n   ```bash\n   # Or if you want to build from source (inside scanthesis_api folder from this project):\n   go run main.go --endpoint=\"localhost:8080\" --api_key=\"your_api_key_here\"\n   ```\n\n\u003e __ℹ️ NOTE__ \\\n\u003e You can obtain an API key from [Google AI Studio](https://aistudio.google.com/apikey)\n\n3. If __you are running this app on Linux__, you’ll need to install some additional libraries so that the `tray_manager` (system tray) and `hotkey_manager` (global hotkeys) plugins work correctly. You can see the installation tutorial for the [__REQUIRED System Dependencies__ in the following release section](https://github.com/Khip01/Scanthesis/releases).\n\n4. Launch the Scanthesis desktop application and configure the endpoint URL in the settings page to match your API server (default: `http://localhost:8080/api`).\n\n5. After that, you're __ready to use the app__ 🔥🎉\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n### Option 2: Using a Custom API\n\nIf you prefer to use your own AI backend:\n\n1. If __you are running this app on Linux__, you’ll need to install some additional libraries so that the `tray_manager` (system tray) and `hotkey_manager` (global hotkeys) plugins work correctly. You can see the installation tutorial for the [__REQUIRED System Dependencies__ in the following release section](https://github.com/Khip01/Scanthesis/releases).\n2. Launch the Scanthesis application and navigate to the settings page\n3. Enter your custom API endpoint URL in the designated field\n    \u003cp align=\"left\"\u003e\n      \u003cimg src=\"https://i.ibb.co.com/m3SXzJp/api-settings-page.png\" alt=\"Scanthesis settings - API Endpoint\" style=\"width:600px; border-radius:12px\"\u003e\n    \u003c/p\u003e\n\n4. __If your API response returns a JSON structure that differs__ from the default JSON of this application, you'll need to manually modify the response model code of this app:\n   \n   Open `scanthesis_app/lib/models/api_response.dart` and customize the `MyCustomResponse` class to match your API's response structure:\n   \n   ```dart\n   class MyCustomResponse {\n     final String response;\n     // Add or modify fields according to your JSON response structure\n   \n     MyCustomResponse({required this.response});\n   \n     factory MyCustomResponse.fromJson(Map\u003cString, dynamic\u003e json) {\n       return MyCustomResponse(response: json['response']);\n     }\n   \n     Map\u003cString, dynamic\u003e toJson() =\u003e {\"response\": response};\n   \n     @override\n     String toString() =\u003e response;\n   }\n   ```\n\n5. Then build the application according to the [build instructions here](#development-requirements) as a developer 🤓.\n\n5. After that, you're ready to use the app 🔥🎉\n\n\u003cbr\u003e\n\n\u003e __ℹ️ NOTE__ \\\n\u003e The application is configured to send requests with the structure defined in `scanthesis_app/lib/models/api_request.dart`. Customizing the request format is not fully supported in the current version.\n\nFor reference, the application sends requests in the following format: \u003cbr\u003e\n_Contents of the JSON Request Structure from Scanthesis to the API_\n```json\n{\n  \"files\": [\"path/to/file1.jpg\", \"path/to/file2.png\"],\n  \"prompt\": \"User's text prompt\"\n}\n```\n\nEnsure your custom API can handle this format, or modify the request model in the source code if necessary.\n\n\u003c/details\u003e\n\n\n\n\u003cbr\u003e\n\n\n\n\u003cdetails\u003e\n\u003csummary\u003eI want to \u003cstrong\u003edevelop\u003c/strong\u003e and understand \u003cstrong\u003ethis application as a developer\u003c/strong\u003e, so i can contribute ☝️🤓\u003c/summary\u003e\n\n## Development Requirements\n\n### Environment Setup\n- **Flutter**: Version 3.32.4 or above\n- **Supported Development Platforms**:\n  - **Windows**: Windows 11 Home 23H2 with Android Studio Hedgehog | 2023.1.1 Patch 2\n  - **Linux**: Ubuntu/Debian based systems (Tested on KDE Plasma 6 Wayland) with Android Studio Meerkat Feature Drop | 2024.3.2 Patch 1\n- **Additional Tools**:\n  - Postman (for API testing)\n\n### Prerequisites\nBefore running the application, ensure your Flutter environment is properly configured:\n\n```bash\n# Verify Flutter installation and dependencies\nflutter doctor\n```\n\nMake sure all platform-specific requirements are met:\n- For Windows: Windows desktop development is enabled\n- For Linux: Linux desktop development is enabled\n\n```bash\n# Enable desktop development\nflutter config --enable-windows-desktop\nflutter config --enable-linux-desktop\n```\n\n#### Linux System Dependencies\nIf developing on Linux, you'll need to install additional system packages for certain Flutter plugins:\n\n```bash\n# For tray_manager plugin (system tray functionality)\n# For Ubuntu/Debian-based distributions\nsudo apt-get install libayatana-appindicator3-dev\n# OR alternative package (for older distributions)\nsudo apt-get install appindicator3-0.1 libappindicator3-dev\n\n# For hotkey_manager plugin (keyboard shortcuts)\nsudo apt-get install keybinder-3.0\n```\nThese packages are required for the application's system tray and global hotkey functionality to work correctly.\n\n## Linux Build Instruction\n\nScanthesis provides a convenient way to build and package the application for various Linux distributions. The included scripts automatically create packages for Debian-based systems (.deb), Fedora/RHEL (.rpm), Arch Linux (.tar.zst), and a universal AppImage.\n\n### Building Linux Packages\n\nTo build the application for Linux and create distribution packages:\n\n1. Navigate to the `scanthesis_app` directory\n2. Run the build and package script:\n   ```bash\n   cd scanthesis_app\n   chmod +x build_and_package_linux.sh\n   ./build_and_package_linux.sh\n   ```\n3. The packages will be created in the linux_packages directory:\n- `scanthesis_1.0.0_amd64.deb` - For Debian, Ubuntu, Linux Mint, etc.\n- `rpm_output/scanthesis-1.0.0-1.fc42.x86_64.rpm` - For Fedora, RHEL, CentOS, etc.\n- `scanthesis-1.0.0-1-x86_64.pkg.tar.zst` - For Arch Linux, Manjaro, etc.\n- `scanthesis_1.0.0-x86_64.AppImage` - Universal Linux package\n\n### Installation from Packages\n#### Debian/Ubuntu and derivatives:\n```bash\nsudo dpkg -i linux_packages/scanthesis_1.0.0_amd64.deb\n```\n#### Fedora/RHEL and derivatives:\n```bash\nsudo rpm -i linux_packages/rpm_output/scanthesis-1.0.0-1.fc42.x86_64.rpm\n```\n#### Arch Linux and derivatives:\n```bash\nsudo pacman -U linux_packages/scanthesis-1.0.0-1-x86_64.pkg.tar.zst\n```\n#### Any Linux distribution (AppImage):\n```bash\nchmod +x linux_packages/scanthesis_1.0.0-x86_64.AppImage\n./linux_packages/scanthesis_1.0.0-x86_64.AppImage\n```\n\n### Advanced Options\nThe packaging script supports several options:\n\n```bash\n./build_and_package_linux.sh --help\n```\nCommon options include:\n- `--app-name NAME`: Set the application name (default: scanthesis)\n- `--version VERSION`: Set the application version (default: 1.0.0)\n- `--icon PATH`: Path to the application icon (default: assets/app_icon/scanthesis-app-icon-600x600.png)\n- `--force-docker`: Use Docker for all package formats regardless of native tools\n- `--no-docker`: Don't use Docker even if native tools are missing\n\n## Windows Build Instruction\n\nScanthesis also provides a way to create a Windows installer using Inno Setup.\n\n### Building Windows Installer\n\nTo create a Windows installer:\n\n1. Make sure you have [Inno Setup](https://jrsoftware.org/isinfo.php) installed\n2. Build the Flutter application for Windows:\n   ```bash\n   cd scanthesis_app\n   flutter build windows --release\n   ```\n3. Run the Inno Setup script file (located at `windows/installer/scanthesis_build_installer.iss`) using the Inno Setup Compiler\n4. The installer will be created in the `windows/installer` folder named `scanthesis_setup_v{version}.exe` (where `{version}` is the version defined in the .iss file)\n\n### Installer Configuration\n\nIf you want to customize the installer, you can modify the `windows/installer/scanthesis_build_installer.iss` file. This file contains the configuration for creating the Windows installer, including application information, files to include, and installation options.\n\n\u003c/details\u003e\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkhip01%2Fscanthesis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkhip01%2Fscanthesis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkhip01%2Fscanthesis/lists"}