Creating the perfect AI prompt doesn't have to be guesswork. Whether you're generating art with Midjourney, composing music with Suno, or producing video with Runway, the structure of your prompt determines 80% of your output quality. A well-crafted prompt includes the right balance of subject description, style indicators, mood descriptors, and technical parameters โ but remembering which elements work best for each platform can be overwhelming.
Our AI Prompt Generator solves this by walking you through a simple, visual workflow that adapts to your chosen medium. Select your creative medium (art, music, video, writing, or design), describe your subject, pick your style and mood, add technical details where needed, and click Generate. You'll get a professionally structured prompt ready to copy and paste into your AI tool of choice. Learn more about prompt structure in our Prompt Anatomy Guide.
.tool-container {
max-width: 1000px;
margin: 2rem auto;
padding: 2rem;
background: #0f0a1a;
border-radius: 16px;
color: #e2d9f3;
font-family: system-ui, -apple-system, sans-serif;
}
.tool-container h2 {
color: #e2d9f3;
margin-top: 2rem;
margin-bottom: 1rem;
font-size: 1.5rem;
font-weight: 600;
}
.tool-container h3 {
color: #a78bfa;
margin-top: 1.5rem;
margin-bottom: 0.75rem;
font-size: 1.125rem;
font-weight: 500;
}
.medium-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
gap: 1rem;
margin: 1.5rem 0;
}
.medium-card {
background: rgba(139,92,246,0.08);
border: 2px solid rgba(167,139,250,0.2);
border-radius: 12px;
padding: 1.5rem 1rem;
text-align: center;
cursor: pointer;
transition: all 0.2s;
}
.medium-card:hover {
border-color: #7c3aed;
background: rgba(139,92,246,0.15);
transform: translateY(-2px);
}
.medium-card.active {
border-color: #db2777;
background: linear-gradient(135deg, rgba(219,39,119,0.2), rgba(124,58,237,0.2));
}
.medium-icon {
font-size: 2.5rem;
margin-bottom: 0.5rem;
}
.medium-label {
font-weight: 500;
color: #e2d9f3;
}
.input-group {
margin: 1.5rem 0;
}
.input-group label {
display: block;
margin-bottom: 0.5rem;
color: #a78bfa;
font-weight: 500;
}
.input-group input[type="text"],
.input-group textarea {
width: 100%;
padding: 0.875rem;
background: rgba(139,92,246,0.08);
border: 1px solid rgba(167,139,250,0.2);
border-radius: 8px;
color: #e2d9f3;
font-size: 1rem;
font-family: inherit;
transition: border-color 0.2s;
}
.input-group input[type="text"]:focus,
.input-group textarea:focus {
outline: none;
border-color: #7c3aed;
}
.input-group textarea {
min-height: 80px;
resize: vertical;
}
.chip-grid {
display: flex;
flex-wrap: wrap;
gap: 0.75rem;
margin: 1rem 0;
}
.chip {
padding: 0.625rem 1.25rem;
background: rgba(139,92,246,0.08);
border: 1px solid rgba(167,139,250,0.2);
border-radius: 20px;
cursor: pointer;
transition: all 0.2s;
font-size: 0.9rem;
color: #e2d9f3;
}
.chip:hover {
border-color: #7c3aed;
background: rgba(139,92,246,0.15);
}
.chip.active {
border-color: #db2777;
background: linear-gradient(135deg, rgba(219,39,119,0.3), rgba(124,58,237,0.3));
font-weight: 500;
}
.button-group {
display: flex;
gap: 1rem;
margin: 2rem 0;
}
.btn {
padding: 1rem 2rem;
border: none;
border-radius: 12px;
font-size: 1rem;
font-weight: 600;
cursor: pointer;
transition: all 0.2s;
flex: 1;
}
.btn-primary {
background: linear-gradient(135deg, #db2777, #7c3aed);
color: white;
}
.btn-primary:hover {
opacity: 0.9;
transform: translateY(-1px);
}
.btn-secondary {
background: rgba(139,92,246,0.15);
color: #e2d9f3;
border: 1px solid rgba(167,139,250,0.3);
}
.btn-secondary:hover {
background: rgba(139,92,246,0.25);
}
.output-area {
display: none;
margin: 2rem 0;
padding: 1.5rem;
background: rgba(139,92,246,0.08);
border: 1px solid rgba(167,139,250,0.2);
border-radius: 12px;
}
.output-area.visible {
display: block;
}
.prompt-output {
background: #1a1025;
padding: 1.25rem;
border-radius: 8px;
margin-bottom: 1rem;
font-family: 'Courier New', monospace;
font-size: 1rem;
line-height: 1.6;
color: #22d3ee;
word-wrap: break-word;
}
.btn-copy {
width: 100%;
padding: 0.875rem;
background: linear-gradient(135deg, #7c3aed, #22d3ee);
color: white;
border: none;
border-radius: 8px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s;
}
.btn-copy:hover {
opacity: 0.9;
}
.anatomy-labels {
display: flex;
flex-wrap: wrap;
gap: 1rem;
margin-top: 1rem;
padding-top: 1rem;
border-top: 1px solid rgba(167,139,250,0.2);
}
.anatomy-label {
display: flex;
align-items: center;
gap: 0.5rem;
font-size: 0.875rem;
}
.label-color {
width: 12px;
height: 12px;
border-radius: 3px;
}
.section-hidden {
display: none;
}
@media (max-width: 640px) {
.tool-container {
padding: 1.25rem;
}
.medium-grid {
grid-template-columns: repeat(2, 1fr);
}
.button-group {
flex-direction: column;
}
}
๐จ Build Your Perfect Prompt
1. Select Your Medium
2. Describe Your Subject
3. Choose Your Style
4. Select Mood / Atmosphere
5. Lighting (Optional)
6. Aspect Ratio
7. Quality Details
8. Target Platform
Your Generated Prompt:
Subject
Style
Mood/Atmosphere
Technical Details
(function() {
const state = {
medium: null,
subject: '',
style: null,
mood: null,
lighting: null,
aspect: '16:9',
quality: ['highly-detailed'],
platform: 'midjourney'
};
const styles = {
art: ['Photorealistic', 'Oil Painting', 'Watercolor', 'Digital Art', 'Anime', 'Concept Art', 'Art Nouveau', 'Cyberpunk', 'Impressionist', 'Minimalist'],
music: ['Electronic', 'Cinematic', 'Pop', 'Jazz', 'Classical', 'Ambient', 'Hip-Hop', 'Rock', 'Folk', 'R&B'],
video: ['Cinematic', 'Documentary', 'Vintage', 'Animated', 'Corporate', 'Social Media', 'Artistic'],
writing: ['Blog Post', 'Product Description', 'Social Caption', 'Email', 'Story', 'Script', 'Technical', 'Academic'],
design: ['Logo', 'Brand Identity', 'UI/UX', 'Poster', 'Social Graphic', 'Infographic', 'Icon']
};
// Medium selection
document.querySelectorAll('.medium-card').forEach(card => {
card.addEventListener('click', function() {
document.querySelectorAll('.medium-card').forEach(c => c.classList.remove('active'));
this.classList.add('active');
state.medium = this.dataset.medium;
updateStyleChips();
updateVisibleSections();
});
});
function updateStyleChips() {
const container = document.getElementById('style-chips');
container.innerHTML = '';
if (state.medium && styles[state.medium]) {
styles[state.medium].forEach(style => {
const chip = document.createElement('div');
chip.className = 'chip';
chip.textContent = style;
chip.dataset.style = style.toLowerCase().replace(/\s+/g, '-');
chip.addEventListener('click', function() {
container.querySelectorAll('.chip').forEach(c => c.classList.remove('active'));
this.classList.add('active');
state.style = this.textContent;
});
container.appendChild(chip);
});
}
}
function updateVisibleSections() {
const moodSection = document.getElementById('mood-section');
const lightingSection = document.getElementById('lighting-section');
const aspectSection = document.getElementById('aspect-section');
const qualitySection = document.getElementById('quality-section');
const platformSection = document.getElementById('platform-section');
// Show mood for art, music, video
if (['art', 'music', 'video'].includes(state.medium)) {
moodSection.classList.remove('section-hidden');
} else {
moodSection.classList.add('section-hidden');
}
// Show lighting, aspect, quality, platform only for art
if (state.medium === 'art') {
lightingSection.classList.remove('section-hidden');
aspectSection.classList.remove('section-hidden');
qualitySection.classList.remove('section-hidden');
platformSection.classList.remove('section-hidden');
} else {
lightingSection.classList.add('section-hidden');
aspectSection.classList.add('section-hidden');
qualitySection.classList.add('section-hidden');
platformSection.classList.add('section-hidden');
}
}
// Subject input
document.getElementById('subject-input').addEventListener('input', function(e) {
state.subject = e.target.value;
});
// Mood chips
document.getElementById('mood-chips').addEventListener('click', function(e) {
if (e.target.classList.contains('chip')) {
this.querySelectorAll('.chip').forEach(c => c.classList.remove('active'));
e.target.classList.add('active');
state.mood = e.target.dataset.mood;
}
});
// Lighting chips
document.getElementById('lighting-chips').addEventListener('click', function(e) {
if (e.target.classList.contains('chip')) {
this.querySelectorAll('.chip').forEach(c => c.classList.remove('active'));
e.target.classList.add('active');
state.lighting = e.target.dataset.lighting;
}
});
// Aspect chips
document.getElementById('aspect-chips').addEventListener('click', function(e) {
if (e.target.classList.contains('chip')) {
this.querySelectorAll('.chip').forEach(c => c.classList.remove('active'));
e.target.classList.add('active');
state.aspect = e.target.dataset.aspect;
}
});
// Quality chips (multi-select)
document.getElementById('quality-chips').addEventListener('click', function(e) {
if (e.target.classList.contains('chip')) {
e.target.classList.toggle('active');
const quality = e.target.dataset.quality;
if (e.target.classList.contains('active')) {
if (!state.quality.includes(quality)) state.quality.push(quality);
} else {
state.quality = state.quality.filter(q => q !== quality);
}
}
});
// Platform chips
document.getElementById('platform-chips').addEventListener('click', function(e) {
if (e.target.classList.contains('chip')) {
this.querySelectorAll('.chip').forEach(c => c.classList.remove('active'));
e.target.classList.add('active');
state.platform = e.target.dataset.platform;
}
});
// Generate prompt
document.getElementById('generate-btn').addEventListener('click', generatePrompt);
function generatePrompt() {
if (!state.medium || !state.subject) {
alert('Please select a medium and describe your subject.');
return;
}
let prompt = '';
if (state.medium === 'art') {
prompt = state.subject;
if (state.style) {
prompt += , ${state.style.toLowerCase()} style;
}
if (state.mood) {
prompt += , ${state.mood} mood;
}
if (state.lighting) {
prompt += , ${state.lighting.replace('-', ' ')} lighting;
}
if (state.quality.length > 0) {
prompt += , ${state.quality.map(q => q.replace('-', ' ')).join(', ')};
}
if (state.platform === 'midjourney') {
prompt += --ar ${state.aspect} --v 6;
} else if (state.platform === 'dalle') {
prompt += in ${state.aspect} format;
} else if (state.platform === 'stable-diffusion') {
const [w, h] = state.aspect.split(':').map(n => parseInt(n) * 128);
prompt += (width: ${w}, height: ${h});
}
} else if (state.medium === 'music') {
prompt = state.style || 'music';
if (state.mood) {
prompt = ${state.mood} ${prompt};
}
prompt += , ${state.subject};
} else if (state.medium === 'video') {
prompt = state.subject;
if (state.style) {
prompt += , ${state.style.toLowerCase()} aesthetic;
}
if (state.mood) {
prompt += , ${state.mood} atmosphere;
}
} else if (state.medium === 'writing' || state.medium === 'design') {
prompt = Create a ${state.style || state.medium} about: ${state.subject};
}
document.getElementById('prompt-output').textContent = prompt;
document.getElementById('output-area').classList.add('visible');
document.getElementById('output-area').scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}
// Copy to clipboard
document.getElementById('copy-btn').addEventListener('click', function() {
const text = document.getElementById('prompt-output').textContent;
navigator.clipboard.writeText(text).then(() => {
const btn = this;
const originalText = btn.textContent;
btn.textContent = 'โ Copied!';
setTimeout(() => {
btn.textContent = originalText;
}, 2000);
});
});
// Clear all
document.getElementById('clear-btn').addEventListener('click', function() {
state.medium = null;
state.subject = '';
state.style = null;
state.mood = null;
state.lighting = null;
state.aspect = '16:9';
state.quality = ['highly-detailed'];
state.platform = 'midjourney';
document.querySelectorAll('.medium-card').forEach(c => c.classList.remove('active'));
document.querySelectorAll('.chip').forEach(c => c.classList.remove('active'));
document.getElementById('subject-input').value = '';
document.getElementById('style-chips').innerHTML = '';
document.getElementById('output-area').classList.remove('visible');
updateVisibleSections();
});
})();
How to Use Your Generated Prompt
Once you've generated your prompt, copy it and paste directly into your chosen AI tool. For Midjourney, paste it into the Discord chat and hit Enter. For DALL-E 3, paste into ChatGPT with the instruction "Generate an image of..." For Stable Diffusion (ComfyUI or AUTOMATIC1111), paste into the positive prompt field.
Refining your results: If the first output isn't quite right, try tweaking one element at a time. Change the style descriptor, adjust the mood, or add more specific details to the subject description. Small changes can produce dramatically different results. The key is iteration โ most professional AI creators generate 10-20 variations before landing on their final image. For more advanced techniques, read our Prompt Anatomy Guide and Midjourney Prompts Guide. You can also compare syntax differences across platforms with our AI Tool Finder.
๐ Prompt engineering books on Amazon are a great next step once the generator feels intuitive โ understanding the theory helps you craft prompts the generator can't anticipate. Contains affiliate links โ disclosure.
Some links in this article are affiliate links โ we may earn a small commission if you purchase, at no extra cost to you. Full disclosure โ