> **Note**
>
> Unlike the TypeScript SDK there is **no separate `MemWalManual` class** in Python. The Python SDK is relayer-backed for the standard `remember` / `recall` flow. The "manual" methods are lower-level entry points on the same `MemWal` / `MemWalSync` client for callers that already have a vector and Seal-encrypted bytes.
Use these when you want to control indexing or do your own vector math. For the standard flow, prefer [`remember` / `recall`](/walrus-memory/python-sdk/usage/memwal).

## `embed`

Compute the embedding vector for text without storing anything.

[Source: python-sdk/usage/memwal-manual.md](https://github.com/MystenLabs/MemWal/blob/dev/docs/python-sdk/usage/memwal-manual.md)

```python
from memwal import MemWal

memwal = MemWal.create(key="...", account_id="0x...", env="prod")

vec = await memwal.embed("User prefers dark mode.")
print(len(vec.vector))
```

## `remember_manual`

Send base64 Seal-encrypted bytes plus a pre-computed vector. The relayer uploads the ciphertext to Walrus and stores the `{blob_id, vector, owner, namespace}` mapping.

[Source: python-sdk/usage/memwal-manual.md](https://github.com/MystenLabs/MemWal/blob/dev/docs/python-sdk/usage/memwal-manual.md)

```python
from memwal import RememberManualOptions

result = await memwal.remember_manual(
    RememberManualOptions(
        encrypted_data="<base64-seal-ciphertext>",
        vector=vec.vector,
        namespace="chatbot-prod",   # optional; falls back to client default
    )
)
print(result.id, result.blob_id, result.owner, result.namespace)
```

## `recall_manual`

Search with a pre-computed query vector. Returns `{blob_id, distance}` hits only, no decrypted text (you fetch/decrypt the blobs yourself).

[Source: python-sdk/usage/memwal-manual.md](https://github.com/MystenLabs/MemWal/blob/dev/docs/python-sdk/usage/memwal-manual.md)

```python
from memwal import RecallManualOptions

q = await memwal.embed("What do we know about this user?")
hits = await memwal.recall_manual(
    RecallManualOptions(vector=q.vector, limit=5, namespace="chatbot-prod")
)
for hit in hits.results:
    print(hit.blob_id, hit.distance)
```

## When to use which

| You have… | Use |
| --- | --- |
| Plain text, want it stored | `remember` / `remember_and_wait` |
| Plain text, want only the vector | `embed` |
| A vector + Seal-encrypted bytes | `remember_manual` |
| A query vector, want raw hits | `recall_manual` |
| Plain query text, want decrypted matches | `recall` |

All four manual entry points exist on both `MemWal` (async) and `MemWalSync` (sync) with identical signatures.