Description
n8n-nodes-qwen-image
🎨 Dual-Purpose Image Generation Package: Use as both an n8n community node and an AI tool for generating high-quality images using Qwen Image model from ModelScope.
✨ Features
- 🔄 Dual Functionality: Works as both n8n node and AI tool calling interface
- 🎨 High-Quality Image Generation: Powered by Qwen Image model from ModelScope
- 📝 Flexible Prompting: Support for positive and negative prompts
- 📐 Multiple Sizes: Configurable image dimensions (1024×1024, 720×1280, 1280×720)
- ⚙️ Advanced Controls: Seed, steps, CFG scale parameters
- 🔄 Smart Polling: Automatic task status checking with configurable intervals
- 🛡️ Robust Error Handling: Built-in retry mechanisms and comprehensive error handling
- 🔌 AI Framework Compatible: Supports OpenAI Functions, LangChain, and other AI frameworks
📦 Installation
For n8n Usage
#### Community Nodes (Recommended)
1. Go to Settings > Community Nodes
2. Select Install
3. Enter n8n-nodes-qwen-image
4. Agree to the risks of using community nodes
5. Select Install
After installation, restart n8n to see the new nodes.
#### Manual Installation
npm install n8n-nodes-qwen-image
For Docker deployments:
RUN cd /usr/local/lib/node_modules/n8n && npm install n8n-nodes-qwen-image
For AI Tool Usage
npm install n8n-nodes-qwen-image
🚀 Usage
🔧 As n8n Node
1. Add the Qwen Image node to your workflow
2. Configure API credentials (ModelScope API key)
3. Set generation parameters
4. Connect to other nodes in your workflow
#### Example n8n Workflow
{
"nodes": [
{
"name": "Generate Image",
"type": "n8n-nodes-qwen-image.qwenImage",
"parameters": {
"prompt": "A serene mountain landscape at sunset, digital art",
"negativePrompt": "blurry, low quality, distorted",
"size": "1024x1024",
"steps": 25,
"cfgScale": 7.5
}
}
]
}
🤖 As AI Tool
#### Basic Usage
import { createQwenImageTool, generateImage } from 'n8n-nodes-qwen-image';// Method 1: Using tool instance
const tool = createQwenImageTool({
apiKey: 'your-modelscope-api-key',
baseUrl: 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis'
});
const result = await tool.call({
prompt: 'A beautiful sunset over mountains',
size: '1024x1024',
steps: 20
});
console.log(result);
// {
// success: true,
// data: {
// task_id: 'xxx',
// status: 'SUCCEEDED',
// image_url: 'https://...',
// prompt: 'A beautiful sunset over mountains',
// ...
// }
// }
// Method 2: Direct function call
const quickResult = await generateImage(
{ apiKey: 'your-api-key', baseUrl: 'https://...' },
'A cyberpunk cityscape at night',
{ size: '1280x720', steps: 30 }
);
#### OpenAI Functions Integration
import { QWENIMAGETOOL_FUNCTION, createQwenImageTool } from 'n8n-nodes-qwen-image';
import OpenAI from 'openai';const openai = new OpenAI({ apiKey: 'your-openai-key' });
const qwenTool = createQwenImageTool({ apiKey: 'your-modelscope-key' });
const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [{ role: 'user', content: 'Generate an image of a sunset' }],
tools: [{ type: 'function', function: QWENIMAGETOOL_FUNCTION }],
tool_choice: 'auto'
});
// Handle tool calls
if (response.choices[0].message.tool_calls) {
for (const toolCall of response.choices[0].message.tool_calls) {
if (toolCall.function.name === 'generateqwenimage') {
const args = JSON.parse(toolCall.function.arguments);
const result = await qwenTool.call(args);
console.log('Generated image:', result);
}
}
}
#### LangChain Integration
import { QwenImageTool, QWENIMAGETOOL_FUNCTION } from 'n8n-nodes-qwen-image';
import { DynamicTool } from 'langchain/tools';const qwenImageTool = new DynamicTool({
name: QWENIMAGETOOL_FUNCTION.name,
description: QWENIMAGETOOL_FUNCTION.description,
func: async (input: string) => {
const tool = new QwenImageTool({ apiKey: 'your-api-key' });
const args = JSON.parse(input);
const result = await tool.call(args);
return JSON.stringify(result);
}
});
// Use with LangChain agents
const tools = [qwenImageTool];
// ... rest of your LangChain setup
⚙️ Configuration
API Credentials
You need ModelScope API credentials:
1. API Key: Your ModelScope API key (required)
2. Base URL: API endpoint (optional, has default)
Getting ModelScope API Key
1. Visit ModelScope
2. Sign up or log in
3. Go to profile settings
4. Generate an API key
5. Copy for use in your application
📋 Parameters
| Parameter | Type | Required | Default | Description |
|———–|——|———-|———|————-|
| prompt | string | ✅ | – | Text description of the image to generate |
| negative_prompt | string | ❌ | – | What to avoid in the image |
| size | string | ❌ | ‘1024×1024’ | Image dimensions (1024×1024, 720×1280, 1280×720) |
| seed | integer | ❌ | -1 | Random seed for reproducible results (-1 for random) |
| steps | integer | ❌ | 20 | Denoising steps (1-50) |
| cfg_scale | number | ❌ | 7 | Classifier-free guidance scale (1-20) |
| polling_interval | integer | ❌ | 5 | Time between status checks (1-60 seconds) |
| maxpollingtime | integer | ❌ | 300 | Maximum wait time (60-1800 seconds) |
📤 Output
n8n Node Output
{
"taskId": "unique-task-identifier",
"status": "SUCCEEDED",
"imageUrl": "https://generated-image-url",
"imageData": "base64-encoded-image-data",
"metadata": {
"prompt": "original-prompt",
"size": "1024x1024",
"steps": 20,
"cfgScale": 7
}
}
AI Tool Output
interface ToolCallResult {
success: boolean;
data?: {
task_id: string;
status: string;
image_url: string;
prompt: string;
negative_prompt?: string;
size: string;
seed: number;
steps: number;
cfg_scale: number;
metadata: any;
};
error?: string;
}
🔧 Advanced Usage
Custom Configuration
import { QwenImageAPI } from 'n8n-nodes-qwen-image/core';// Direct API usage
const api = new QwenImageAPI({
apiKey: 'your-key',
baseUrl: 'custom-endpoint'
});
const result = await api.generateImage(
{
prompt: 'A futuristic robot',
size: '1024x1024',
steps: 30,
cfgScale: 8
},
{
pollingInterval: 3,
maxPollingTime: 600
}
);
Tool Metadata
import { QWENIMAGETOOL_METADATA } from 'n8n-nodes-qwen-image';console.log(QWENIMAGETOOL_METADATA);
// {
// name: 'qwen-image-generator',
// version: '2.0.0',
// description: 'AI tool for generating images using Qwen Image model',
// capabilities: ['text-to-image', 'negative-prompting', ...],
// supported_sizes: ['1024x1024', '720x1280', '1280x720'],
// ...
// }
🛠️ Error Handling
Both n8n node and AI tool include comprehensive error handling:
Error Examples
// AI Tool error handling
const result = await tool.call({ prompt: '' }); // Invalid prompt
console.log(result);
// {
// success: false,
// error: 'Missing or invalid prompt parameter'
// }// API error handling
try {
const result = await api.generateImage(params, options);
} catch (error) {
console.error('Generation failed:', error.message);
}
🔍 Troubleshooting
Common Issues
1. Authentication Failed
– ✅ Verify API key is correct
– ✅ Check ModelScope account credits
– ✅ Ensure API key has proper permissions
2. Task Timeout
– ✅ Increase maxpollingtime parameter
– ✅ Check ModelScope service status
– ✅ Try with simpler prompts
3. Invalid Parameters
– ✅ Ensure prompt is not empty
– ✅ Verify size is supported (1024×1024, 720×1280, 1280×720)
– ✅ Check numeric parameters are within valid ranges
4. Import Issues
– ✅ Ensure package is properly installed
– ✅ Check TypeScript configuration
– ✅ Verify import paths are correct
📚 API Reference
Core Classes
QwenImageAPI: Core API clientQwenImageTool: AI tool wrapperQwenImage: n8n node implementationUtility Functions
createQwenImageTool(config): Create tool instancegenerateImage(config, prompt, options): Quick generationConstants
QWENIMAGETOOL_FUNCTION: OpenAI Functions schemaQWENIMAGETOOL_METADATA: Tool metadataVERSION: Package version📄 License
🤝 Support
If you have any issues or questions:
🤝 Contributing
Contributions are welcome! Please:
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request
📝 Changelog
See CHANGELOG.md for details about changes in each version.
🏷️ Version 2.0.0
New in v2.0.0:
📋 Table of Contents
🚀 Installation
Method 1: Via n8n Community Nodes (Recommended)
1. Open your n8n instance
2. Go to Settings → Community Nodes
3. Click Install a community node
4. Enter the package name: n8n-nodes-qwen-image
5. Click Install
6. Restart your n8n instance
Method 2: Via npm (Self-hosted)
Navigate to your n8n installation directory
cd ~/.n8nInstall the community node
npm install n8n-nodes-qwen-imageRestart n8n
n8n start
Method 3: Docker
If you’re using n8n with Docker, add the package to your Dockerfile:
FROM n8nio/n8n
USER root
RUN npm install -g n8n-nodes-qwen-image
USER node
For more detailed installation instructions, follow the official n8n community nodes installation guide.
⚡ Quick Start
1. Install the node using one of the methods above
2. Get your ModelScope API key from ModelScope Console
3. Create credentials in n8n (Settings → Credentials → Add Credential → ModelScope API)
4. Add the Qwen Image node to your workflow
5. Configure and execute your first image generation!
🛠️ Operations
Generate Image
The primary operation allows you to create stunning images from text descriptions with extensive customization options:
#### Core Parameters
– 1024x1024 – Square format (default)
– 720x1280 – Portrait format
– 1280x720 – Landscape format
#### Advanced Parameters
🔐 Credentials
Setting up ModelScope API Credentials
#### Step 1: Get Your API Key
1. Visit ModelScope and create an account
2. Navigate to your API Keys page
3. Generate a new API key or copy your existing one
#### Step 2: Configure in n8n
1. In your n8n instance, go to Settings → Credentials
2. Click Add Credential
3. Search for and select “ModelScope API”
4. Enter your API key in the API Key field
5. Test the connection and save
#### Security Notes
⚙️ Configuration
Environment Variables (Optional)
For production deployments, you can set environment variables:
ModelScope API Configuration
MODELSCOPEAPIKEY=yourapikey_here
MODELSCOPEAPIURL=https://api-inference.modelscope.cn
🔄 Compatibility
| Component | Version Requirement |
|———–|——————–|
| n8n | >= 1.0.0 |
| Node.js | >= 18.0.0 |
| npm | >= 8.0.0 |
Tested Versions
Platform Support
📖 Usage Examples
Example 1: Basic Image Generation
{
"prompt": "A majestic dragon flying over a medieval castle at sunset, fantasy art style",
"imageSize": "1024x1024",
"steps": 20,
"cfgScale": 7
}
Example 2: Advanced Configuration with Negative Prompts
{
"prompt": "Professional headshot of a business person, clean background, high quality",
"negativePrompt": "blurry, low quality, distorted, cartoon, anime",
"imageSize": "720x1280",
"seed": 12345,
"steps": 30,
"cfgScale": 8
}
Example 3: Batch Image Generation Workflow
1. HTTP Request Node: Fetch prompts from an API
2. Code Node: Process and format the prompts
3. Qwen Image Node: Generate images for each prompt
4. Google Drive Node: Save generated images to cloud storage
Example 4: Content Creation Pipeline
1. Webhook Node: Receive content requests
2. OpenAI Node: Generate image descriptions
3. Qwen Image Node: Create images from descriptions
4. Slack Node: Send results to team channel
Pro Tips
🔧 Troubleshooting
Common Issues
#### “Authentication Failed”
#### “Task Timeout”
maxPollAttempts parameter#### “Invalid Image Size”
1024x1024, 720x1280, 1280x720#### “Rate Limit Exceeded”
Debug Mode
Enable debug logging in n8n to see detailed request/response information:
N8NLOGLEVEL=debug n8n start
Getting Help
🤝 Contributing
We welcome contributions! Here’s how you can help:
Development Setup
Clone the repository
git clone https://github.com/your-username/n8n-nodes-qwen-image.git
cd n8n-nodes-qwen-imageInstall dependencies
npm installBuild the project
npm run buildRun linting
npm run lintRun tests
npm test
Contribution Guidelines
1. Fork the repository
2. Create a feature branch (git checkout -b feature/amazing-feature)
3. Commit your changes (git commit -m 'Add amazing feature')
4. Push to the branch (git push origin feature/amazing-feature)
5. Open a Pull Request
Code Standards
Reporting Issues
When reporting issues, please include:
📚 Resources
Official Documentation
Community & Support
Related Projects
—
📄 License
This project is licensed under the MIT License – see the LICENSE file for details.
🙏 Acknowledgments
—