Wear some space on your face and be a constellation for Halloween! This galaxy makeup is inspired by the Cassiopeia constellation and uses five FLORA NeoPixels to light up the night sky across your forehead, affixed with liquid latex. GEMMA M0 or GEMMA v2 and a coincell battery back reside on a hair clip and run the pixels in any color you choose.

This guide will show you how to create the circuit and apply a colorful galaxy makeup effect that will be a sure hit at your party or costume parade.

This guide was written for the Gemma v2 board, but can be done with either the original or Gemma M0. We recommend the Gemma M0 as it is easier to use and is more compatible with modern computers!

Prerequisite guides:

You will need:

Special thanks to Risa Rose for the makeup look and modeling!

This diagram uses the original Gemma but you can also use the Gemma M0 with the exact same wiring!

GEMMA is powered through its JST port by a 2xCR2032 battery holder with on/off switch.

Five FLORA NeoPixels are chained in the constellation of Cassiopeia to GEMMAs Vout, D1~, and GND pads with thin wire as shown above.

Solder three six-inch wires to Vout, D1~, and GND pads on GEMMA, and plug in the battery pack. Glue GEMMA to the battery pack, then glue the battery pack to a hair clip.
Arrange five NeoPixels on a heat-resistant work surface and secure with tape. Make sure the scale of your layout matches your face.
Solder thin wires in a chain, connecting the data output of one pixel to the data input of the next, according to the circuit diagram. Also solder the wire coming from GEMMA's D1~ to the first pixel's input.

Solder both power and ground busses with thin wires connecting GND to all pixels' - and Vout to all pixels' +. It's easiest to strip two wires and solder them to each hole, since the solder fills up the hole which makes it tricky to solder another wire to.

Now that you have made all the necessary connections this would be a good time to jump to our CircuitPython Code or Arduino Code section of the tutorial. You will want to confirm that everything is functional before applying the LED backing with liquid latex mentioned below.
You're doing this project at your own risk. Make sure your circuit is perfect before considering sticking it to your face, since a short circuit could burn you.
Seal the back of each pixel with E6000 glue. Your skin is slightly conductive, especially if you sweat in your makeup, so you want to insulate each pixel's + and - from each other across the surface that will touch your skin. Liquid latex alone is not enough insulation to keep the voltage off your skin.

Plug your GEMMA into your computer with a USB cable. Make sure you've followed the Introducing GEMMA guide and have the NeoPixel library installed. Load the following sketch onto GEMMA with the Arduino IDE:

The Arduino code presented below works equally well on all versions of GEMMA: v1, v2 and M0. But if you have an M0 board, consider using the CircuitPython code on the next page of this guide, no Arduino IDE required!
// SPDX-FileCopyrightText: 2017 Mikey Sklar for Adafruit Industries
//
// SPDX-License-Identifier: MIT

#include <Adafruit_NeoPixel.h>

#define PIN 1

// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // all pixels show the same color:
  colorWipe(strip.Color(50, 0, 50), 50); // Purple
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}

Installing Arduino libraries is a frequent stumbling block. If this is your first time, or simply needing a refresher, please read the All About Arduino Libraries tutorial.If the library is correctly installed (and the Arduino IDE is restarted), you should be able to navigate through the “File” rollover menus as follows:

File→Sketchbook→Libraries→Adafruit_NeoPixel→strandtest

Connect up your NeoPixels in a solderless breadboard and use alligator clips to attach to GEMMA, referring to the circuit diagram if necessary.

You’ll need to change a few lines in the code regarding the data pin (1), type of pixels (RGB vs GRB), and number of pixels (5). The resulting (and slightly simplified) code is below:

From the Tools→Board menu, select the device you are using: 

  • Adafruit Gemma M0
  • Adafruit Gemma 8 MHz 
  • Connect the USB cable between the computer and your device. The original Gemma (8 MHz) need the reset button pressed on the board, then click the upload button (right arrow icon) in the Arduino IDE. You do not need to press the reset on the newer Gemma M0 or Trinket M0.

Disconnect the USB cable and load your battery pack with two CR2032 batteries. Flip on the power switch to test your pixels! If they're not all on or anything's getting hot, turn the power off and inspect your circuit with a multimeter for shorts or poor connections.

GEMMA M0 boards can run CircuitPython — a different approach to programming compared to Arduino sketches. In fact, CircuitPython comes factory pre-loaded on GEMMA M0. If you’ve overwritten it with an Arduino sketch, or just want to learn the basics of setting up and using CircuitPython, this is explained in the Adafruit GEMMA M0 guide.

These directions are specific to the “M0” GEMMA board. The original GEMMA with an 8-bit AVR microcontroller doesn’t run CircuitPython…for those boards, use the Arduino sketch on the “Arduino code” page of this guide.

Below is CircuitPython code that works similarly (though not exactly the same) as the Arduino sketch shown on a prior page. To use this, plug the GEMMA M0 into USB…it should show up on your computer as a small flash drive…then edit the file “main.py” with your text editor of choice. Select and copy the code below and paste it into that file, entirely replacing its contents (don’t mix it in with lingering bits of old code). When you save the file, the code should start running almost immediately (if not, see notes at the bottom of this page).

If GEMMA M0 doesn’t show up as a drive, follow the GEMMA M0 guide link above to prepare the board for CircuitPython.

# SPDX-FileCopyrightText: 2017 Mikey Sklar for Adafruit Industries
#
# SPDX-License-Identifier: MIT

import time

import board
import neopixel
from digitalio import DigitalInOut, Direction

pix_pin = board.D1
num_pix = 5

led = DigitalInOut(board.D13)
led.direction = Direction.OUTPUT

strip = neopixel.NeoPixel(pix_pin, num_pix, brightness=1, auto_write=True)


def color_wipe(color, wait):
    for j in range(len(strip)):
        strip[j] = (color)
        time.sleep(wait)


while True:
    color_wipe((50, 0, 50), .1)  # Purple LEDs

This code requires the neopixel.py library. A factory-fresh board will have this already installed. If you’ve just reloaded the board with CircuitPython, create the “lib” directory and then download neopixel.py from Github.

Moisturize your skin and apply foundation as usual, first using a makeup primer if you're going out for a long time.

Apply liquid latex to the back of each pixel, and gently stick the circuit to your face. Clip the GEMMA hairclip into your hair. Apply a little more liquid latex to any areas that need more help to stick. Hold in place for ~30 seconds.
Allow the liquid latex to dry for 10 minutes, then flip on the circuit's power switch. Is it comfortable? You shouldn't feel any prickling at the sites of the pixels. If you do, you didn't insulate the back of your pixels well enough, and you should take the circuit off and apply more glue.
You're doing this project at your own risk. Follow the guidelines that come with the products used, including testing for skin sensitivity or allergies before attempting the complete look. If the circuit becomes uncomfortable at any point, flip the power off or remove it entirely.
Let's get started with the shading! Choose a highly pigmented dark black or deep purple shadow, and it brush all along the hairline to halfway down the forehead.

Using a bright purple, apply across the browbone and down the temples. Create a purple contour below the cheekbone, sweeping at an upward angle into the hairline.

This black is from the Urban Decay Naked Basics palette, and the purple is an unknown tri-color palette. Use a bigger blush brush for sweeps of color, and a smaller fluffy eyeshadow brush for packing color around the pixels and into the hairline.
If you have a darker skin tone, add some blues to mix in with the black and purple. If you have a fair skin tone, avoid blues but instead mix in some pinks and more purples.

We used an unknown rainbow palette similar to this one and Bare Minerals September Issue Ready eyeshadow palette.
Highlight the highest part of the cheekbones with an iridescent nude like the ones in this Physician's Formula Nude palette.
Onto the eyes! Apply an eyeshadow primer first if you plan to wear your makeup for a long time!

We used a Sephora Eternally Purple eyeshadow palette to create a purple smokey eye.

Apply a pale purple to the entire lid and just under the brow, as well as the inner corner of the eyes.

Use a darker purple in the socket line and blend up and out towards the browbone and with the lighter shadow on the lid.
Line your eyes with a black gel liner or whatever black liner you like.

Use a big fluffy brush to splash on a little bit of loose silver glitter.

Apply false lashes! First curl your natural lashes.

We cut each false lash in half to emphasize just the outer portion of the eye. Dab some lash glue on the plastic packaging and run the base of the lash set through the glue to apply the perfect amount. Stick the lash to the outer section of your natural lash line and allow to dry.

Apply mascara to both your natural lashes and the falsies.

For maximum staying power, apply a setting spray to your makeup.
Have fun and enjoy your SPACE FACE, and to make sure your lights last as long as your makeup, bring a spare set of batteries!

To remove, simply peel the circuit off and save for use another time. Liquid latex peels right off of both your face and the circuit (use mineral spirits to clean it off brushes or get it out of your hair), and an oil based makeup remover will take everything else off in a cinch.
Pair this look with nails like the night sky-- silver glitter over deep black.

This guide was first published on Oct 09, 2013. It was last updated on Apr 18, 2024.