Skip to content

Instantly share code, notes, and snippets.

Avatar
🌶️
Focusing

Josh Beckwith positlabs

🌶️
Focusing
View GitHub Profile
@positlabs
positlabs / batch-resize-webm.sh
Last active Sep 22, 2020
Lossless batch encode and resize command
View batch-resize-webm.sh
# Batch encode webm files in a directory
for i in *.webm;
do
ffmpeg -y -i $i -b:v 0 -crf 30 -pass 1 -an -f webm /dev/null
ffmpeg -y -i $i -vf scale=640:640:force_original_aspect_ratio=decrease -b:v 0 -crf 30 -pass 2 "_${i}"
done
@positlabs
positlabs / framePulse.js
Created Jul 18, 2020
Spark frame pulse
View framePulse.js
const R = require('Reactive')
const Patches = require('Patches')
const Animation = require('Animation')
let frame = 0
const td = Animation.timeDriver({durationMilliseconds: 1, loopCount: Infinity, mirror: false})
td.onAfterIteration().subscribe(() => {
frame ++
Patches.inputs.setScalar('currentFrame', frame)
Patches.inputs.setPulse('frame', R.once())
@positlabs
positlabs / convert-audio.sh
Last active May 6, 2020
FFMPEG audio conversion for Spark AR
View convert-audio.sh
#! /bin/bash
# This command converts audio according to the specifications listed in the Spark docs:
# https://sparkar.facebook.com/ar-studio/learn/documentation/docs/audio
# mono m4a, 44.1kHz sample rate, 16-bit-depth resolution
# Usage:
# convert-audio.sh myaudio.mp3 converted.m4a
# Notes:
# Always use m4a for output file type
# Change "64k" to a higher value to improve bitrate/quality. e.g. 96k 128k 192k
@positlabs
positlabs / screen-plane.js
Created Jun 20, 2019
Spark AR script to resize plane to match screen size
View screen-plane.js
/*
Resize plane to match screen size
*/
const Scene = require('Scene')
const camera = Scene.root.find('Camera')
const plane = Scene.root.find('plane0')
plane.width = camera.focalPlane.width
plane.height = camera.focalPlane.height
View renderer-client.js
/*
The client lib for the generator will override some browser methods in order to
generate video or gifs of the page that it runs on. This guarantees that frames
won't be dropped, and the framerate will be consistent.
Global method overrides
- setTimeout
- setInterval
- requestAnimationFrame
Set currentTime of videos
*/
@positlabs
positlabs / backup-github.sh
Last active Jan 7, 2019 — forked from rodw/backup-github.sh
A simple script to backup an organization's GitHub repositories, wikis and issues.
View backup-github.sh
#!/bin/bash
# A simple script to backup an organization's GitHub repositories.
# NOTE: if you have more than 100 repositories, you'll need to step thru the list of repos
# returned by GitHub one page at a time, as described at https://gist.github.com/darktim/5582423
GHBU_BACKUP_DIR=${GHBU_BACKUP_DIR-"github-backups"} # where to place the backup files
GHBU_ORG=${GHBU_ORG-"<REPLACE_ME>"} # the GitHub organization whose repos will be backed up
# (if you're backing up a user's repos instead, this should be your GitHub username)
GHBU_UNAME=${GHBU_UNAME-"<REPLACE_ME>"} # the username of a GitHub account (to use with the GitHub API)
@positlabs
positlabs / ShadowShader.shader
Created Jan 20, 2018
Unity shader for rendering shadows onto a transparent surface. Useful for augmented reality.
View ShadowShader.shader
Shader "ShadowShader" {
Properties{
_Color("Main Color", Color) = (1,1,1,1)
_MainTex("Base (RGB)", 2D) = "white" {}
_Cutoff("Cutout", Range(0,1)) = 1.0
}
SubShader{
Pass{
Alphatest Greater[_Cutoff] SetTexture[_MainTex]
@positlabs
positlabs / LazyPromise.js
Last active May 19, 2017
LazyPromise is a cachey promise creator that returns a function. It's good for lazily running things only once.
View LazyPromise.js
/*
LazyPromise is a cachey promise creator that returns a function.
It's good for lazily running things only once.
Promise creation is deferred until the first call.
Construct using same signature as a regular Promise (except it doesn't require `new`).
View inject-scss.js
var fs = require('fs')
fs.writeFileSync(path.join(__dirname, 'public/styles/_inject.scss'), `$CDN: "${CDN}";`, 'utf8')
@positlabs
positlabs / component-template.js
Created Oct 21, 2016
Boilerplate for xtag components
View component-template.js
// http://x-tags.org/docs
const ComponentBase = require('./component-base')
xtag.register('x-boilerplate', {
prototype: ComponentBase.prototype,
lifecycle: {
You can’t perform that action at this time.