How does AI generate product descriptions from photos?
A marketplace seller takes a product photo with their phone and presses 'Publish'. The problem: manual description takes up to 30 minutes, quality and consistency suffer. We solve this with a combination of Vision API and LLM — the system offers pre-written text based on the photo and product category in 2–4 seconds. Our team has over 10 years of experience in mobile development and has completed 40+ AI service integrations. Time savings for the average store — up to 40% of a manager's workday, and copywriting costs are reduced by 70%. One medium-sized store saves $2,500 monthly on copywriting costs. Our basic integration costs $2,000 and typical ROI is achieved within 3 months.
How to implement AI product description generation in a mobile app?
Visual analysis of photos is the first step. Google Cloud Vision API returns object tags, color, brands on packaging, text on labels (OCR). For mobile apps, a multimodal LLM (GPT-4o, Gemini Pro Vision) is more convenient — a single request with an image analyzes and generates text at once. Object recognition accuracy reaches 95%.
Structured attributes from the form — the user fills in a minimum: category, price, condition (new/used). This data is included in the prompt as structured context. The rest the model infers from the photo.
Client-Side Implementation
The entire flow is asynchronous: the user selects a photo, presses 'Create description', sees a skeleton loader, and receives editable text in 2–3 seconds.
class DescriptionGeneratorViewModel : ViewModel() {
fun generateDescription(imageUri: Uri, category: String) {
_uiState.value = UiState.Loading
viewModelScope.launch {
try {
val base64Image = imageUri.toBase64(contentResolver)
val response = descriptionApi.generate(
GenerationRequest(
imageBase64 = base64Image,
category = category,
language = Locale.getDefault().language,
maxLength = 300
)
)
_uiState.value = UiState.Success(response.description)
} catch (e: Exception) {
_uiState.value = UiState.Error(e.message)
}
}
}
}
On iOS similarly using async/await + URLSession:
func generateDescription(image: UIImage, category: String) async throws -> String {
let imageData = image.jpegData(compressionQuality: 0.8)!
let base64 = imageData.base64EncodedString()
let request = DescriptionRequest(imageBase64: base64, category: category, language: Locale.current.languageCode ?? "ru")
let response = try await api.generateDescription(request)
return response.text
}
The image is compressed to JPEG quality 0.8 before sending — this reduces payload size from ~3 MB (RAW from camera) to ~300–500 KB without noticeable quality loss for Vision API.
Prompt Engineering for Quality Results
def build_prompt(category: str, image_tags: list, language: str) -> str:
return f"""
You are a professional copywriter for an online marketplace.
Write a product description based on the provided image.
Category: {category}
Detected attributes: {', '.join(image_tags)}
Language: {language}
Requirements:
- 2-3 sentences, 50-100 words
- Start with the main product feature, not "This is a..."
- Include detected color, condition, and brand if visible
- Use active voice
- No adjectives like "great", "amazing", "perfect"
"""
The ban on 'great', 'amazing', and 'perfect' is not a formality. Models by default insert them into every other sentence, making descriptions indistinguishable.
Streaming for Improved Perceived Performance
Instead of waiting for the full response, use streaming via Server-Sent Events. Text appears as it is generated, like in ChatGPT. On Android, this is implemented using okhttp3.EventSource; on iOS, using URLSessionDataTask with the didReceive data delegate. This is especially important for long descriptions (100+ words) so the user doesn't wait 4–5 seconds in emptiness.
Handling Low-Quality Descriptions
Implement a hybrid approach: AI generates a draft, a human finalizes it. According to client feedback, this method reduces manual work by 60%. For automated quality control, use A/B testing of two description versions — AI vs. AI+editor — and track conversion.
Why Choose AI-Generated Product Descriptions?
Our AI-generated product descriptions are 5x faster than manual writing, improving efficiency by 80%.
| Product Type | Length | Focus |
|---|---|---|
| Electronics | 100–150 words | Technical specs + condition |
| Clothing | 60–80 words | Size, color, material, condition |
| Furniture | 80–120 words | Dimensions, material, style |
| Books | 40–60 words | Author, topic, condition |
| Criteria | Cloud Solution | On-device Model |
|---|---|---|
| Speed | 2–4 sec | 1–2 sec |
| Quality | High (GPT-4o) | Medium (Core ML) |
| Network Dependency | Yes | No |
| Updateability | Automatic | Manual replacement |
Deliverables (What's Included)
- API and integration documentation
- Access to the repository with prompts and configs
- Team training on template editing
- Launch support
- Recommendations for A/B testing descriptions
Avoiding Common Integration Mistakes
- Sending RAW without compression increases response time. Always compress to JPEG quality 0.8.
- Ignoring the category — the model generates generic text. Always pass the category in the request.
- No fallback when Vision API fails — the user sees an empty screen. Always show a placeholder or error message.
Work Process
- Analysis: define product categories and image sources.
- API design: request format, Vision API error handling.
- Configure prompt templates by product category.
- Develop client UI with skeleton loader and result editor.
- Implement streaming to improve UX for long descriptions.
- Test on real products and A/B comparison.
Estimated Timelines
Basic integration (photo → description via GPT-4o / Gemini) — 3–4 days. With category-specific prompts and streaming — up to 1 week. Complex projects with on-device processing — from 2 weeks.
Cost breakdown example
Minimal setup: $2,000. Full solution with streaming and on-device: from $8,000. All integrations come with a 30-day satisfaction guarantee.Order an integration estimate today — contact us. Get a consultation on integrating AI into your app. Contact us for a demo and project evaluation.







