IRIS is an open-source framework designed to help developers build AI-powered image search applications with ease. It provides a modular, extensible architecture that handles image capture, processing, search API integration, and result display across web and mobile platforms via Capacitor.
The Image Recognition Integration System (IRIS) was created to streamline the development of image search applications. By abstracting common tasks—such as capturing media, communicating with AI-powered search backends, and displaying results—IRIS lets you focus on your app’s unique features instead of boilerplate.
- Cross-Platform: Web app with static export, wrapped for iOS and Android via Capacitor.
- Modular Architecture: Clear separation between pages, UI components, and backend clients.
- Secure Environment Configuration: Uses
.env.localfor API URLs and credentials instead of public JSON. - Persistent History: Stores previous search images in IndexedDB for offline access.
-
Clone the repository:
git clone https://github.com/oss-slu/image-recognition-integration-system.git cd image-recognition-integration-system -
Install dependencies:
npm install # or yarn install -
Run in development:
npm run dev # or yarn dev -
Build & Export for production:
npm run build npm run export
To deploy IRIS as a native app on iOS or Android, follow these steps:
-
Install Capacitor CLI (if not already installed):
npm install @capacitor/core @capacitor/cli --save
-
Initialize Capacitor (one-time, if not done):
npx cap init # Use com.iris.app for App ID and "image-recognition-integration-system" for App Name -
Add Platforms:
npx cap add ios npx cap add android
-
Configure: The file
capacitor.config.tssets yourappId,appName, andwebDir. By default,webDirisout(the export directory). -
Build & Sync:
npm run build npm run export npx cap copy -
Open & Run:
npx cap open ios # or npx cap open android
IRIS now uses environment-based configuration instead of a public JSON file
Create a .env.local file in the project root with:
NEXT_PUBLIC_API_URL=http://localhost:5050
API_SECRET_KEY=7b5ef4e74ed218a9d77ca03a3f74e86d
ALLOWED_ORIGIN=http://localhost:3000NEXT_PUBLIC_API_URL = URL of your backend (proxied through Express). API_SECRET_KEY = Secret key required for backend authentication. ALLOWED_ORIGIN = Domain allowed to access your backend.
This project includes an automated GitHub Action that blocks commits exposing sensitive configuration (e.g., public/setup.json or API keys).
The workflow file is located at .github/workflows/security-scan.yml.
/(Home): Capture or upload images, send to API, and display search results./about: Overview of the IRIS framework and project goals./loginscreen: User authentication interface (stubbed for POC)./imageGallery: Interactive gallery showcasing image search examples and sample queries./previousImages: View and manage history of previously searched images (stored in IndexedDB)./profile: User profile and settings page (for future integration).
- CameraButton: Opens device camera or file picker.
- ImageDisplay: Renders a single image with metadata.
- ImageGrid: Arranges multiple
ImageDisplaycards in a responsive grid. - ImageModal: Fullscreen modal for viewing image details and search metadata.
- NavigationBar: Top-level navigation with links to pages.
lib/modelClient.ts: API client for communicating with the image recognition backend.utils/indexedDbHelpers.ts: Helpers for saving/retrieving image records in IndexedDB.types/config.ts: TypeScript definitions for runtime configuration and theming.
Contributions are welcome! Please review CONTRIBUTING.md for guidelines on issue reporting, coding standards, and pull requests.
This project is licensed under the GNU Lesser General Public License (LGPL), version 3.0 or later.
You are free to use, modify, and distribute this software under the terms of the LGPL, provided that any modifications to the library itself are also shared under the same license. When used in a larger application, the rest of the application can be licensed under different terms.