If you’re doing a bracket with byes and double byes where a quarter of the players get double byes, a quarter get single byes, and half get no byes, it works out neatly. So assume that the number of players is 4, 8, 16, 32, 64, etc. The way you form the bracket is to start with a bracket for double the amount of people you have, e.g. with 32 players, use a bracket for 64 players. Call the number of players who get either one or two byes N, so you have 4N players in total. Then put your double-bye players in positions 1 through N of the bracket, single bye players in positions N+1 through 2N, and no-bye players in positions 2N+1 through 3N and 5N+1 through 6N.
The simplest case is if you have 4 people, i.e. N=1, for which the standard 8-player [2N] bracket is:
1 vs. 8; 2 vs. 7; 3 vs. 6; 4 vs. 5
1/8 winner vs. 4/5 winner
2/7 winner vs 3/6 winner
Winners of round 2 matches.
In this case, you populate positions 1,2,3 and 6 per the above formula with the players in order of bye seeding: Double-bye #1 seed goes to slot 1, single-bye #2 seed goes to slot 2, no-bye seeds 3 and 4 go to slots 3 and 6. All of the other slots just say “bye” and the player opposite it gets a bye. Here, the only game in round 1 is seeds 3 and 4 playing each other in the 3 slot vs. the 6 slot; seeds 1 and 2 do not play, since slots 7 and 8 are empty. In round 2, seed #2 plays the winner of the 3 vs. 6 slot match. In round 3, seed 1 plays the winner of round 2. Seed 1 thus got their double-bye, and seed 2 their single bye.
In the IFPA case, with 32 players [N=8], you use a 64-player bracket and populate slots 1-8 with double byes, 9-16 with single byes, and 17-24 and 41-48 with no-byes.
If you don’t have a power of 2 number of players, it gets messier but can still be done.