A full-stack web application for generating personalized, high-quality dynamic videos through the Idomoo API. Users can customize storyboard-driven video content using an interactive interface with text inputs, branding colors, background images, output formats, resolutions, and quality settings
Built between 2023–2024, the project combines a Node.js/Express backend with a Next.js/React frontend, featuring real-time progress tracking, instant playback, RESTful APIs with Swagger documentation, request validation, and a modern Material-UI user experience.
- 🎬 Dynamic Video Generation: Create personalized videos using storyboard templates
- 📝 Interactive Form Interface: User-friendly form with real-time validation
- 🎨 Customization Options:
- 📝 Text fields (names, email, custom content)
- 🎨 Color picker for branding
- 🖼️ Background image upload
- 🎬 Format selection (HLS, MP4, GIF)
- 📐 Resolution options (1280x1280, 1920x1080, 2560x1440)
- ⭐ Quality levels (Best, Better, Good)
- 📊 Progress Tracking: Real-time status updates during video generation
- 🎥 Instant Playback: Automatic video preview once generation is complete
- 🔄 RESTful API: Well-documented Express API with Swagger UI
- ⚡ Modern Stack: Express + Next.js + Material-UI
- Storyboard Integration: Load and customize storyboard-driven video templates
- Video Rendering via Idomoo API: Leverage Idomoo's powerful video generation capabilities
- Progress Monitoring: Track video generation status in real-time
- Multiple Output Formats: Support for HLS, MP4, and GIF formats
- High-Quality Rendering: Multiple resolution and quality options
- Express Backend: Robust REST API with proper error handling
- Winston Logging: Structured logging for debugging and monitoring
- Joi Validation: Request validation for data integrity
- Swagger Documentation: Interactive API documentation
- Next.js Frontend: Modern React framework with server-side rendering
- Material-UI: Beautiful, accessible UI components
- Hot Reloading: Development servers with auto-reload
- ESLint & Prettier: Code quality and formatting
- Clear Project Structure: Organized client/server separation
- Interactive Documentation: Swagger UI for API exploration
This project follows clean architecture principles:
- Separation of Concerns: Clear separation between client (frontend) and server (backend)
- RESTful API Design: Well-structured API endpoints with proper HTTP methods
- Error Handling: Consistent error handling across the application
- Validation: Request validation using Joi
- Logging: Structured logging with Winston
- Testability: Components designed for easy testing
- Configuration Management: Environment-based configuration
graph TB
subgraph Client["Client (Next.js/React)"]
UI[User Interface]
Form[Storyboard Form]
Video[Video Player]
HTTP[HTTP Client]
end
subgraph Server["Server (Node.js/Express)"]
API[REST API]
Controller[Controllers]
Model[Models]
Validator[Validation]
end
subgraph External["External Services"]
Idomoo[Idomoo API]
end
UI --> Form
Form --> HTTP
HTTP -->|GET/POST| API
API --> Validator
Validator --> Controller
Controller --> Model
Model -->|API Calls| Idomoo
Idomoo -->|Video Data| Model
Model --> Controller
Controller --> API
API -->|JSON Response| HTTP
HTTP --> Video
style Client fill:#e1f5ff
style Server fill:#fff4e1
style External fill:#f0f0f0
- Node.js (v18 or higher)
- npm or pnpm
- Active internet connection for Idomoo API
- Clone the repository:
git clone https://github.com/orassayag/dynamic-video.git
cd dynamic-video- Install server dependencies:
cd server
npm install- Install client dependencies:
cd ../client
npm installEdit server/config/env.json:
{
"server": {
"port": "8080",
"env": "local"
}
}Update API settings in server/src/config/constants.config.js if needed.
Edit client/src/config/constants.config.js:
SERVER: {
BASE_URL: 'http://localhost:8080/api',
}- Start the server:
cd server
npm run devServer runs on: http://localhost:8080
- Start the client (in a new terminal):
cd client
npm run devClient runs on: http://localhost:3000
- Access the application at
http://localhost:3000
- Load Storyboard: The application automatically loads the storyboard template
- Fill Form: Enter all required information:
- Personal details (first name, last name, email)
- Custom text fields from the storyboard
- Customize:
- Upload background image
- Choose color scheme
- Select format, resolution, and quality
- Generate: Click the "Generate" button
- Wait: Progress bar shows generation status
- Watch: Video plays automatically when ready
Access Swagger UI documentation at: http://localhost:8080/api-docs
GET /api/storyboards/:id
- Fetch storyboard template by ID
- Returns array of field definitions
POST /api/storyboards
- Generate video from storyboard data
- Returns status check URL and video URL
dynamic-video/
├── server/ # Backend application
│ ├── src/
│ │ ├── bin/ # Server startup
│ │ ├── config/ # Configuration constants
│ │ ├── controllers/ # Route controllers
│ │ ├── custom/ # Custom error and event classes
│ │ ├── helpers/ # Express helpers
│ │ ├── middlewares/ # Express middleware
│ │ ├── models/ # Business logic models
│ │ ├── routes/ # API route definitions
│ │ ├── services/ # Services (logging, swagger)
│ │ ├── utils/ # Utility functions
│ │ └── validations/ # Joi validation schemas
│ ├── config/ # Environment configuration
│ └── package.json
│
├── client/ # Frontend application
│ ├── src/
│ │ ├── components/
│ │ │ ├── common/ # Reusable UI components
│ │ │ └── pages/ # Page-specific components
│ │ ├── config/ # Client configuration
│ │ ├── hooks/ # Custom React hooks
│ │ ├── pages/ # Next.js pages
│ │ └── utils/ # Client utilities
│ ├── public/ # Static assets
│ └── package.json
│
├── CONTRIBUTING.md # Contribution guidelines
├── INSTRUCTIONS.md # Detailed setup instructions
├── LICENSE # MIT License
└── README.md # This file
cd server
npm run dev # Start development server with nodemon
npm run test # Run testscd client
npm run dev # Start Next.js development server
npm run build # Build for production
npm run lint # Run ESLint- Node.js - Runtime environment
- Express - Web framework
- Winston - Logging
- Joi - Request validation
- Swagger - API documentation
- Axios - HTTP client
- Next.js - React framework
- React - UI library
- Material-UI (MUI) - Component library
- SASS - Styling
- Axios - API communication
- MVC Pattern: Model-View-Controller architecture on the backend
- Component-Based Architecture: Reusable React components on the frontend
- Singleton Pattern: Logger and configuration services
- Repository Pattern: Data access abstraction
- Observer Pattern: Event emitter for custom events
dynamic-video/
├── client/ # Frontend application (Next.js)
│ ├── src/
│ │ ├── components/ # React components
│ │ │ ├── common/ # Reusable UI components
│ │ │ └── pages/ # Page-specific components
│ │ ├── config/ # Client configuration
│ │ ├── hooks/ # Custom React hooks
│ │ ├── pages/ # Next.js pages
│ │ └── utils/ # Client utilities
│ ├── public/ # Static assets
│ ├── package.json
│ └── ...
├── server/ # Backend application (Express)
│ ├── src/
│ │ ├── bin/ # Server startup
│ │ ├── config/ # Configuration constants
│ │ ├── controllers/ # Route controllers
│ │ ├── custom/ # Custom error and event classes
│ │ ├── helpers/ # Express helpers
│ │ ├── middlewares/ # Express middleware
│ │ ├── models/ # Business logic models
│ │ ├── routes/ # API route definitions
│ │ ├── services/ # Services (logging, swagger)
│ │ ├── utils/ # Utility functions
│ │ └── validations/ # Joi validation schemas
│ ├── config/ # Environment configuration
│ ├── package.json
│ └── ...
├── .github/ # GitHub configuration
├── .vscode/ # VS Code settings
├── CONTRIBUTING.md # Contribution guidelines
├── INSTRUCTIONS.md # Detailed setup instructions
├── LICENSE # MIT License
└── README.md # This file
In the server/ directory:
cd server
npm run dev # Start development server with nodemon
npm run test # Run tests
npm run dev-test # Run tests in development modeIn the client/ directory:
cd client
npm run dev # Start Next.js development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Check for linting errors- Code Quality: Always run
npm run lintbefore committing - Formatting: Use Prettier for consistent code formatting
- Testing: Write tests for new functionality
- Environment Variables: Use
server/config/env.jsonfor server configuration
- Never Commit Secrets: Keep API credentials out of version control
- Environment Configuration: Use environment variables for sensitive data
- CORS: Configure CORS properly for production
- Validation: Always validate user input
- Build First: Run
npm run buildin client/ before deployment - Production Environment: Set proper NODE_ENV for production
- CORS Configuration: Update CORS settings for production domains
For questions, issues, or contributions:
- GitHub Issues: https://github.com/orassayag/dynamic-video/issues
- Email: orassayag@gmail.com
Contributions to this project are released to the public under the project's open source license.
Everyone is welcome to contribute. Contributing doesn't just mean submitting pull requests—there are many different ways to get involved, including answering questions, reporting issues, and improving documentation.
See CONTRIBUTING.md for detailed contribution guidelines.
- Never commit API credentials or sensitive data
- Use environment variables for configuration
- Follow OWASP security best practices
- Report security vulnerabilities privately to the maintainer
- Or Assayag - Initial work - orassayag
- Or Assayag orassayag@gmail.com
- GitHub: https://github.com/orassayag
- StackOverflow: https://stackoverflow.com/users/4442606/or-assayag?tab=profile
- LinkedIn: https://linkedin.com/in/orassayag
This application has an MIT license - see the LICENSE file for details.
- Built for educational and research purposes
- Respects robots.txt and implements rate limiting
- Uses user-agent rotation to avoid detection
- Implements polite crawling practices