NAME
Net::BitTorrent::Torrent::Generator - .torrent File Generator
SYNOPSIS
use Net::BitTorrent::Torrent::Generator;
my $gen = Net::BitTorrent::Torrent::Generator->new(
base_path => './my_files',
piece_length => 262144 # 256KiB
);
# Add files to the torrent
$gen->add_file( 'linux-distro.iso' );
$gen->add_file( 'README.txt' );
# Add metadata
$gen->add_tracker( 'https://tracker.example.com/announce' );
$gen->add_node( 'router.bittorrent.com' , 6881);
# Generate the .torrent file data (bencoded)
my $v1_data = $gen->generate_v1( );
my $v2_data = $gen->generate_v2( );
my $hybrid_data = $gen->generate_hybrid( );
path('my_project.torrent')->spew_raw( $hybrid_data );
DESCRIPTION
Net::BitTorrent::Torrent::Generator allows you to programmatically create BitTorrent metadata files (.torrent). It supports the latest BEP 52 standards for BitTorrent v2 and hybrid swarms.
METHODS
new( %params )
Creates a new Generator object.
my $gen = Net::BitTorrent::Torrent::Generator->new(
base_path => './data'
);
Expected parameters:
base_path-
The root directory containing the files to be included in the torrent.
piece_length- optional-
The size of each piece in bytes. Defaults to 262144 (256KiB).
add_file( $rel_path )
Adds a file from the base_path to the metainfo.
$gen->add_file( 'data/movie.mp4' );
If set_align_files( 1 ) has been called, this will automatically insert padding files (BEP 47) to ensure files start on piece boundaries, which is highly recommended for hybrid torrents.
Expected parameters:
add_tracker( $url )
Adds a tracker URL.
$gen->add_tracker( 'udp://tracker.openbittorrent.com:80/announce' );
Expected parameters:
add_node( $host, $port )
Adds a DHT bootstrap node.
$gen->add_node( 'router.bittorrent.com', 6881 );
Expected parameters:
set_private( $val )
Sets the private flag.
$gen->set_private( 1 );
If true, a client will only use trackers and will not enable DHT or PEX for this swarm.
Expected parameters:
set_align_files( $val )
Sets whether to align files to piece boundaries (v2/hybrid).
$gen->set_align_files( 1 );
If true, ensures every file starts at the beginning of a piece by adding zero-filled padding files. This optimizes performance and allows for better cross-swarm deduplication.
Expected parameters:
generate_v1( )
Generates a BitTorrent v1 .torrent file using SHA-1 piece hashes. Compatible with all clients.
my $raw = $gen->generate_v1();
generate_v2( )
Generates a BitTorrent v2 .torrent file. Uses SHA-256 and Merkle trees. Only compatible with v2-aware clients (Net::BitTorrent, libtorrent, etc.).
my $raw = $gen->generate_v2();
generate_hybrid( )
Generates a torrent containing both v1 and v2 metadata. This allows v1-only clients to participate in the same swarm as v2 clients. Recommended for maximum compatibility.
my $raw = $gen->generate_hybrid();
AUTHOR
Sanko Robinson <sanko@cpan.org>
COPYRIGHT
Copyright (C) 2008-2026 by Sanko Robinson.
This library is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0.