A utility that takes a file and generates a collection of SHA1 hashes suitable for use in BitTorrent files.


pieces is a utility that takes a file (browser) or file path (node) and a piece length, and generates a collection of SHA1 hashes that can be used when creating BitTorrent files.

npm install pieces
var pieces = require('pieces')
var size = Math.pow(2, 14) // 16kb 
// Typically you’ll get the File object from 
// an input[type=file], but you you could also 
// just create your own Blob. 
var input = document.createElement('input')
input.type = 'file'
input.onchange = function(e) {
  var file = e.target.files[0]
  pieces(file, size, function(errorarray) {
    // Returns a Uint8Array of binary data 
    var data = new Blob([array])
var pieces = require('pieces')
var path = '/path/to/file'
var size = Math.pow(2, 18) // 256kb 
// You should probably make sure the path 
// exists before running pieces 
pieces(path, size, function(errorbuffer) {
  // Returns a Buffer of binary data 

When you start processing larger files, you’ll notice that it takes a while for the callback to be fired (particularly in browsers). To make this more managable, the pieces object emits progress, data, and end events.

Where the implementation differences are denoted with a pipe (ie. browser|server).

var pieces = require('pieces') 
var file|path = … 
var size = … 
pieces(file|path, size)
  .on('progress', function(percentage) {
    // percentage is a Number between 0 and 100 
  .on('data', function(bytes) {
    // bytes is a Uint8Array|Buffer containing a SHA1 
  .on('end', function() {
    // And we’re done.