{"id":20775014,"url":"https://github.com/qdot/giftic","last_synced_at":"2025-06-10T17:35:39.038Z","repository":{"id":66557543,"uuid":"13166693","full_name":"qdot/giftic","owner":"qdot","description":"Pure Javascript implementation of Toy Control via Optical Motion Tracking","archived":false,"fork":false,"pushed_at":"2013-12-09T01:09:17.000Z","size":692,"stargazers_count":1,"open_issues_count":15,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-11T21:27:22.674Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qdot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-09-28T03:53:20.000Z","updated_at":"2023-09-08T16:42:23.000Z","dependencies_parsed_at":"2023-02-20T08:15:46.620Z","dependency_job_id":null,"html_url":"https://github.com/qdot/giftic","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fgiftic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fgiftic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fgiftic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fgiftic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qdot","download_url":"https://codeload.github.com/qdot/giftic/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fgiftic/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259118380,"owners_count":22807962,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T12:34:11.388Z","updated_at":"2025-06-10T17:35:39.004Z","avatar_url":"https://github.com/qdot.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# giftic\n\nBy Kyle Machulis (qDot) \u003ckyle@nonpolynomial.com\u003e\n\nPart of the Fuck Everything Project - http://www.feverything.com\n\n## Overview\n\ngiftic eats gifs and outputs feels.\n\nIt's a haptic renderer for animated GIFs. Actually, it's a haptic\nrenderer for anything that can be decomposed into frames and rendered\nto an HTML5 canvas, so it'll work with SVG, APNG, and other formats,\nthough GIFs will probably be the most popular use case. It also can\nput out control signals to whatever you want, not just haptic control.\nBut we're getting ahead of ourselves here.\n\nFor the haptic rendering, there's multiple output methods giftic\ncan use:\n\n* WebVibration (for compatible browsers)\n* Joystick Haptics as part of WebJoystick API (for compatible\n  browsers)\n* Audio (for [OhMiBod](http://ohmibod.com) and similar audio\n  controlled vibrators)\n* WebSocket output (for [RealTouch](http://www.realtouch.com) and\n  other toys which requires access outside of the browser)\n\n## Architecture\n\ngiftic is made up of two components, the encoder and the player. The\nencoder is a tool to create new haptic encoding info for an animation.\nIt can even automatically encode information based on movement in the\nanimation, which can then be hand adjusted afterward. Haptic\ninformation is exported from the encoder for later use.\n\nThe player provides an interface to replay patterns created with the\nencoder.\n\nAll components of giftic are pure client-side javascript. No\ninformation needs to be transfered to a server to use giftic, meaning\nthat usage can be kept private. \n\n## Image Fetching\n\n## Libraries\n\ngiftic is built on top of the following libraries:\n\n* [bootstrap](http://getbootstrap.com) - So we look like everyone else\n  that's hip and cool\n* [jquery](http://jquery.com) - Because why not\n* [jsgif](https://github.com/shachaf/jsgif)/[libgif.js](https://github.com/buzzfeed/libgif-js) - Ripped apart for gif decoder\n* [jqplot](http://jqplot.com) - Pattern graphing and manipulation\n* [jsfeat](http://inspirit.github.io/jsfeat) - Lucas Kinade Optical\n  Flow Algorithm for auto encoding\n* [jiggly.js](http://github.com/qdot/jiggly.js) - Vibration output\n  abstraction\n* [realtouch.js](http://github.com/feverything/realtouch.js) -\n  Realtouch output\n* [howler.js](http://github.com/goldfire/howler.js) - Audio output\n  abstraction\n\n## License\n\nCovered under the BSD license. See LICENSE.txt for more info\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqdot%2Fgiftic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqdot%2Fgiftic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqdot%2Fgiftic/lists"}