Skip to content

Conversation

@orev7s
Copy link

@orev7s orev7s commented Jan 20, 2026

Summary

Implements device fingerprint isolation per account to reduce detection by Google's anti-fraud systems. Each account now has unique device identifiers making them appear as separate devices, which helps minimize rate limiting.

Closes #159

Changes

Backend: Device Fingerprint Module (src/fingerprint/)

  • generator.js: Core fingerprint generation with randomized values
    • generateFingerprint(): Creates random device fingerprints
    • collectCurrentFingerprint(): Captures real system fingerprint
    • buildFingerprintHeaders(): Converts fingerprint to HTTP headers

Account Storage Integration

  • Auto-generates fingerprints for accounts on first load
  • Persists fingerprints to accounts.json
  • Added regenerateFingerprint(email) and getFingerprint(email) methods to AccountManager

Request Headers Applied Per-Account

Header Description
User-Agent Randomized Antigravity version + OS/arch
X-Goog-Api-Client Randomized SDK client identifier
Client-Metadata Randomized IDE type and platform
X-Goog-QuotaUser Unique quota user per account
X-Client-Device-Id Unique device UUID per account

WebUI API Endpoints

  • POST /api/accounts/:email/fingerprint/regenerate - Regenerate single account
  • GET /api/accounts/:email/fingerprint - Get fingerprint details
  • POST /api/accounts/fingerprints/regenerate-all - Regenerate all fingerprints

WebUI Frontend

  • Added "Regen All FP" button in accounts header
  • Added Fingerprint column showing truncated device ID (clickable)
  • Added Fingerprint details modal with Device ID, User Agent, Created date
  • Added Regenerate button in modal for individual accounts

Screenshots

The Accounts page now shows a Fingerprint column. Clicking it opens a modal with full details and a regenerate option.

Test plan

  • Start server and verify existing accounts get fingerprints auto-generated
  • Check accounts.json to confirm fingerprints are persisted
  • Open WebUI → Accounts and verify Fingerprint column appears
  • Click a fingerprint to view the details modal
  • Click "Regenerate" and verify the device ID changes
  • Click "Regen All FP" button and verify all fingerprints update
  • Make API requests and verify different accounts send different headers

🤖 Generated with Claude Code

orev7s and others added 2 commits January 21, 2026 00:05
Implements device fingerprint isolation per account to reduce detection
by Google's anti-fraud systems. Each account now has unique device
identifiers making them appear as separate devices.

## Changes

### New Module: src/fingerprint/
- generator.js: Core fingerprint generation with randomized values
  - generateFingerprint(): Creates random device fingerprints
  - collectCurrentFingerprint(): Captures real system fingerprint
  - buildFingerprintHeaders(): Converts fingerprint to HTTP headers
- index.js: Public API exports

### Account Manager Updates
- Auto-generates fingerprints for accounts on first load
- Persists fingerprints to accounts.json
- Added regenerateFingerprint(email) method
- Added getFingerprint(email) method
- getStatus() now includes fingerprint summary

### Request Headers Applied Per-Account
- User-Agent: Randomized Antigravity version + OS/arch
- X-Goog-Api-Client: Randomized SDK client identifier
- Client-Metadata: Randomized IDE type and platform
- X-Goog-QuotaUser: Unique quota user per account
- X-Client-Device-Id: Unique device UUID per account

### WebUI API Endpoints
- POST /api/accounts/:email/fingerprint/regenerate
- GET /api/accounts/:email/fingerprint
- POST /api/accounts/fingerprints/regenerate-all

Closes badrisnarayanan#159

Co-Authored-By: Claude <noreply@anthropic.com>
- Add "Regen All FP" button in accounts header to regenerate all fingerprints
- Add Fingerprint column showing truncated device ID with click-to-view
- Add fingerprint details modal with device ID, user agent, and created date
- Add regenerate button in modal to refresh individual account fingerprint
- Add JS methods: regenerateFingerprint(), regenerateAllFingerprints(), openFingerprintModal()

Co-Authored-By: Claude <noreply@anthropic.com>
@tiagonrodrigues
Copy link
Contributor

This would be awesome.

@orev7s
Copy link
Author

orev7s commented Jan 21, 2026

and btw this worked perfectly.

@Jeeltilva
Copy link

@badrisnarayanan can we have this merged into package. Seems like this is really needed now.

@badrisnarayanan
Copy link
Owner

@orev7s thanks man, hope this fixes. can you resolve the conflicts, also

Question: Why does one have to regenerate fingerprints in dashboard? Can it be randomised in the code itself? I'm not a fan of having regeneration and all that logic in the frontend stuff. Why does one need to config in dashboard for regenerating?

@orev7s
Copy link
Author

orev7s commented Jan 22, 2026

@orev7s thanks man, hope this fixes. can you resolve the conflicts, also

Question: Why does one have to regenerate fingerprints in dashboard? Can it be randomised in the code itself? I'm not a fan of having regeneration and all that logic in the frontend stuff. Why does one need to config in dashboard for regenerating?

because sometimes the new fingerprints might not work so having them in the frontend can help people just regenerate

@badrisnarayanan
Copy link
Owner

@orev7s how sucessful / reliable has this been to you? Percentage of improvement/ error reduction rate.

Also, could you ask people to test your branch and see the wider consensus? If it's considered a big improvement by multiple people then we can safely merge this.

Appreciate taking this up!

@badrisnarayanan
Copy link
Owner

Also, I will just wait for a while, the 429s seem to be a google issue, and not the issue with proxies. Google should be fixing it

@orev7s
Copy link
Author

orev7s commented Jan 22, 2026

@orev7s how sucessful / reliable has this been to you? Percentage of improvement/ error reduction rate.

Also, could you ask people to test your branch and see the wider consensus? If it's considered a big improvement by multiple people then we can safely merge this.

Appreciate taking this up!

it has brought the rate limiting down to 0% on around 4 pro accounts and 30 free ones. and sure ill let people know

@rmffo
Copy link

rmffo commented Jan 23, 2026

i tried yours @orev7s , but 429 is still there. is there something i must do? what i did was "Regenerate all FP" from dashboard, but it seems dont work because the Fingerprint column dont show any value as you said 'hashed string trimmed'.
image

@rmffo
Copy link

rmffo commented Jan 23, 2026

image

see image above, it dont show any FP generated hash string. Ignore the "OFFLINE" status, my try is before i was stopping the program

@rmffo
Copy link

rmffo commented Jan 23, 2026

i tried yours @orev7s , but 429 is still there. is there something i must do? what i did was "Regenerate all FP" from dashboard, but it seems dont work because the Fingerprint column dont show any value as you said 'hashed string trimmed'. image

Or maybe i try in the wrong time, because it really is a Google side problem. My Antigravity IDE is loading too much, so slow

@ombhut175
Copy link

@orev7s i have tried this branch locally and even after reg fingerprint many times it is the same issue

@divyviradiya2
Copy link

Also, I will just wait for a while, the 429s seem to be a google issue, and not the issue with proxies. Google should be fixing it

Also Error 401 From Google Itself , We have to Fix That Error , 401 error is spamming

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE] device fingerprint binding (it will remove the rate limits)

7 participants