> ## Documentation Index
> Fetch the complete documentation index at: https://docs.facebetter.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Referência da API

> API do Facebetter Flutter SDK 2.0

<Note>
  Esta página corresponde ao SDK **2.0.0**. Classe: **`FBEngine`**. Enums de maquiagem / remodelagem: [Enums de parâmetros](/pt-BR/intro/makeup). Autenticação: [Autenticação e licença](/pt-BR/intro/license).
</Note>

```yaml theme={null}
dependencies:
  facebetter_flutter: ^2.0.0
```

```dart theme={null}
import 'package:facebetter_flutter/facebetter_flutter.dart';
```

## FBEngineConfig

```dart theme={null}
const FBEngineConfig({
  String? appId,
  String? appKey,
  String? licenseToken,
  bool enableLandmarks = false,
  bool externalContext = true,
  String? resourcePath,
});
```

Crie com `appId` + `appKey`, ou `licenseToken`. Se `licenseToken` não estiver vazio, ele é usado e o `appId` / `appKey` online é ignorado.

## FBEngine

```dart theme={null}
static Future<FBEngine> create(FBEngineConfig config)
static String get version
static void setLogConfig({
  bool console = true,
  bool file = false,
  FBLogLevel level = FBLogLevel.info,
  String fileName = '',
})
void dispose()
```

Crie uma instância com `FBEngine.create`. Não é um singleton de processo. No máximo um mecanismo com `externalContext: true` pode ficar vinculado a `processTexture` por vez.

Beleza / remodelagem / maquiagem / chroma / desfoque / `clear*` / `setFilterIntensity` são **síncronos**. Filtro, adesivo, **imagem** de fundo e APIs de foto retornam **`Future`**.

### Pele

`setSmoothing`, `setSmoothingStyle(FBSmoothingStyle)`, `setWhitening`, `setWhiteningStyle(FBWhiteningStyle)`, `setSharpening`, `setRosiness`, `setBeautySkinOnly(bool)` — intensidade `[0, 1]`.

### Remodelagem

`setReshape(FBReshape param, double intensity)` — **`[-1.0, 1.0]`**. Nomes Dart: `FBReshape.faceThin`, `faceVShape`, … `browThickness`. Tabelas: [Enums de parâmetros](/pt-BR/intro/makeup).

### Remodelagem corporal

`setBodyReshape(FBBodyReshape param, double intensity)` — **`[0.0, 1.0]`**. Nomes Dart: `FBBodyReshape.bodySlim` … `torsoLong`. Registre `resource_body.fbd` com `addResourcePack` primeiro. Tabelas: [Enums de parâmetros](/pt-BR/intro/makeup). Pacotes: [Pacotes de recursos opcionais](/pt-BR/intro/resource-packs).

### Maquiagem

| Intensidade    | Estilo / cor                             |
| -------------- | ---------------------------------------- |
| `setLipstick`  | `setLipstickColor(FBLipstickColor)`      |
| `setBlush`     | `setBlushStyle`, `setBlushColor`         |
| `setContour`   | `setContourStyle`                        |
| `setEyeShadow` | `setEyeShadowStyle`, `setEyeShadowColor` |
| `setEyeLiner`  | `setEyeLinerStyle`, `setEyeLinerColor`   |
| `setEyebrow`   | `setEyebrowStyle`, `setEyebrowColor`     |
| `setEyelash`   | `setEyelashStyle`, `setEyelashColor`     |
| `setPupil`     | `setPupilColor`                          |

### Filtro / adesivo / fundo virtual / chroma

```dart theme={null}
Future<void> setFilter({String? path, Uint8List? data})
void clearFilter()
void setFilterIntensity(double intensity) // [0, 1]

Future<void> setSticker({String? path, Uint8List? data})
void clearSticker()

Future<void> addResourcePack({String? path, Uint8List? data})
Future<void> set3DSticker({String? path, Uint8List? data})
void clear3DSticker()

void setVirtualBackgroundBlur(double level) // [0, 1]; 0 clears
Future<void> setVirtualBackground({String? path, Uint8List? data})
void clearVirtualBackground()

void setChromaKey(FBChromaKeyColor color)
void clearChromaKey()
void setChromaKeySimilarity(double value)
void setChromaKeySmoothness(double value)
void setChromaKeyDesaturation(double value)
```

`path` e `data` são mutuamente exclusivos; exatamente um é obrigatório. Para adesivos 3D e remodelagem corporal, veja [Pacotes de recursos opcionais](/pt-BR/intro/resource-packs).

### Foto

Exige `externalContext: false`. Lança `StateError` caso contrário. **Não use para vídeo de pré-processamento ao vivo.**

```dart theme={null}
Future<void> processFile({required String input, required String output, int quality = 90})
Future<FBBitmap> processImageBytes(Uint8List encoded)
Future<FBBitmap> processImageFile(String path)
Future<ui.Image> processImageToUiImage(Uint8List encoded)
```

### Observabilidade

```dart theme={null}
Stream<FBEngineEvent> get events
FBStats get stats
```

`FBStats`: `fps`, `avgProcessTimeMs`, `sessionTimeSeconds`.

`FBEngineEvent`: `code`, `message`, `eventCode` → `FBEngineEventCode`:

| Valor | Dart                           |
| ----- | ------------------------------ |
| `0`   | `licenseValidationSuccess`     |
| `1`   | `licenseValidationFailed`      |
| `100` | `engineInitializationComplete` |
| `101` | `engineInitializationFailed`   |

## FBException

Lançada quando uma chamada nativa retorna `< 0`.

| `code` | Significado                 |
| ------ | --------------------------- |
| `0`    | Sucesso (não lançado)       |
| `-1`   | Argumento inválido          |
| `-2`   | Não inicializado / disposed |
| `-3`   | Licença                     |
| `-4`   | Não suportado               |
| `-5`   | I/O                         |
| `-6`   | Sem slot (back-pressure)    |
| `-7`   | Falha no processamento      |
| `-8`   | Sem memória                 |

```dart theme={null}
} on FBException catch (e) {
  debugPrint('${e.operation} ${e.code} ${e.reason}');
}
```

## Outros tipos

* `FBBitmap` — `width`, `height`, `stride`, `pixels` (cópia RGBA8888)
* `FBLogLevel` — `trace` … `critical`

## Textura nativa (não Dart)

Depois de `create` com `externalContext: true`, chame no **thread GL do SDK do fornecedor**. Só um mecanismo ao vivo pode ficar vinculado; um segundo `create(externalContext: true)` lança até você dar `dispose()` no primeiro. Mecanismos de foto (`externalContext: false`) não vinculam.

* iOS: `[FacebetterPlugin processTexture:width:height:]`
* Android: `FacebetterPlugin.processTexture(textureId, width, height)`

Retorna `0` em caso de falha. Snippets completos: [Integração com terceiros](/pt-BR/flutter/third-party-integration).
