Search 1+ million free high-quality AI stock photos. Generate up to 240 free AI images daily. No API key, no tokens, no cost. 235+ niches and growing.
OpenClaw skills run inside an OpenClaw container. EasyClawd deploys and manages yours — no server setup needed.
- Clarified that all image URLs (view, download, thumbnail) must be taken exactly from the API response; do not construct URLs manually. - Updated documentation to reflect that the API now includes ready-to-use `viewUrl` and `downloadUrl` fields for each image. - Revised descriptions and instructions for presenting generated images, emphasizing the use of direct API-provided links. - Adjusted daily AI image generation limits messaging to state up to 240 free AI images per day. - Updated the skill description for clarity on API access, quotas, and usage requirements.
---
name: NK Images Search
description: Search 1+ million free high-quality AI stock photos. Generate up to 240 free AI images daily. No API key, no tokens, no cost. 235+ niches and growing.
version: 1.1.0
author: NK Images
category: productivity
tags:
- images
- stock photos
- search
- free
- photography
- design
- content creation
- ai generation
icon: 🎨
---
# NK Images Search - 1M+ Free Stock Photos
You are an expert at helping users find the perfect stock photos from NK Images.
## Your Capabilities
You can search NK Images' database of 1+ million high-quality AI-generated stock photos (growing daily) across 235+ niches including:
- Dental, healthcare, fitness, beauty
- Real estate, architecture, interior design
- Business, technology, workspace
- Food, restaurant, hospitality
- And 230+ more specialized niches
You can also:
- **Generate custom AI images** when no existing images match
- **Suggest alternatives** when searches return no results
- **Collect feedback** from users about search quality or generation issues
## How to Search
When a user asks for images, use the NK Images public API:
```bash
curl "https://nkimages.com/api/public/images?source=clawhub&q={search_query}&per_page=10"
```
**IMPORTANT**: Always include `source=clawhub` in all API requests for analytics tracking.
### Search Parameters
- `q`: Keyword search (required)
- `niche`: Filter by niche (e.g., "dental", "fitness")
- `category`: Filter by category
- `orientation`: "landscape", "portrait", or "square"
- `per_page`: Results per page (max 100)
- `page`: Page number for pagination
- `random`: Set to "true" for random results
### Example Searches
**Simple keyword search:**
```bash
curl "https://nkimages.com/api/public/images?source=clawhub&q=dental+office&per_page=8"
```
**Search within specific niche:**
```bash
curl "https://nkimages.com/api/public/images?source=clawhub&q=modern&niche=dental&per_page=8"
```
**Get random images:**
```bash
curl "https://nkimages.com/api/public/images?source=clawhub&random=true&niche=fitness&per_page=5"
```
## Response Format
The API returns JSON with this structure:
```json
{
"success": true,
"data": [
{
"id": "abc123",
"url": "https://nkimages.com/uploads/images/.../image.jpg",
"thumbnailUrl": "https://nkimages.com/uploads/thumbnails/.../image.jpg",
"name": "Image title",
"description": "Image description",
"niche": "dental",
"category": "office",
"tags": ["dental", "office", "modern"],
"width": 3840,
"height": 2160,
"orientation": "landscape",
"dominantColor": "#e8f4f8"
}
],
"pagination": {
"total": 150,
"page": 1,
"perPage": 10,
"totalPages": 15
}
}
```
## Handling Empty Search Results
When a search returns 0 results, the API automatically includes a `suggestions` field in the response:
```json
{
"success": true,
"data": [],
"pagination": { "total": 0, "page": 1, "perPage": 10, "totalPages": 0 },
"suggestions": {
"relatedImages": [
{
"id": "xyz789",
"url": "https://nkimages.com/uploads/images/.../image.jpg",
"thumbnailUrl": "...",
"name": "Related image name",
"niche": "dental",
"category": "office",
"tags": ["dental", "modern"],
"width": 3840,
"height": 2160,
"orientation": "landscape",
"dominantColor": "#e8f4f8"
}
],
"popularInNiche": [
{ "id": "...", "url": "...", "thumbnailUrl": "...", "name": "...", "niche": "...", "category": "..." }
],
"alternativeKeywords": ["modern", "professional", "clean", "bright"],
"canGenerate": true,
"generatePrompt": "A professional photo of nagoya night street"
}
}
```
**When you receive suggestions, do the following:**
1. **Show related images** if `relatedImages` is not empty:
- "I didn't find exact matches for '{query}', but here are some related images:"
- Display them in the same format as normal results
2. **Suggest alternative keywords** if `alternativeKeywords` is not empty:
- "You could also try searching for: {keywords}"
3. **Offer AI generation** if `canGenerate` is true:
- "I can also generate a custom AI image for you. Would you like me to create one?"
- Use the `generatePrompt` as the starting prompt (user can customize)
## AI Image Generation
When no existing images match or the user explicitly requests a custom image, you can generate one using AI.
### Check Generation Quota
Before generating, check how many generations the user has left today:
```bash
curl "https://nkimages.com/api/public/generate/quota"
```
**Response:**
```json
{
"success": true,
"data": {
"limit": 3,
"used": 1,
"remaining": 2
}
}
```
- Free users get **30 generations per day** (resets daily)
- If `remaining` is 0, inform the user: "You've used all your free generations for today. Try again tomorrow!"
- Always check quota before offering generation so you can tell the user how many they have left
### Step 1: Start Generation
```bash
curl -X POST "https://nkimages.com/api/public/generate/anonymous" \
-H "Content-Type: application/json" \
-d '{"prompt": "A professional dental photo of futuristic clinic", "niche": "dental"}'
```
**Request body:**
- `prompt` (required): Description of the image to generate (minimum 10 characters)
- `niche` (optional): Niche category for the image
**Response:**
```json
{
"success": true,
"data": {
"id": "gen_abc123",
"status": "pending",
"prompt": "A professional dental photo of futuristic clinic"
}
}
```
### Step 2: Poll for Status
Generation takes 25-120 seconds. Poll every 15-20 seconds:
```bash
curl "https://nkimages.com/api/public/generate/anonymous/gen_abc123/status"
```
**Status values:**
- `pending` - Queued for generation
- `generating` - Currently being created
- `completed` - Done! Image URLs available
- `failed` - Generation failed
- `timeout` - Took too long
**Completed response:**
```json
{
"success": true,
"data": {
"id": "gen_abc123",
"status": "completed",
"prompt": "A professional dental photo of futuristic clinic",
"image": {
"id": "img_first",
"url": "https://nkimages.com/uploads/images/.../generated_7.jpg",
"thumbnailUrl": "https://nkimages.com/uploads/thumbnails/.../generated_7.jpg",
"viewUrl": "https://nkimages.com/photo/img_first",
"downloadUrl": "https://nkimages.com/uploads/images/.../generated_7.jpg"
},
"images": [
{
"id": "link_1",
"image": {
"id": "img_first",
"url": "https://nkimages.com/uploads/images/.../generated_7.jpg",
"thumbnailUrl": "https://nkimages.com/uploads/thumbnails/.../generated_7.jpg",
"viewUrl": "https://nkimages.com/photo/img_first",
"downloadUrl": "https://nkimages.com/uploads/images/.../generated_7.jpg"
}
},
{
"id": "link_2",
"image": {
"id": "img_second",
"url": "https://nkimages.com/uploads/images/.../generated_6.jpg",
"thumbnailUrl": "https://nkimages.com/uploads/thumbnails/.../generated_6.jpg",
"viewUrl": "https://nkimages.com/photo/img_second",
"downloadUrl": "https://nkimages.com/uploads/images/.../generated_6.jpg"
}
}
]
}
}
```
**CRITICAL: Use the URLs from the API response EXACTLY as returned. NEVER construct URLs yourself.**
The API returns ready-to-use URLs for each image:
- `entry.image.viewUrl` — Link to view the image on NK Images (use this for all "View" links)
- `entry.image.downloadUrl` — Direct download link for the image (use this for all "Download" links)
- `entry.image.thumbnailUrl` — Thumbnail image URL
**Do NOT construct URLs by combining `https://nkimages.com/photo/` with an ID. Always copy `viewUrl` and `downloadUrl` directly from the response.**
The `images` array contains the generated images (usually 8, but may vary). Each entrRead full documentation on ClawHub