NAME

Net::BitTorrent::Torrent::Generator - Create modern v1, v2, and Hybrid Torrents

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. It supports the latest BEP 52 standards for BitTorrent v2 and hybrid swarms.

METHODS

add_file( $rel_path )

Adds a file from the base_path to the torrent. 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.

generate_v1( )

Generates a legacy BitTorrent v1 torrent using SHA-1 piece hashes. Compatible with all clients.

generate_v2( )

Generates a modern BitTorrent v2 torrent. Uses SHA-256 and Merkle trees. Only compatible with v2-aware clients (Net::BitTorrent, libtorrent, etc.).

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.

set_private( $boolean )

Sets the private flag. If true, a client will only use trackers and will not enable DHT or PEX for this swarm.

set_align_files( $boolean )

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.

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.