
Research
/Security News
DuckDB npm Account Compromised in Continuing Supply Chain Attack
Ongoing npm supply chain attack spreads to DuckDB: multiple packages compromised with the same wallet-drainer malware.
@aivue/image-caption
Advanced tools
AI-powered image captioning for Vue.js applications using Hugging Face BLIP models
πΌοΈ AI-powered image captioning for Vue.js applications using OpenAI Vision API
Generate intelligent, contextual captions for images using GPT-4 Vision, the most advanced computer vision model available. Perfect for accessibility, content management, social media, and AI-powered applications.
npm install @aivue/image-caption
<template>
<div>
<AiImageCaption
:api-key="openaiApiKey"
@caption-generated="onCaptionGenerated"
/>
</div>
</template>
<script setup>
import { AiImageCaption } from '@aivue/image-caption';
import '@aivue/image-caption/dist/image-caption.css';
const openaiApiKey = import.meta.env.VITE_OPENAI_API_KEY;
const onCaptionGenerated = (result) => {
console.log('Generated caption:', result.caption);
};
</script>
Set your API key in environment variables:
# .env
VITE_OPENAI_API_KEY=your-openai-api-key
Prop | Type | Default | Description |
---|---|---|---|
apiKey | string | '' | OpenAI API key |
model | string | 'gpt-4o' | AI model to use |
autoCaption | boolean | false | Auto-generate caption on image upload |
maxHistorySize | number | 20 | Maximum number of captions to keep in history |
Event | Payload | Description |
---|---|---|
caption-generated | ImageCaptionResult | Fired when caption is successfully generated |
caption-error | Error | Fired when caption generation fails |
image-uploaded | ImageUploadEvent | Fired when image is uploaded |
image-removed | void | Fired when image is removed |
<script setup>
import { useImageCaption } from '@aivue/image-caption';
const {
generateCaption,
uploadImage,
isProcessing,
result,
error,
history
} = useImageCaption({
config: {
apiKey: import.meta.env.VITE_OPENAI_API_KEY,
model: 'gpt-4o'
}
});
// Generate caption for uploaded file
const handleFileUpload = async (file) => {
try {
await uploadImage(file);
const result = await generateCaption(file);
console.log('Caption:', result.caption);
} catch (error) {
console.error('Failed:', error);
}
};
</script>
Model | ID | Description | Best For |
---|---|---|---|
GPT-4o | gpt-4o | Latest and most capable vision model | General use, highest quality |
GPT-4o Mini | gpt-4o-mini | Faster and more cost-effective | High volume, cost-sensitive apps |
GPT-4 Turbo | gpt-4-turbo | High-intelligence vision model | Detailed analysis, complex scenes |
interface ImageCaptionConfig {
apiKey?: string; // OpenAI API key
model?: string; // Model ID to use ('gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo')
}
interface ImageCaptionOptions {
model?: string; // Override model for this request
prompt?: string; // Custom prompt for caption generation
detail?: 'low' | 'high' | 'auto'; // Image analysis detail level
maxTokens?: number; // Maximum response tokens (300)
temperature?: number; // Creativity level (0.7)
}
The component comes with beautiful default styles, but you can customize them:
/* Override default styles */
.ai-image-caption {
--primary-color: #your-color;
--border-radius: 12px;
--spacing: 16px;
}
/* Custom upload area */
.upload-area {
border: 2px dashed #your-color;
background: #your-background;
}
/* Custom button styles */
.generate-btn {
background: linear-gradient(135deg, #your-gradient);
}
<script setup>
import { useImageCaption } from '@aivue/image-caption';
const { generateBatchCaptions } = useImageCaption();
const processBatch = async (imageFiles) => {
const result = await generateBatchCaptions({
images: imageFiles,
options: {
model: 'gpt-4o',
prompt: 'Describe this image in detail for accessibility purposes.',
detail: 'high'
}
});
console.log(`Processed ${result.successCount} images`);
console.log('Results:', result.results);
};
</script>
<script setup>
import { useImageCaption, resizeImageFile } from '@aivue/image-caption';
const { generateCaption } = useImageCaption();
const processLargeImage = async (file) => {
// Resize large images for faster processing
const resizedFile = await resizeImageFile(file, {
maxWidth: 800,
maxHeight: 600,
quality: 0.8
});
const result = await generateCaption(resizedFile);
return result;
};
</script>
<script setup>
import { useImageCaption } from '@aivue/image-caption';
const { exportHistory, history } = useImageCaption();
const downloadHistory = () => {
const jsonData = exportHistory('json');
const blob = new Blob([jsonData], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'image-captions.json';
a.click();
URL.revokeObjectURL(url);
};
</script>
Pricing:
<template>
<div>
<img :src="imageUrl" :alt="altText" />
<AiImageCaption
:api-key="apiKey"
@caption-generated="updateAltText"
/>
</div>
</template>
<script setup>
const altText = ref('');
const updateAltText = (result) => {
altText.value = result.caption;
};
</script>
<template>
<div class="social-post">
<AiImageCaption
:api-key="apiKey"
:auto-caption="true"
@caption-generated="suggestHashtags"
/>
<textarea v-model="postText" placeholder="Write your post..."></textarea>
</div>
</template>
<script setup>
const postText = ref('');
const suggestHashtags = (result) => {
const hashtags = generateHashtags(result.caption);
postText.value += `\n\n${hashtags}`;
};
</script>
We welcome contributions! Please see our Contributing Guide for details.
MIT License - see LICENSE for details.
Made with β€οΈ by reachbrt
FAQs
AI-powered image captioning for Vue.js applications using Hugging Face BLIP models
We found that @aivue/image-caption demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
Ongoing npm supply chain attack spreads to DuckDB: multiple packages compromised with the same wallet-drainer malware.
Security News
The MCP Steering Committee has launched the official MCP Registry in preview, a central hub for discovering and publishing MCP servers.
Product
Socketβs new Pull Request Stories give security teams clear visibility into dependency risks and outcomes across scanned pull requests.