Inspiration and Project Purpose 🌅
Imagine automating the mundane, everyday task of generating content for a marketing campaign. Consider a project that could make the world of marketing more accessible to small business owners. Instead of generating content that has been made by tens or hundreds of other businesses in the past, business owners and marketers could spend their time coming up with new, engaging ideas that will further their business goals.
With this potential to explore new frontiers in productivity, we are pleased to introduce QuickPosts, the one person one machine marketing department that automates caption creation and image generation for your company's Twitter posts. We're a group of students at the University of Toronto sharing a growing interest in the applications of machine learning technologies, and we decided to build QuickPosts to both solve an obvious problem and stimulate our intellectual desires for exploring the connection between natural language processing and stable diffusion models.
What it does 📈
QuickPosts is a webapp that automates the marketing process for businesses. Simply use your Twitter account to authenticate the app. Then, enter a prompt for a Twitter caption and post, and push the Twitter post to your Twitter account. The simplicity of the application's frontend provides a succinct yet powerful interface to leverage StableDiffusion and Davinci-003 on the backend. The application explores the vast capability of machine learning by integrating three distinct frameworks into a project that solves a real-world problem.
How we built it 🛠️
- Divided the projects into parts and worked on them in parallel.
- Set up both development environments and a production environment https://quickposts.ca/ so that we could rapidly prototype new changes while keeping our website stable.
- Used git, NGINX (to serve static files and reverse-proxy to GUnicorn), Django (to serve our dynamic files), GUnicorn (to run our Django instance), and certbot (to secure our website with SSL) on our DigitalOcean server to operate the https://quickposts.ca/ website.
- Frequently merged changes and used different Django apps to keep the different modules of our application separate.
- Used a mix of HTML, Tailwind CSS, and JavaScript to build a cohesive front-end with unified styling.
Challenges we ran into 🏔️
- We were frequently editing the same file concurrently, so we had to learn how to use
git merge
and other related commands. - Getting the site to work on mobile was a challenge because we had to design another layout for the site, but we managed to complete both our mobile version and our desktop version by dividing up the work between two team members.
- StableDiffusion was slow and difficult to work with at first. However, after we optimized the model, not only were our results more accurate, but our image processing time was faster as well.
- We had two excellent natural language processing models (Davinci-003 and co:here) that we wanted to incorporate into our project, so we found a mutually beneficial arrangement that allowed each model to complement the other’s strengths.
Accomplishments that we're proud of 😁
- Setting up a working production build.
- Integrating our disparate changes regularly and producing a cohesive final project.
- Making an application that can take any prompt and return a caption and text related to the prompt.
- Learning on the fly from one another so we could help each other with pesky errors that inevitably arise.
What we learned 🧠
- How to better work as a team, especially how to communicate and coordinate our changes to the project.
- How to integrate multiple machine learning models into a cohesive whole.
- The strengths and weaknesses of each machine learning model: for example, co:here can shorten overly long user inputs, while Davinci-003 generates user captions from these inputs.
- Best security practices for Django web servers (including an Nginx reverse proxy and a GUnicorn daemon).
What's next for QuickPosts 🚀
- Expanding to other social media platforms such as Instagram and Facebook.
- Continually training StableDiffusion with user prompts to our app (after suitable sanitization).
- Marketing our product on social media using posts generated by our app ;)
Built With
- api
- digitalocean
- django
- gunicorn
- html5
- javascript
- keras
- letsencrypt
- machine-learning
- nginx
- openai
- python
- stablediffusion
- tailwind
Log in or sign up for Devpost to join the conversation.