OLED Animation Maker OLED Maker
🎵 Free Arduino project · SSD1306

Nazarome Chupale OLED Animation

Play Nazarome Chupale as a looping mono animation on a 0.96" SSD1306 — 150 PROGMEM frames, ready-to-flash Adafruit sketch, free on GitHub.

By Ashish Oct 2, 2026 ~11 min read ESP8266 · ESP32
🎞️

150 song frames

Nazarome Chupale visuals as 1024-byte PROGMEM bitmaps, frame0 through frame149.

⚡

Plug & play sketch

Adafruit SSD1306 + GFX — open main.ino and upload.

🔌

Clear wiring

ESP8266 and ESP32 pin tables included below.

🆓

Free on GitHub

Clone or ZIP download — no paywall, no signup.

Want Nazarome Chupale on a tiny 0.96" SSD1306 OLED? This project plays a 150-frame mono loop with Adafruit SSD1306 — the same export style as the other song builds on this site, with its own timing and sketch file.

⬇ Free download — Nazarome Chupale OLED code

Full main.ino with all PROGMEM frames · ZIP or git clone

Open GitHub repo →

Parts list

  • Board: ESP8266 NodeMCU / Wemos D1 Mini or ESP32 (recommended)
  • Display: 0.96" SSD1306 I2C OLED, 128×64, usually 0x3C
  • 4 Dupont wires (VCC, GND, SDA, SCL)
  • USB cable + Arduino IDE

Connection / wiring

The sketch comment lists Uno pins (SDA A4, SCL A5). Use an ESP board for this frame count.

OLED pinArduino Uno / NanoESP8266 (NodeMCU)ESP32
VCC5V (or 3.3V if module requires)3.3V3.3V
GNDGNDGNDGND
SDAA4D2 (GPIO4)GPIO21
SCLA5D1 (GPIO5)GPIO22

On ESP8266, call Wire.begin(4, 5) before display.begin() if default I2C pins fail. If the screen stays black, try address 0x3D and read OLED blank screen fixes.

Libraries

  1. Arduino IDE → Tools → Manage Libraries
  2. Install Adafruit SSD1306
  3. Install Adafruit GFX Library
  4. Select your ESP board, a flash size of at least 1MB, and the correct COM port

How the player works

Frames live in const uint8_t PROGMEM frameN[1024]. loop() steps the index every 147 ms:

void loop() {
  static uint8_t frameIdx = 0;
  static unsigned long lastMs = 0;
  const uint8_t* frames[] = { frame0, frame1, /* ... */ frame149 };
  const uint8_t numFrames = 150;

  if (millis() - lastMs >= 147) {
    lastMs = millis();
    display.clearDisplay();
    display.drawBitmap(0, 0, frames[frameIdx], 128, 64, SSD1306_WHITE);
    display.display();
    frameIdx = (frameIdx + 1) % numFrames;
  }
}

Change 147 to speed the loop up or down. A smaller number is a higher frame rate (example: 100 ≈ 10 fps).

Upload & run

  1. Open nazaromechupale → download ZIP or clone
  2. Arduino IDE requires the folder name to match the file. Rename the unzipped folder to main, then open main.ino
  3. Install Adafruit GFX + SSD1306
  4. Pick ESP8266 or ESP32, flash size ≥ 1MB, and the COM port
  5. Click Upload
  6. Watch Serial at 115200 — if you see SSD1306 allocation failed, fix power, wiring, or the I2C address

Ready to flash?

Get the complete Nazarome Chupale main.ino from GitHub now.

⬇ Download code

Make your own song animation

This sketch was exported from oledanimationmaker.com:

  1. Open the free tool in Chrome or Edge
  2. Go to Import and drop a short clip (up to 200 frames)
  3. Tune threshold and dither, then check the live OLED preview
  4. Click Get the Code → Adafruit SSD1306 Arduino
  5. Save the sketch and push it to your own GitHub repo

Related guides: GIF to OLED, Video to OLED, PROGMEM flash limits.

Troubleshooting

  • Sketch too big — use ESP8266/ESP32 with a larger flash size, or fewer frames
  • Blank OLED — 3.3V on ESP, check SDA/SCL, try 0x3D
  • Folder name error — the file is main.ino, so the folder must be named main
  • Slow / laggy — raise the 147 ms delay if the panel cannot keep up; use solid USB power
  • Does not play sound — this build is pictures only. Add a speaker on a separate project if you want audio

FAQ

Is the Nazarome Chupale OLED code free?

Yes — github.com/itzmeAshish/nazaromechupale.

Does it play audio?

No. This is a visual OLED animation. Pair a speaker on its own circuit if you need the song audio.

Can I change the clip?

Yes. Import a different GIF or video into OLED Animation Maker and export a new sketch.

Build more OLED song & GIF animations

Pixel editor, video import, WebSerial live preview, Arduino & MicroPython export — free in the browser.

Open OLED Animation Maker →

What the nazaromechupale sketch contains

The repo is itzmeAshish/nazaromechupale. The song title on this page is Nazarome Chupale. The OLED side of that title is a silent 150-frame loop. main.ino holds frame0 through frame149, each a 1024-byte PROGMEM bitmap, plus the Adafruit player that draws them at 0x3C on a 128×64 SSD1306. There is no sample of the recording and no line of lyric text in the file. If the panel is doing its job, you see pictures only.

The sketch file is main.ino, so the folder has to be named main. GitHub’s ZIP often lands as nazaromechupale-main. Rename that directory before you double-click the file. Opening it from the long folder name makes the IDE offer to move the sketch, and people sometimes accept a copy that is missing the rest of the download. This is the main layout, the same rule Thangamaana uses, not the code.ino layout used by Kalayani or Ganesha Day 7.

setup() starts Serial at 115200 and the display. loop() is the 147 ms walker already shown above: clear, drawBitmap of the current pointer at 128×64, display(), then wrap with numFrames equal to 150. No buttons, no brightness, no one-shot mode.

Speed table for the 147 ms player

Stock speed is 147 ms, about 6.8 fps. One pass is 150 × 147 ms = 22,050 ms, about 22.1 seconds. That is close to Thangamaana’s 149 ms step, but this loop is 50 frames shorter, so the cycle ends about eight seconds sooner. It is much slower than the 67 ms Ganesha and Khayalon players, which is why a default I2C clock is usually enough here.

DelayApprox. fps150-frame passWhy you would pick it
200 ms530 sEach bitmap stays up long enough to see across a room
147 ms (stock)~6.8~22.1 sThe published Nazarome Chupale timing
100 ms1015 sA quicker loop that still clears a 100 kHz transfer
67 ms~15~10 sOnly if you also raise the I2C clock, or accept that display() sets the pace

The 22 second figure is the number to check with a watch. If a pass lands near 22 seconds, the stock delay is really in the binary you uploaded. If it lands near 10 seconds, the sketch on the board is not this file’s 147 ms constant anymore.

Pins the comment lists, and the pins you should use

The comment lists Uno wiring: SDA A4, SCL A5. That legend is accurate for a classic Uno or Nano, and many modules will run from 5V because they carry a regulator. It is the wrong board for this binary. Flash the ESP and follow the ESP column.

  • ESP8266 NodeMCU: 3.3V, GND, SDA on D2 (GPIO4), SCL on D1 (GPIO5). Wire.begin(4, 5) if the core’s default pins are not those two. In Tools, a flash size of at least 1MB is the floor this page already names. A 4MB module is the one that will not surprise you.
  • ESP32: 3.3V, SDA GPIO21, SCL GPIO22. Select an ESP32 board entry, not the NodeMCU entry, even if the dupont colors are the same.
  • Leave A4 and A5 for a future short export. Wiring this 150-frame file to an Uno and ignoring the size error does not produce a slower animation. It produces no upload.

150 frames against a 32 KB Uno

150 × 1024 = 153,600 bytes, about 150 KB before the Adafruit libraries. Uno flash is about 32 KB. The gap is the whole explanation of “sketch too big.” A classic Nano is in the same box. Lowering 147 ms changes nothing about that number. An ESP32 or a 4MB ESP8266 is the board this loop is for. A 512 KB ESP8266 profile will also fail once you add the core. If Tools still says 1MB with a large filesystem, the sketch region can come up short even though the chip is physically bigger. Give the sketch the space and shrink the filesystem, or move to the 4MB choice.

The page’s “at least 1MB” line is the minimum that can even see a 150 KB table. Treat 4MB as the setting you ship. If you must stay on Uno, sample a new clip in the maker at a tiny frame count and export a different sketch. Do not hex-edit this main.ino down to size.

Changing 147 without breaking the wrap

Only the comparison changes: millis() - lastMs >= 147. Keep the pointer list and keep numFrames at 150. The line frameIdx = (frameIdx + 1) % numFrames is what returns you to frame0 after frame149. If you set numFrames to 149 you will never draw the last bitmap. If you set it to 151 you will read past the table.

For filming, 200 ms gives a 30 second pass and makes each picture obvious. For a busier desk piece, 100 ms gives 15 seconds and still fits a 100 kHz transfer, unlike a 67 ms target. You do not need Wire.setClock to enjoy the stock 147 ms loop. Add it only if you deliberately push the delay toward the 15 fps row and the watch no longer matches the table.

A recording that shows one full pass

Plan on about 25 seconds of footage at the stock delay, a little more than the 22.1 second cycle. Frame the 0.96" glass tightly, and keep lamps out of the reflection. Start before a recognizable picture and stop after that same picture has returned. That single return is the proof that all 150 indexes ran, not just frame0 through frame10.

The take should be silent on the board’s side. Nazarome Chupale in this project is the visual. Pairing a speaker is a different build. A good panel recording has crisp white pixels, a black background, and no rolling shimmer. Shimmer that speeds up when you touch the dupont housing is a connector. A stable but “too dark” image can be a threshold you chose in a re-export. The published frames are already 1-bit. You do not retune them with the IDE.

Black screen, 0x3D, and the wrong board package

  • Black screen: ESP VCC is 3.3V. GND is common. SDA and SCL match the table for the chip you selected, not the chip printed in the comment if you ignored it.
  • Wrong address: one edit, from 0x3C to 0x3D, if Serial shows SSD1306 allocation failed. Scan only after both addresses fail. A scanner that finds nothing is a wiring fault. A scanner that finds 0x3C means the sketch is still calling the other address.
  • IDE mismatch: ESP8266 package versus ESP32 package. Uploading the wrong binary leaves the old firmware or a boot loop, and the OLED never starts. Also confirm the port. A leftover Uno port will not program a NodeMCU.
  • Not enough flash: 150 KB of frames will not link on Uno. On ESP8266, avoid the small flash profiles. Folder name errors (main) happen before the linker. Fix the folder first so you can see the real size message.

Four practical questions for this build

Does Nazarome Chupale on this OLED include the song audio?

No. main.ino is a 150-frame picture loop. The name is the song title. The display does not play the track.

The ZIP folder is not called main. Do I rename the file or the folder?

Rename the folder to main so it matches main.ino. That is the IDE rule for this repo. Then open the sketch from inside that folder.

I set the delay to 67 to match the Ganesha project and the speed barely changed. Why?

display() on a 100 kHz bus already costs on the order of 90 ms per full frame. A delay shorter than that cannot win. Use 147 or 100 if you want predictable timing, or call Wire.setClock(400000) after the bus starts and measure a 10 second pass before you trust 15 fps.

Which error means flash, and which error means the panel?

Sketch too big, or an ESP8266 segment that does not fit, is flash. Fix the board or the flash-size menu. SSD1306 allocation failed on Serial, with a sketch that did upload, is the panel: power, SDA/SCL, or 0x3C versus 0x3D. A board-menu mismatch often looks like the second problem because nothing runs.

Related posts