diff --git a/hswaw/signage/nodes/cube.lua b/hswaw/signage/nodes/cube.lua
new file mode 100644
index 0000000..ab9570b
--- /dev/null
+++ b/hswaw/signage/nodes/cube.lua
@@ -0,0 +1,64 @@
+local node = Node:extend('nodes.at', {
+})
+-- local papa = love.graphics.newImage("papa.png")
+local h = 25.0
+local v = {
+	{-h, -h, -h},
+	{ h, -h, -h},
+	{ h,  h, -h},
+	{-h,  h, -h},
+	{-h, -h,  h},
+	{ h, -h,  h},
+	{ h,  h,  h},
+	{-h,  h,  h}
+}
+
+local c = {
+	{0, 1, 31},
+	{1, 2, 31},
+	{2, 3, 31},
+	{3, 0, 31},
+	{0, 4, 34},
+	{1, 5, 34},
+	{2, 6, 34},
+	{3, 7, 34},
+	{4, 5, 32},
+	{5, 6,32},
+	{6, 7,32},
+	{7, 4,32}
+}
+
+local E = 100 * math.tan(2*math.pi/3)
+
+function to2d(p) return p[1] * E / (p[3]+E), p[2] * E / (p[3]+E) end
+
+function node:render()
+  love.graphics.setColor( 0, 0, 0 )
+  love.graphics.rectangle("fill", 0, 0, love.graphics.getWidth(), love.graphics.getHeight())
+  love.graphics.setColor( 1.0, 1.0, 1.0 )
+  local w = love.graphics.getWidth() / 2
+  local h = love.graphics.getHeight() / 2
+  local scl = 6
+	for _, p in ipairs(c) do
+		x1, y1 = to2d(v[p[1]+1])
+		x2, y2 = to2d(v[p[2]+1])
+    love.graphics.line(x1 * scl + w, y1 * scl + h, x2 * scl + w, y2 * scl + h)
+	end
+end
+
+function node:update(dt)
+  for _, vec in ipairs(v) do
+    angle = -dt/3
+    nv0 = math.cos(angle) * vec[1] + math.sin(angle) * vec[3]
+    nv2 = -math.sin(angle) * vec[1] + math.cos(angle) * vec[3]
+    vec[1] = nv0
+    vec[3] = nv2
+    angle = dt
+    nv1 = math.cos(angle) * vec[2] - math.sin(angle) * vec[3]
+    nv2 = math.sin(angle) * vec[2] + math.cos(angle) * vec[3]
+    vec[2] = nv1
+    vec[3] = nv2
+  end
+end
+
+return node
