Nick Bot
Adding some much needed nick to your Instagram photos.
Dependencies
$ sudo apt install libopencv-dev
Build
$ git clone https://github.com/icholy/nick_bot.git
$ cd nick_bot
$ go get -d -v .
$ go build
Usage
Usage of ./nick_bot:
-auto.follow
auto follow random people
-draw.face
Draw the face (default true)
-draw.rects
Show the detection rectangles
-face.dir string
directory to load faces from (default "faces")
-face.opacity float
Face opacity [0-255] (default 1)
-haar string
The location of the Haar Cascade XML configuration to be provided to OpenCV. (default "haarcascade_frontalface_alt.xml")
-http.port string
http port (example :8080)
-margin float
The face rectangle margin (default 60)
-min.neighboor int
the lower this number is, the more faces will be found (default 9)
-min.faces int
minimum faces (default 1)
-password string
instagram password
-post.interval duration
how often to post
-post.now
post and exit
-reset.store
mark all store records as available
-sentry.dsn string
Sentry DSN
-store string
the store file (default "store.db")
-test.dir string
test a directory of images
-test.image string
test image
-upload
enable photo uploading
-username string
instagram username
Example Usage
$ ./nick_bot -autofollow=true -minfaces=3 -upload=true -username=<username> -password=<password>
Design
Posting Schedule
The bot posts at peak engagement times
- Sunday: 6:00AM and 5:00PM
- Monday: 2:00AM and 7:00PM
- Tuesday: 3:00AM and 10:00PM
- Wednesday: 2:00AM and 5:00PM
- Thursday: 7:00AM and 5:00PM
- Friday: 1:00AM and 8:00PM
- Saturday: 2:00AM and 7:00PM
The schedule is configured using the schedule.cron
file (uses cron format).
Auto-Follow
The bot automatically follows people.
- The bot needs a consistent flow of new followers to find new pictures.
- When someone's photo is modified/posted, the bot automatically follows 1-10 of their followers.
Image Selection
When it's time to post, an photo must be selected from the image store.
- There are several image selection 'strategies'.
- Each strategy has a different probability of being chosen.
Strategies:
- Top faces of all followers (P: 0.40)
- Top likes of all followers (P: 0.40)
- Most faces of a random follower (P: 0.10)
- Most likes of a random follower (P: 0.10)
- Note: score is
likes * faces
.
Crawler
The crawler's job is to find follower's photos.
- Every 0-30 minutes it downloads a list of all followers and shuffles them.
- Every 1-60 seconds it downloads one photo from a user.
- After a photo is downloaded, the faces are detected, and the metadata written to the store.
Image Store
The image store is an index of all crawled photos.
- SQLite database with the following structure:
CREATE TABLE media (
media_id TEXT, -- photo id
media_url TEXT, -- photo url
user_id TEXT, -- original poster user id
user_name TEXT, -- original poster username
like_count INTEGER, -- number of likes
face_count INTEGER, -- number of detected faces
posted_at INTEGER, -- timestamp of when the original was posted
state INTEGER -- available, used, or rejected
);
Face Detection
Uses a Haar Feature-based Cascade Classifier for Object Detection.
Captions
Captions are randomly selected from the captions.txt
file.
Demo
Relevant Instagram TOS
- Share only photos and videos that you’ve taken or have the right to share.
Remember to post authentic content, and don’t post anything you’ve copied or collected from the Internet that you don’t have the right to post.
- Foster meaningful and genuine interactions.
Help us stay spam-free by not artificially collecting likes, followers, or shares, posting repetitive comments or content, or repeatedly contacting people for commercial purposes without their consent.
- Respect other members of the Instagram community.
We remove [...] content that targets private individuals to degrade or shame them, personal information meant to blackmail or harass someone, and repeated unwanted messages.
Credit:
Idea and code was taken from https://github.com/zikes/chrisify