Account Settings
Described from the app's code of 2026-10-04 (commit ca1d157). One setting, Preferred Payout, is stored but has no effect yet.
The app has two kinds of setting that look alike on screen but live in different places. Everything under Settings is kept in the browser and never leaves it: language, currency, how artworks are drawn, what is filtered, which node is used. Everything under Edit profile is written to the chain, in the account's posting_json_metadata, where any program can read it. This page lists both, says where each is stored and what it does, and notes where the app's behaviour differs from what its labels suggest.
Where settings live
| Kind | Stored in | Travels with | Visible to |
|---|---|---|---|
| Settings (the gear) | The browser's local database, LacertaDB, document main_settings, one per browser profile (settings.js:292-321) |
Nothing: another browser or device starts from the defaults | You |
| Profile (Edit profile on your page) | The chain: the account's posting_json_metadata, written with account_update2 |
Every app that reads the chain | Everyone |
| Keys and session | The browser, encrypted with your password, until you log out (Keys and Recovery) | Nothing | You |
| Notification read marks, favourites, drafts | The browser, LacertaDB | Nothing | You |
The chain has no concept of a setting. Hive front ends sometimes store preferences in posting_json_metadata too; the Pixagram app stores none there.
Settings
Open them with the gear in the toolbar, or at https://pixagram.com/+settings. Each row is one control; the stored key and default are from the code.
Display
| Control (label) | Choices | Default | Stored as | Effect |
|---|---|---|---|---|
| Languages | 51 locale codes, served by 27 language files; a locale without a file falls back to English | The browser's language | locales |
The app's text. Posts are not translated. |
| Currency | 34 currencies | From the locale | currency |
The currency the wallet converts to, through Frankfurter's rates; PIXA itself has a placeholder price (Wallet Basics) |
| Rendering Engine | Square (square), Hexagon (hexagon), Retro (crt), Painting (xbrz), Painting (Fast) (tri) |
Painting | renderer |
How pixel art is scaled on screen; the stored image is unchanged |
| Disable GPU Optimization | on, off | on (mode: "CPU"); off stores GPU |
mode |
Draws with the processor instead of WebGL. The default is the processor; turning the switch off enables the GPU path. |
| Download File Format | PNG, WebP, JPEG | WebP | format |
The format of a downloaded artwork |
| PDF Default Page Size | A4, US Letter | A4 |
pdf_page_size |
For the wallet's PDF export and printed artworks |
Content
| Control | Default | Stored as | Effect |
|---|---|---|---|
| Don't filter NSFW content | off: "NSFW content is hidden" | nsfw_filter (true while filtering) |
On, artworks marked NSFW appear in feeds and profiles, blurred. |
| Don't blur NSFW content | off: "NSFW content shows blurred" | nsfw_enabled |
On, shown NSFW artworks are not blurred. Turning it on asks you to confirm "I am 18 or older" (SettingsDialog.js:282-290, 672-692). While blurring is on, an on-device model also blurs unflagged artworks it rates likely NSFW (Censorship Resilience and Moderation) |
| Toxic Comment Helper | on: "Kindly flags harsh wording while you type" | toxicity_enabled |
An on-device model underlines harsh wording in a comment before you post. It blocks nothing. |
The panel says of both models: they "run on tiny AI models that work fully offline … No data is ever sent to a server". The models are loaded with the app and run in the browser; the search box is the one feature that sends your text to a service (Search).
Posting and voting
| Control | Choices | Default | Stored as | Effect |
|---|---|---|---|---|
| Preferred Payout | Renounced, Balanced, Sovereign | Balanced (share) |
payout (decline, share, power) |
None today. The value is saved and read back by the dialog, and nothing else reads it; a post's payout options are set in the post editor's own panel (Posting and Rewards) |
| Licensing | Configure or reset a default licence | None: "new posts start from the standard Pixa NFT License terms" | default_license |
The starting terms the editor shows for a new post; the licence itself goes into the post's json_metadata only when you publish (Artwork Encoding Spec) |
| Voting Power | 1% to 100% | 100 | voting |
The weight of a vote cast by clicking the heart |
| Always ask before voting | on, off | off | askvote |
On, every vote opens a dialog to choose the weight first |
Endpoint
The Endpoint section lists the six public nodes with their measured latency and lets you set a custom one ("Set custom endpoint", "Type a URL, then press Enter or the check to switch to it").
| Behaviour | Detail |
|---|---|
| Default | api.pixagram.com. On first start, while no node has been chosen, the app times all six and keeps the fastest that answers (settings.js:330-372). |
| The six | api.pixagram.com, pixarex.net, merlion.surf, blockforge.lol, boitata.quest, pixa-dubai.xyz (constants.js:94-137; JSON-RPC Surface) |
| Custom | Any HTTPS address; it must run the same gateway or the app's field names fail (Differences from Hive) |
| Stored as | api_node_url and api_node_source |
There is no theme setting.
Your profile
Edit profile, on your own page, writes the profile object of your posting_json_metadata (EditProfileDialog.js:583-594, 960-986; Data Model):
| Field on screen | Stored key | Rule in the app | What Hivemind serves of it |
|---|---|---|---|
| Display name | profile.name |
free text | The first 20 characters |
| Biography | profile.about |
free text | 160 characters |
| Location | profile.location |
free text | 30 |
| Website | profile.website |
a valid URL | Up to 100 characters; longer, nothing |
| Profile picture | profile.profile_image |
A pixel-art file of at most 48,000 bytes, stored inside the metadata as a data URI, not uploaded anywhere (EditProfileDialog.js:773) |
Nothing. Hivemind keeps a picture only when it is an http(s):// address of at most 1,024 characters, so bridge.get_profile returns an empty profile_image for every Pixagram account; the app reads the picture from condenser_api.get_accounts instead (extract_profile_metadata.sql:110-115) |
| Addresses, links, contacts | profile.addresses, profile.links, profile.contacts |
lists of name and value pairs | Pixagram-only keys; other apps ignore them |
What the operation does and costs:
- One
account_update2operation, which merges the newprofileinto the existingposting_json_metadataso other keys survive, and re-sends the account'sjson_metadataunchanged (pixaproxyapi.js:5549-5590). - It asks for your active key, although the dialog first checks that your posting key is unlocked (
EditProfileDialog.js:925-931). The reason is the re-sentjson_metadata: anaccount_update2that carriesjson_metadataneeds the active authority, while one that carries onlyposting_json_metadataneeds posting (Operations Reference). Leavingjson_metadataout would let the profile be saved with the posting key. - It is public and permanent. Every version of the profile stays in the block log. Do not put a phone number or an address you would not print.
- No cover image. The dialog has no field for one, and the app shows none.
- Resource Credits: the operation's size, which the picture dominates: a 48,000-byte picture is about 64,000 bytes once encoded as a data URI, the largest routine operation an account sends after an artwork (Resource Credits).
Other apps that read Hive profiles through Hivemind (name, about, location, website, profile_image) will show a Pixagram profile cut to Hivemind's lengths and without its picture; an app that reads posting_json_metadata from hived gets everything, with a data-URI picture it may or may not render.
What the chain, the indexer and the app each decide
| Behaviour | Chain | Indexer | App |
|---|---|---|---|
| Profile fields' existence and content | yes, as metadata | ||
| Profile length limits, and the dropped picture | yes, when serving | ||
| Which key saves a profile | yes, by what the operation carries | yes, by what it sends | |
| Every setting under the gear | yes, per browser | ||
| NSFW filtering and the on-device models | yes |
Inherited → changed
| Aspect | Hive front ends | Pixagram |
|---|---|---|
| Profile storage | posting_json_metadata.profile |
the same keys, plus addresses, links, contacts |
| Profile picture | a URL | a data URI of pixel art, at most 48,000 bytes |
| Cover image | profile.cover_image |
none |
| Preferences on chain | some front ends keep them in posting_json_metadata |
none; all in the browser |
| NSFW setting | per user, often in the profile | per browser |
Sources
- App at commit
ca1d157: defaults and storage,utils/settings.js:292-321; the node race,settings.js:330-372; the node list,constants.js:94-137; currencies and locales,constants.jsandlocales/; the dialog,SettingsDialog.js; how the voting settings reach the API,Index.js:1588-1589; the profile dialog,EditProfileDialog.js; the broadcast,pixaproxyapi.js:5494-5590; English text,en.js:2622-2669. - Hivemind at commit
5765e21: profile field limits inhive/utils/account.py:80-89andextract_profile_metadata.sql:50-115; checked live withbridge.get_profileagainstcondenser_api.get_accountson 2026-10-08. - Chain: the authority
account_update2requires,hive_operations.hpp:74-110at48f75a2.