npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

tinytornado

v0.1.5

Published

TinyTornado renders animated tornadoes in a web browser.

Downloads

17

Readme

Build status

tinytornado

TinyTornado renders animated tornadoes in a web browser using JavaScript, CSS and the DOM. It also makes use of both FloraJS and Bit-Shadow Machine.

##Install

Use the standalone version and reference the css and js files from your document.

TinyTornado creates two types of tornadoes, funnels and vortices. Use the corresponding css file when creating your tornado. For example, the code below sets up a funnel.

<html>
  <head>
    <link href="css/funnel.min.css" type="text/css" charset="utf-8" rel="stylesheet" />
  	<script src="scripts/tinytornado.min.js" type="text/javascript" charset="utf-8"></script>
  </head>
  ...

This code sets up a vortex.

<html>
  <head>
    <link href="css/vortex.min.css" type="text/css" charset="utf-8" rel="stylesheet" />
  	<script src="scripts/tinytornado.min.js" type="text/javascript" charset="utf-8"></script>
  </head>
  ...

To include TinyTornado as a component in your project, use the node module.

npm install tinytornado --save

##Usage

TinyTornado uses four components to create a tornado, a base, debris, spine and shell. Simply create all four and pass them to the tornado's runner to start the animation.

Notice we're also defining a view for the tornado by passing a <div> to the Runner. The following code creates a funnel.

...
</head>
  <body>
    <div id="worldA"></div>
    <script type="text/javascript" charset="utf-8">
      var base = new TinyTornado.Funnel.Base();
      var debris = new TinyTornado.Funnel.Debris();
      var spine = new TinyTornado.Funnel.Spine();
      var shell = new TinyTornado.Funnel.Shell();

      var vortex = new TinyTornado.Funnel.Runner(base, debris, spine, shell);
      vortex.init({
        el: document.getElementById('worldA')
      });
    </script>
  </body>
</html>

The following code creates a Vortex.

...
</head>
  <body>
    <div id="worldA"></div>
    <script type="text/javascript" charset="utf-8">
      var base = new TinyTornado.Vortex.Base();
      var debris = new TinyTornado.Vortex.DebrisBit();
      var spine = new TinyTornado.Vortex.Spine({
      	density: 10
      });
      var shell = new TinyTornado.Vortex.ShellBit();

      var vortex = new TinyTornado.Vortex.RunnerBit(base, debris, spine, shell);
      vortex.init({
        el: document.getElementById('worldA')
      });
    </script>
  </body>
</html>

##Audio

To create a Tornado's low rumble, use SoundBed. Just reference the SoundBed library from your document and initialize the player.

...
<script src="scripts/soundbed.min.js" type="text/javascript" charset="utf-8"></script>
</head>
  <body>
    <script type="text/javascript" charset="utf-8">
      var playerLow = new SoundBed.Player();
      playerLow.init({
        perlin: true,
        reverb: 5,
        oscAFreq: 60,
        oscBFreq: 120,
        oscARate: 0.1,
        oscBRate: 0.12,
        freqMin: 60,
        freqMax: 120,
        volumeMin: 0.5,
        volumeMax: 1
      });
    </script>
  </body>
</html>

Adjust the settings to your liking.

##Configure

Both funnel and vortex components have options you can adjust to configure your tornado.

####Funnel.Base

  • width (default = 10)

    The base width. Only useful when the base opacity > 0.

  • height (default = 10)

    The base height. Only useful when the base opacity > 0.

  • color (default = 0)

    Color. TinyTornadoes are monochromatic. This value is used for red, green and blue.

  • perlin (default = true)

    Set to true to distort the base's oscillation via perlin noise.

  • perlinSpeed

    If perlin = true, sets the speed through the perlin noise space.

  • perlinTime

    If perlin = true, sets the initial location in the perlin noise space.

  • opacity (default = 0)

    The base opacity. Typically you want to leave this at 0 for an invisible base.

####Funnel.Debris

  • sizeMin (default = 1)

    Minimum particle size.

  • sizeMax (default = 3)

    Maximum particle size.

  • speedMin (default = 1)

    Minimum particle speed.

  • speedMax (default = 20)

    Maximum particle speed.

  • opacityMin (default = 0.1)

    Minimum particle opacity.

  • opacityMax (default = 0.2)

    Maximum particle opacity.

  • lifespanMin (default = 70)

    Minimum particle lifespan.

  • lifespanMax (default = 120)

    Maximum particle lifespan.

  • colorMin (default = 100)

    Minimum particle color. Debris is monochromatic. This value is used for red, green and blue.

  • colorMax (default = 200)

    Maximum particle color. This value is used for red, green and blue.

####Funnel.Spine

  • density (default = 25)

    Determines number of joints in the spine. Lower values = more joints.

  • opacity (default = 0)

    Opacity. Typically set to 0.

  • easing (default = 'easeInCirc')

    Determines joint distribution. See src/easing.js for more options.

  • offsetFromAxis (default = true)

    Set to false to prevent spine curvature.

####Funnel.Shell

  • itemWidth (default = 0)

    The element width. Typically set to 0.

  • itemHeight (default = 0)

    The element height. Typically set to 0.

  • minFunnelWidth (default = 5)

    Minium width of the shell base.

  • opacity (default = 0)

    The element opacity. Typically set to 0.

  • blur (default = 350)

    Blur. Recommended values bw 300 - 400.

  • spread (default = 250)

    Spread. Recommended values bw 200 - 300.

  • easing (default = 'easeInExpo')

    Determines shell shape. See src/easing.js for more options.

  • colorMin (default = 50)

    Minimum color. Valid values bw 0 - 255. Shell is monochromatic. This value is used for red, green and blue.

  • colorMin (default = 255)

    Maximum color. Valid values bw 0 - 255. Shell is monochromatic. This value is used for red, green and blue.

##Docs

To learn more, please review the docs.

##Building this project

This project uses Grunt. To build the project first install the node modules.

npm install

Next, run grunt.

grunt

To run the tests, run 'npm test'.

npm test

To check test coverage run 'grunt coverage'.

grunt coverage

A pre-commit hook is defined in /pre-commit that runs jshint. To use the hook, run the following:

ln -s ../../pre-commit .git/hooks/pre-commit

A post-commit hook is defined in /post-commit that runs the Plato complexity analysis tools. To use the hook, run the following:

ln -s ../../post-commit .git/hooks/post-commit

View the code complexity report.