Exploring F2: A Python Library for Multi-Platform Content Downloading and Data Handling
Have you ever needed to pull videos, images, or other content from platforms like DouYin, TikTok, Twitter, or WeiBo? If you’re a developer or someone interested in automating these tasks, F2 might be a useful tool. It’s a Python library designed to handle downloads and process data from multiple platforms in a straightforward way. This post will walk you through what F2 is, how to set it up, and how to use its features, all based on the details from its documentation.
F2 stands out because it supports several popular platforms and is built to be expandable. You can use it to fetch user profiles, download single videos, or even handle live streams. The library includes both a command-line interface for quick tasks and API methods for more custom scripts. Let’s start with the basics and build from there.
What Is F2 and What Can It Do?
F2 is an open-source Python library available on PyPI. It focuses on downloading content and managing API data from sites like DouYin (the Chinese version of TikTok), TikTok, Twitter, and WeiBo. The goal is to make it simple to get what you need without dealing with each platform’s unique rules every time.
For example, if you want to download a video from DouYin, F2 handles the API calls and saves the file for you. It also processes things like user information or live chat messages. Since it’s flexible, you can adapt it for other platforms if needed.
One key thing about F2 is its badges and links: it shows download counts, version info, and community spots like Discord. These help you see how active the project is. The library is licensed under Apache-2.0, which means you can use and modify it freely, as long as you follow the rules.
If you’re wondering why someone might use F2, think about tasks like archiving your favorite posts or analyzing content trends. It’s not for commercial scraping, but for personal or research use, keeping in mind platform terms.
Getting Started with F2
Ready to try it? The setup is simple, but let’s go step by step.
Preparing Your Environment
Before installing, make sure you have Python installed—version 3.8 or higher works best. You’ll also need a terminal or command prompt. No special hardware is required, just a standard computer setup.
Installing F2
There are a few ways to install:
-
Using a Package Manager: This is the easiest. Open your terminal and type:
pip install f2
This pulls the latest version from PyPI.
-
Building from Source: If you want the development version:
-
Clone the repository: git clone https://github.com/Johnserf-Seed/f2.git
-
Navigate to the folder: cd f2
-
Install: python setup.py install
-
After installation, check it with f2 --version
. If it shows a number like 0.0.1.7, you’re good.
First Steps in Using F2
Once installed, you can run basic commands. For instance, to see help: f2 --help
. This lists options for different platforms.
What’s next? Look at the configuration to tailor it to your needs.
Setting Up Configuration Files
F2 uses configuration files to control things like where files save or how to handle logins.
The Main Configuration File
This is a YAML file, usually at ~/.f2/conf.yaml
. It sets defaults for downloads, logs, and more.
Creating an Initial Configuration
F2 creates a default file on first run. Or use f2 init-config
to make one.
Customizing Your Settings
Edit the file to change paths or enable features. For example:
-
Download folder: Set download_path
to your preferred directory. -
Turn on notifications: Change enable_bark
totrue
.
Adding Cookies for Logins
Some features, like accessing private content, need cookies. Copy them from your browser and add to the config under cookie
.
Where is the file located? In your user’s home directory under .f2. If you move it, set an environment variable to point to the new spot.
After setup, you’re ready for more advanced use.
Working with the Command Line Interface
The CLI makes F2 easy to use without writing code.
Temporary Settings in CLI
Add flags for one-time changes, like f2 douyin --cookie "your_cookie"
.
Extending Functionality
Each platform has subcommands, such as f2 douyin
for DouYin tasks.
Examples of CLI Use
-
Download a single DouYin video: f2 douyin fetch_one_video -u "video_link"
-
Get Twitter user posts: f2 twitter fetch_post_tweet -u "user_id"
For details, add --help
to any command.
Advanced Features in F2
As you get comfortable, try these.
Collecting Multiple DouYin Live Streams
To grab several live feeds at once:
-
List the room IDs. -
Use the API in a loop: For each ID, call fetch_user_live_videos_by_room_id
. -
Save the FLV files.
Forwarding DouYin Live Chat Messages
Set up WebSocket in config, then use fetch_live_danmaku
to get and send messages.
More features are coming, as the docs are updating.
Recent Updates in F2
F2 evolves with new versions. Here’s what’s new.
Version 0.0.1.7-pw2
-
Added support for Bark notifications: Download the app from App Store and set it up in config. -
Opened the ab algorithm: Allows custom user agents, but keep them standard. -
New live chat forwarding for DouYin and TikTok: Follow the WSS guide. -
Notification toggle: Set enable_bark
to true. -
See the full changelog for details.
Version 0.0.1.6-pw2
-
Updated config format: Move old settings if needed. -
Standardized time to UTC/GMT+08:00. -
Changed file types: Lives to FLV, albums to webp. -
Fixed TikTok 403 errors. -
Default to ab algorithm.
Version 0.0.1.5-pw2
-
Custom user agents in XBogus. -
Rebuilt database with raw data. -
Unified return types. -
Added _to_raw method. -
Updated filename rules. -
Fixed DouYin collection links.
Check these when updating to avoid issues.
Documentation and Future Plans
The docs are at f2.wiki, covering setup, APIs, and more. They’re improving, so watch for updates.
Upcoming:
-
Version 0.0.1.8 adds BiliBili and NetEaseMusic. -
More APIs and CLI improvements. -
Better CLI experience. -
Socket proxies, cookie pools, etc. -
WebAPI version. -
See discussions for full list.
Changelogs are in CHANGELOG.md.
Features and Tools by Platform
F2 organizes features per platform. Green means ready, yellow in progress, brown paused, blue future, red dropping.
Account types: Purple for login needed, black for no login.
Bark Features
Feature | Account Type | API Method | Status |
---|---|---|---|
Send notification (GET) | Unknown | fetch_bark_notification | Ready |
Send notification (POST) | Unknown | post_bark_notification | Ready |
Send encrypted notification | Unknown | cipher_bark_notification | Ready |
Tools:
Tool | Class | Method | Status |
---|---|---|---|
Manage client settings | ClientConfManager | – | Ready |
Generate random number bytes | – | generate_numeric_bytes | Ready |
DouYin Features
Feature | Account Type | API Method | Status |
---|---|---|---|
User info | Login/Guest | fetch_user_profile | Ready |
Single work (video, album, note) | Login/Guest | fetch_one_video | Ready |
Live album | Login/Guest | fetch_one_video | Ready |
Home works | Login/Guest | fetch_user_post_videos | Ready |
Liked works | Login/Guest | fetch_user_like_videos | Ready |
Collection folder works | Login/Guest | fetch_user_collects_videos | Ready |
Collected works | Login | fetch_user_collection_videos | Ready |
Collected music | Login | fetch_user_music_collection | Ready |
Collected collections | Login | fetch_user_mix_collection | Future |
Collected series | Login | fetch_user_series_collection | Paused |
Collection works | Guest | fetch_user_mix_videos | Ready |
Home feed works | Login/Guest | fetch_user_feed_videos | Ready |
Similar recommended works | Guest | fetch_related_videos | Ready |
Live room info (stream download) | Guest | fetch_user_live_videos, fetch_user_live_videos_by_room_id | Ready |
Live chat payload | Guest | fetch_live_im | Ready |
Live chat messages | Guest | fetch_live_danmaku | Ready |
Query user basic info | Login/Guest | fetch_query_user | Ready |
Followed users live | Login/Guest | fetch_user_following_lives | Ready |
Following user info | Login/Guest | fetch_user_following | Ready |
Follower user info | Login/Guest | fetch_user_follower | Ready |
Following user works | Login/Guest | fetch_user_following_videos | Paused |
Follower user works | Login/Guest | fetch_user_follower_videos | Paused |
Friend works | Login | fetch_friend_feed_videos | Ready |
Increase play count | Login/Guest | fetch_post_stats | Ready |
Search videos | Guest | fetch_search_videos | Future |
Search users | Guest | fetch_search_users | Future |
Search lives | Guest | fetch_search_lives | Future |
Suggested searches | Guest | fetch_search_suggest | Paused |
Hot searches | Guest | fetch_hot_search | Paused |
Work comments | Login/Guest | fetch_video_comments | Future |
Watch history | Login | fetch_user_history_read | Paused |
Watch later | Login | fetch_user_watch_later | Paused |
Tools for DouYin:
Tool | Class | Method | Status |
---|---|---|---|
Manage client settings | ClientConfManager | – | Ready |
Generate real msToken | TokenManager | gen_real_msToken | Ready |
Generate fake msToken | TokenManager | gen_false_msToken | Ready |
Generate ttwid | TokenManager | gen_ttwid | Ready |
Generate webid | TokenManager | gen_webid | Ready |
Generate verify_fp | VerifyFpManager | gen_verify_fp | Ready |
Generate s_v_web_id | VerifyFpManager | gen_s_v_web_id | Ready |
Generate live signature | DouyinWebcastSignature | get_signature | Ready |
Generate Xb from endpoint string | XBogusManager | str_2_endpoint | Ready |
Generate Xb from model | XBogusManager | model_2_endpoint | Ready |
Generate Ab from endpoint string | ABogusManager | str_2_endpoint | Ready |
Generate Ab from model | ABogusManager | model_2_endpoint | Ready |
Extract single user ID | SecUserIdFetcher | get_sec_user_id | Ready |
Extract list user IDs | SecUserIdFetcher | get_all_sec_user_id | Ready |
Extract single work ID | AwemeIdFetcher | get_aweme_id | Ready |
Extract list work IDs | AwemeIdFetcher | get_all_aweme_id | Ready |
Extract single collection ID | MixIdFetcher | get_mix_id | Ready |
Extract list collection IDs | MixIdFetcher | get_all_mix_id | Ready |
Extract single live room ID | WebCastIdFetcher | get_webcast_id | Ready |
Extract list live room IDs | WebCastIdFetcher | get_all_webcast_id | Ready |
Format file names globally | – | format_file_name | Ready |
Create user folder | – | create_user_folder | Ready |
Rename user folder | – | rename_user_folder | Ready |
Create or rename user folder | – | create_or_rename_user_folder | Ready |
Convert JSON lyrics to LRC | – | json_2_lrc | Ready |
TikTok Features
Feature | Account Type | API Method | Status |
---|---|---|---|
User info | Login/Guest | fetch_user_profile | Ready |
Single work | Login/Guest | fetch_one_video | Ready |
Home works | Login/Guest | fetch_user_post_videos | Ready |
Liked works | Login/Guest | fetch_user_like_videos | Ready |
Collected works | Login/Guest | fetch_user_collect_videos | Ready |
Playlists | Login/Guest | fetch_play_list | Ready |
Playlist works | Login/Guest | fetch_user_mix_videos | Ready |
Work search | Login/Guest | fetch_search_videos | Ready |
Live room info | Guest | fetch_user_live_videos | Ready |
Live chat payload | Guest | fetch_live_im | Ready |
Live chat messages | Guest | fetch_live_danmaku | Ready |
Check live status | Login/Guest | fetch_check_live_alive | Ready |
Tools for TikTok:
Tool | Class | Method | Status |
---|---|---|---|
Manage client settings | ClientConfManager | – | Ready |
Generate real msToken | TokenManager | gen_real_msToken | Ready |
Generate fake msToken | TokenManager | gen_false_msToken | Ready |
Generate ttwid | TokenManager | gen_ttwid | Ready |
Generate odin_tt | TokenManager | gen_odin_tt | Ready |
Generate Xb from endpoint string | XBogusManager | str_2_endpoint | Ready |
Generate Xb from model | XBogusManager | model_2_endpoint | Ready |
Extract single user ID | SecUserIdFetcher | get_secuid | Ready |
Extract list user IDs | SecUserIdFetcher | get_all_secuid | Ready |
Extract single unique user ID | SecUserIdFetcher | get_uniqueid | Ready |
Extract list unique user IDs | SecUserIdFetcher | get_all_uniqueid | Ready |
Extract list secUid | SecUserIdFetcher | get_all_secUid | Ready |
Extract single work ID | AwemeIdFetcher | get_aweme_id | Ready |
Extract list work IDs | AwemeIdFetcher | get_all_aweme_id | Ready |
Generate device ID | DeviceIdManager | gen_device_id | Ready |
Generate device ID list | DeviceIdManager | gen_device_ids | Ready |
Format file names globally | – | format_file_name | Ready |
Create user folder | – | create_user_folder | Ready |
Rename user folder | – | rename_user_folder | Ready |
Create or rename user folder | – | create_or_rename_user_folder | Ready |
Twitter Features
Feature | Account Type | API Method | Status |
---|---|---|---|
Post details | Login/Guest | fetch_tweet_detail | Ready |
User info | Login/Guest | fetch_user_profile | Ready |
Home posts | Login/Guest | fetch_post_tweet | Ready |
Liked posts | Login | fetch_like_tweet | Ready |
Bookmarked posts | Login | fetch_bookmark_tweet | Ready |
Tools for Twitter:
Tool | Class | Method | Status |
---|---|---|---|
Manage client settings | ClientConfManager | – | Ready |
Extract unique user ID | UniqueIdFetcher | get_unique_id | Ready |
Extract list unique user IDs | UniqueIdFetcher | get_all_unique_ids | Ready |
Extract post ID | TweetIdFetcher | get_tweet_id | Ready |
Extract list post IDs | TweetIdFetcher | get_all_tweet_ids | Ready |
Format file names globally | – | format_file_name | Ready |
Create user folder | – | create_user_folder | Ready |
Rename user folder | – | rename_user_folder | Ready |
Create or rename user folder | – | create_or_rename_user_folder | Ready |
Extract post text | – | extract_desc | Ready |
WeiBo Features
Feature | Account Type | API Method | Status |
---|---|---|---|
User info | Login/Guest | fetch_user_info | Ready |
User details | Login/Guest | fetch_user_detail | Ready |
Home posts | Login/Guest | fetch_user_weibo | Ready |
Post details | Login/Guest | fetch_weibo_detail | Ready |
Tools for WeiBo:
Tool | Class | Method | Status |
---|---|---|---|
Manage client settings | ClientConfManager | – | Ready |
Generate visitor cookie | VisitorManager | gen_visitor | Ready |
Extract post ID | WeiboIdFetcher | get_weibo_id | Ready |
Extract list post IDs | WeiboIdFetcher | get_all_weibo_id | Ready |
Extract user ID | WeiboUidFetcher | get_weibo_uid | Ready |
Extract list user IDs | WeiboUidFetcher | get_all_weibo_uid | Ready |
Extract user name | WeiboScreenNameFetcher | get_weibo_screen_name | Ready |
Extract list user names | WeiboScreenNameFetcher | get_all_weibo_screen_name | Ready |
Format file names globally | – | format_file_name | Ready |
Create user folder | – | create_user_folder | Ready |
Rename user folder | – | rename_user_folder | Ready |
Create or rename user folder | – | create_or_rename_user_folder | Ready |
Extract post text | – | extract_desc | Ready |
For code examples, check the API guide at f2.wiki/guide/api-examples.
Visual Examples of F2 in Action
Seeing it work helps. Here are screenshots.
Bark Examples
GET notification:
Notification view:
POST notification:
Encrypted notification:
DouYin Examples
Single work:
Home works:
Liked works:
Collected works:
Collection folder:
Collected music:
Collection works (from any link):
Collection link:
Single live:
Batch live:
Related recommendations:
Friend works:
Live chat:
TikTok Examples
Single work:
Home works:
Liked works:
Collected works:
Playlist works:
Work search:
Live chat similar to DouYin.
Twitter Examples
Single post:
Home posts:
Liked posts:
Bookmarked posts:
WeiBo Examples
Single post:
Home posts:
Project Layout
F2’s structure is organized for easy navigation. It includes folders for docs, core code, tests, and more. Key parts are the apps directory with platform modules, conf for settings, and utils for shared tools.
Sponsors and How to Contribute
TikHub sponsors F2, offering data APIs. Sign up with referral 6hLcGD94 for extra credit.
To contribute, read the guide. Submit issues or code changes.
Thanks to tools like Python, click, rich, httpx, and others for making F2 possible.
Rules and License
Follow crawling rules—no illegal use. Don’t share personal data. Apache-2.0 license. For business use, link to the repo and keep copyrights.
Contact
Email support@f2.wiki or join Discord for questions about F2.
Common Questions
How do I fix TikTok 403 errors?
Update to v0.0.1.6-pw2 or later, as it’s fixed there.
Where can I find more examples?
In the snippets folder or API guide.
Does F2 need login for everything?
No, only for private content; public stuff works without.
How to enable notifications?
Set enable_bark to true and configure Bark app.
What’s the best way to debug?
Use logging or debug scripts from snippets.
Can I add more platforms?
Yes, it’s designed to expand—check dev guide.
This covers F2 thoroughly. If it fits your needs, give it a try.