# Epic Fields field cube — FSIpzLlUZ4rxQTmbQcHBbA A single field's Sentinel-2 season, analysis-ready. Measured NDVI per pixel per pass, the scene classification beside it, and the weather over the same window. ## How this is published Every page below is plain text and self-describing: it carries its own grid, coordinate system, value mapping and checksums, so no page depends on another to be decoded. A page ends with `END txtraster/2`; one arriving without that line is incomplete. A standard-library reader is at https://epicfields.app/s/ai/txtraster.py — `hashlib` and `re`, no third-party packages. Rows carry an XOR checksum and each band of eight carries a parity row, so a single mistyped row is repairable and a page says which row it repaired. Two properties of most chat environments that bear on this. A code sandbox usually has no outbound network, so a page is fetched with a web tool and its text pasted into the sandbox rather than downloaded from inside it. And a fetch tool typically discards binary bodies, which is why nothing here is binary. If a table is easier than a raster, https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/all.json carries every table as one uncompressed JSON file, and the CSVs below need no library at all. ## The pages Every page is plain text, self-describing and independently complete. Fetch the one that matches the question; a monthly or season page answers most questions in ONE fetch, where walking the individual passes would be dozens. Decoder, standard library only: https://epicfields.app/s/ai/txtraster.py - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/season/mean` (17 KB) — per-pixel season mean NDVI — with CV, this is a zone map - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/season/cv` (17 KB) — per-pixel coefficient of variation — how unstable each pixel was - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/season/count` (17 KB) — how many passes contributed at each pixel - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/season/peak_index` (17 KB) — which pass peaked at each pixel (index into PASSES) - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/season/min` (17 KB) — per-pixel season minimum - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/season/max` (17 KB) — per-pixel season maximum - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2025-10` (28 KB) — per-pixel mean NDVI and COUNT for 2025-10 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2025-11` (28 KB) — per-pixel mean NDVI and COUNT for 2025-11 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2026-01` (28 KB) — per-pixel mean NDVI and COUNT for 2026-01 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2026-02` (28 KB) — per-pixel mean NDVI and COUNT for 2026-02 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2026-03` (28 KB) — per-pixel mean NDVI and COUNT for 2026-03 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2026-04` (28 KB) — per-pixel mean NDVI and COUNT for 2026-04 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2026-05` (28 KB) — per-pixel mean NDVI and COUNT for 2026-05 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2026-06` (28 KB) — per-pixel mean NDVI and COUNT for 2026-06 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2026-07` (28 KB) — per-pixel mean NDVI and COUNT for 2026-07 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2026-08` (28 KB) — per-pixel mean NDVI and COUNT for 2026-08 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2026-09` (28 KB) — per-pixel mean NDVI and COUNT for 2026-09 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/monthly/2026-10` (28 KB) — per-pixel mean NDVI and COUNT for 2026-10 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/pass/S2A_MSIL2A_20251106T185831_R113_T10SFH_20251106T215909` — one acquisition, native grid (PIXELS, FIELD_MASK, OBSERVED_MASK, SCL). 51 available; every id is listed in the PASSES header of any season or monthly page - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/passes.csv` (5 KB) — one row per pass: the season curve, spikes, the app's own numbers - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/weather.csv` (11 KB) — daily rain, reference ET and temperature - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/observations.csv` (4 KB) — every overpass including unusable ones, so gaps are visible - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/boundary.geojson` (402 B) — the field outline, EPSG:4326 - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/manifest.json` (6 KB) — grid, provenance and every caveat that changes a conclusion - `https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/summary.json` (288 B) — headline numbers ## Three things that change conclusions 1. **`believed` has three values, not two.** `yes` (tested against both neighbours), `untested` (an endpoint, so the spike rule could not run), and `no` (a spike, excluded from aggregates). Filtering `== 'yes'` silently drops the untested endpoints as well as the spikes; `!= 'no'` keeps them. 2. **Per-pass scalars are float; the per-pixel raster is 8-bit.** Use the scalars in `passes.parquet` for any per-pass number, and the raster for SPATIAL questions — where within the field, and how variable. 3. **`derived_daily.parquet` is MODELLED, not observed.** Kc interpolated between passes, from field-mean NDVI alone -- no crop type, no canopy height, nothing measured on the crop. `days_from_pass` gives the distance from each row to the nearest actual pass. ## What is NOT here NDVI, not surface reflectance. The pipeline reads B04, B08 and SCL only, so **NDRE and NDMI cannot be derived from anything in this cube.** There is no yield, soil, elevation or irrigation data, and no record of any management event — sowing, grazing, cutting, spraying, harvest or crop type. Nothing here distinguishes a cut from cloud, or an irrigation from rain. ## One acquisition, inline Per-pixel NDVI for a single pass, base64 uint8, checksummed. It is here so a reader that cannot fetch a second page still has real measurements; the same payload is at https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/raw_sample.json, and every other pass is listed above. Reader: https://epicfields.app/s/ai/raw_decode.py ``` BEGIN_EPICFIELDS_RAW_V1 {"schema":"epicfields.raw-text.v1","share_id":"FSIpzLlUZ4rxQTmbQcHBbA","pass_id":"S2C_MSIL2A_20260423T184921_R113_T10SFH_20260423T230910","acquired_at":"2026-04-23T18:49:21Z","band":"ndvi","believed":"yes","ndvi_mean_server":0.884982,"ndvi_mean_from_pixels":0.9007,"mean_note":"These two differ by design, not by error. ndvi_mean_server is the pipeline's figure and is what the Epic Fields app shows; its in-field pixel set is cut on a 4326 stats grid and reaches further past the boundary than the centre-in mask shipped here. ndvi_mean_from_pixels is what you will compute from these bytes under field_mask. Reproducing ndvi_mean_server from this export exactly is not possible; use ndvi_mean_from_pixels when checking your own decode.","grid":{"width":63,"height":80,"crs":"EPSG:32610","gdal_geotransform":[630840.0,10.0,0.0,4217580.0,0.0,-10.0],"origin":"outer upper-left pixel corner","array_order":"row-major"},"dtype":"uint8","value_mapping":{"formula":"ndvi = stored / 255","scale":0.00392156862745098,"offset":0.0,"encoder":"stored = floor(clip(ndvi * 255, 0, 255))","truncated_not_rounded":true,"true_value_interval":"[stored/255, (stored+1)/255)","negative_ndvi":"clipped to stored 0","nodata":null,"nodata_note":"There is NO in-band nodata value: 0 means NDVI <= 0, which is a real measurement. Use observed_mask to find pixels the satellite did not return."},"field_mask":{"dtype":"uint8","meaning":"1 = pixel centre inside the field boundary, 0 = outside","decoded_byte_count":5040,"decoded_sha256":"4ec0d6faa2278c2ac61d707acc6f5e7afc6e151c2e91551ccdfd86c3cefdd6e3","encoding":"rle","rle_note":"runs are [value, count] in row-major order; concatenating value repeated count times reproduces decoded_byte_count bytes","runs":[[0,349],[1,3],[0,58],[1,6],[0,55],[1,8],[0,53],[1,11],[0,50],[1,13],[0,47],[1,17],[0,44],[1,19],[0,42],[1,22],[0,39],[1,25],[0,36],[1,27],[0,33],[1,31],[0,30],[1,33],[0,28],[1,36],[0,25],[1,39],[0,22],[1,41],[0,23],[1,41],[0,22],[1,41],[0,23],[1,41],[0,22],[1,42],[0,22],[1,41],[0,22],[1,42],[0,22],[1,41],[0,23],[1,41],[0,22],[1,41],[0,23],[1,41],[0,22],[1,42],[0,22],[1,41],[0,23],[1,41],[0,22],[1,41],[0,23],[1,41],[0,22],[1,42],[0,22],[1,41],[0,22],[1,42],[0,22],[1,41],[0,23],[1,41],[0,22],[1,42],[0,22],[1,41],[0,22],[1,42],[0,22],[1,41],[0,22],[1,39],[0,25],[1,35],[0,29],[1,31],[0,32],[1,28],[0,36],[1,26],[0,37],[1,26],[0,38],[1,24],[0,40],[1,22],[0,41],[1,21],[0,43],[1,20],[0,43],[1,19],[0,45],[1,18],[0,45],[1,17],[0,47],[1,16],[0,48],[1,15],[0,48],[1,14],[0,50],[1,13],[0,50],[1,13],[0,51],[1,11],[0,53],[1,10],[0,53],[1,10],[0,54],[1,9],[0,54],[1,8],[0,56],[1,7],[0,56],[1,7],[0,57],[1,6],[0,58],[1,4],[0,59],[1,4],[0,60],[1,3],[0,60],[1,3],[0,61],[1,1],[0,62],[1,1],[0,278]]},"observed_mask":{"dtype":"uint8","meaning":"1 = the satellite returned this pixel, 0 = it did not","decoded_byte_count":5040,"decoded_sha256":"0347498b6c916c5a0117c1b56b62665234e8b4032d1fd8c075beb25152c29c0c","encoding":"constant","value":1},"pixels":{"dtype":"uint8","meaning":"NDVI, see value_mapping","decoded_byte_count":5040,"decoded_sha256":"8e1d1a89a897d35922afd0cf6231510db857b08a92e030041b7a7d92dc3e14fb","encoding":"base64","data_base64":"7+/t7e3t7+/v7+/v7+3mwaHR0cTG1tnZ2dvd4eHd1Mm9ycvDy83Nwa2TgYGUq8HP09PRycG2qaurtsPL2d3d7+/v7e3t7+/v7+/v7+3t3aa51M3N1NnW293b3d3Z1M2/v8G7yc2/oX+DlrG/xs3Z39nRycHJw8G9xNPT3ePh7+/v7e3v7+/v7+/v7+3t68ubzdnW2dbZ29vT1tvb2dG9tru9v6mPi6G5xsvNy8nZ39vRzcHG09TT1N3d5OPb7+/v7+/v7+/v7+/v7+3t7eOtq9TW1tbW2dnT09nT09HDu7OWmZ2xwcvP0c/JxMnU29bPy8G91t3W093h4+Pb7+/v7+/v7+/v7+/t6+nt7enTmcPZ2dTT2dbUxsS/xsOjiYmhscTL09PT0cbBv8vT1svDwbu/1N/d29/j4ebh8fHv7+/x7/Hx7+/t6+vt7e3ku6TW3dnW1tHErbO5o4F5jbTJyc/R1NPTy7uzucnT29HExL29zd3f3+Hh4eTh8fHx7+/x7/Hv7+3t7evp6+3r26a73dvU0c/GqZ+Gf4mrxtTZ0c3T1NPRzbmtv8HT2dvPy8bGxNTh493b39/b7+/x8e/x8e/v7evp6eTd5Ovr6cadxtHRy8GjjYSbs8bT2dvb09HN0dPTz8Gzu7/J1tnZ0b/GxMvd4dnW393U8fHx8fHv8e/t7ebj5t3T2+nt69+kpra0nY2LmbnP1tnb3d/d09PPzdHW08m/u73Ez9TZ06+0y8HL2d3b29/d8e/x8fHv7+/v7eHd3dvW2enr5tatkY+Jma+9w9TZ29vd4eHh29vWzcnU1M/Jv8HExs3R08G/0cO/0d/j39/h8fHx8e/v7+/v7eTj39/b1uHfyZ2NhpS909/W1uHh39vf4d/h4eHd0cTP1tPJvb3Bw8bG09vW0c3G0d3k4+Hj8fHv8e/x7+/v7+vt7ebhz8Gmi4ahvdHf4+Ph4+bk393f393f4+Ph28vJ09TLwbS0v8nJz9nf2dPZ3dvj5uTj8fHv7+/v7+/v7+3r5NS/nZaTpMbU3+Pj4+Pm5Obm5OPj4d3f4+Hh4dTJz9bUxrSxtMPGzdTh4dnf6ePh6eTk8fHv7+/v7+3t6+PTtJOElrTP3ePk5Obm5OTm5unp6ebp5OHh4+Hh393PydPZybuxrbnBy9Hf5OHd5unf4+Tk7/Hx7+/v7+nh0a2ThpOtz+Hk5ubm6enp5ubp6enp6enr6eTh4+Hf39/by8nWz8Ovs7vJ0c3b6ebh4enk4eTm7+/v7e3r4c2xjYuZts/b4+Tk5Onp6evp6enp6enp6enp6eTj5OHf393d2c3T1Maztr3R1M3U5unk3+br5Obm7e3r5t3Lr5aJlrbP093d4+bm5unr6+vp6enp6+np6evr6ebk4+Hf3dnZ39HL1M2/tL3E09PP3+bm5unr6+nm6+TWvZ+Wlp2pwdHR0d3h4+bm6enr6evp6evr6+vr6enp6ebm4+Hh4dnZ3dbJy9PNu7a/zdvZ2+Hm6enp6+vr07uflJ2mub/BxM/U29/j5Obp6+vr6e3p5u3t7evr6ebp6ebm5OTj4dvb29/Rwc/Twb/Dxtvj3eHm6+vr6+vro5+vv8PExsS/xtTd4+Pk6evr6+vr6+vr6evt7e3r6ebk5unp5uTj393d3d3ZycvUy8O7w9Tk5OPp6+vr7e3tjZSrxsvGxMTBy9Td5Obp6+vt7evt6+3r6evt7e3r5uTj5Onp5uTh4eTj3dvd0cbT1s/Bw9Tk6ebm6evr6+3tX1RmpMnEw8nR1t3h5unr6+3t7e3t7e3r4+vt7e3r6eTj5Onr6ebj4+Pj393d1MbJ1tnU09/k6ebm5unr6+3tSU1Seb3Lxsvb4ePm6e3t7e3t7evr6+vr4ent7e3r6ebm5unt6+nm5OPh4ePf283Ey9bb29/j5OTm5unr6+vtSU1PUZvLy9Hf5unr6+3t7evt7e3r6+vr5unt7e3r5ubm6enr7evp5ubj4+Pj39bJxtHZ2dvb3eHj5ubp6evrQkZJSWm209nh6evt7e3t7e3r7e3r6+3t6evt7e3r6enp6+vr7evm5OPh4ePj4eHTxM3W2dvZ3d3d4+bk6enrQUE/REmNzd3j6+3t7e3t7e3t6+vr7e3t6evt6+vr7evr6+vr6+3r5OHb3ePj4+TfzcHP3d3b29/d3d/h5unrREI7QUFdrdnj6e3t7e3r6+vr6+vt7e3r5uvt6+nr7e3r6+3r6+vt5uHh4ePj5OTj1sbN3d/f29/h2cTG0d3pRkQ7PT1LecTf5unr7e3r6evr7e3r6+vp6e3t6+vr7e3t7e3t6+vr6eTm5uTk5OPj4dHG2d/d29ndy6+mq8HfRkI9OT9ET5/U3+bp6+vp6+3r6+3r6enp6e3r6+vr7e3t7evr6+vr5uTm6ebk5OHh49vP0dnb3dbRvZ+TlKnET0ZGOTY/Rm+/2+Pp6enm5uvr7e3r6enr6+3t6+vr6+3t7e3r6+vp4+Tm6eTh4+Pj4+PbzdPd3dnNwaSPj5+pT0lLPzs9RE2Pz9vm6enm5Onr7evr6enr6+3t6+np6+3t7e3r7evp4+Pk5uTj5OTh4ePj08nb3dvUz7aTjZSWS0lGQjY7QkJdrdnj6enp6+vr6+3r6evm6e3t6+nm6evt7e3t7evr5uTk5Onm5ubj5OTj28vR3eHZyb2bjZGRS0tGRDk0PUFGecbh5uvr6+vr6+vr6+nh5O3r6enp6evt6+vr7evr6+nm5unm6ebm5OTk4dPJ2eHbyb2klpSbRkZESUE7MEFCUZ3Z5Onp6+vr6+nr6+Tb4evr6enp5unr6+3r7e3t7evr6enp5ubm5OTk49nL0d/dzbutoZmmOz1ERj85ND89QmbB4+br6+vt6+nr6eTj4ent6+nm5unr6+3r6+vr7evr7evr5uTm5OPj4d/Uzdnb0b+vpqmzOz9CRj80OTs9PUuR1OTr6+vr6+np6ebk4+nt6+vp5unr6+vt7evr6enr6+vr6enm5OPh4ePby83W0cS2r7TDQT1BP0E/OzQ/O0RhtNvk6+vr6+np6ebj4eTr7e3r6enp6+vt7evp6enp6+vr6enm5uPh4ePf1MnJy827r7TGRDtCQkFESzQ5Pz1Gg8vf5unr7evp5uPh4ePm6ebp6enp6evt7evt7e3r6+vr6+np5ubj4+Th39HDw8uzr7bJQT0/QUQ9Rj05Pz1CVJ/U4+nr7evp5tnd5OTp6+Tm6+vr6evt7e3t7e3t7evr6+np5ubk4+Pj5N3Jv8O7wcnTPzk9OTlBRkQ7Ozs/Rmu/4+vp6+vp5N3b5OTk5ubm6+vr6+vr7e/v7+/t7evr6+np5ubm4+Pj5OPUxMTN09PWPzlBOzlCRkQ2PUE9QU2T2ebp6+vp5uPj5ubk4+Tj5uvt7e3r7e3t7e3t7evr6enp6+nm5uTk4+TfzcbR1tPTOz09OTQ0P0Y/Pz85P0JfueHm6+vr5uTm5uvp5uTf3+nt7e3r6+3t7e3t7e3r6+vr6enm5ubk4eTj2cTP2dnZPUI9NjQrND8/QkQ9P0JGg83k6enr5unm5uvr6+nk5u3t7e3r6+vt7e3t7e3t6+vr6enp5uTm5OPk3dHPz9TUP0Q/OzQwMjtCRkZERDtEVqnf5unr6+nk5unm6+3r6+3t7evp6+vr7e3t7e3t6+vp6+vp5OPk5uTj39HGxMO/QkI/Pz0/NDI7QkJJS0RESXvN5Ovp6+nm6+nk6+3t7evr6+bm6+vr7e3t6+vr6+np6+vm49/h3dbPycOxpI1yQkFBOz0/NjA7PUJGRERERFSh2enr6+3r6+vr7e/v7e3t7evp6evr7e3t6+Tk6+vr6evm4dPNxLOplIZvVlFRQT9CQkI9OzRBPz9BQktLSURtveHp6+3t7e3t7e3t7e/t7e3p6evt7e3p5NbU5Ovr5uHWvamZj3RfVEZJS1RmREJEQj09PT8/QT1BP0RJRkJRj9Pm6+3t7e3t7e3t7e/v7e3t6+3t7evj3dbU4ebj07upiWtbTUZCS1RkdnaURkJBPTtBP0RBQTs/OUFJRkZGYbTf6e3t7e3t7e3t7+/t7e3r6+3t7evp6eTf3d3PpoZkT0RESVRreYmBf2RpRklBP0JCPUFERkI/QkRGTUlCSYPL5u3t7e3t7e3t7e3t6+3r6+3t7e3t7evk28Sre11JP1JkeX+EaVs/IiAWRkJBQkE/Oz9EP0ZGRkQ/SUZERFum2+nt7e3t7e3t7e3t6evr6+vr7e3r6enhy6Z9VkJEYX+BdD0yIAsSDQASST1NRkE9OztBQkZGREJBQkFEQkl2xOTr7e/t7e3t6+3t6+vr6+vt7evm4+PUpH9ZRE1mhG07GR0GDxYAAAAAQUZEREFCQT8/PUJJRkRBQj8/RkJZndvp7e3t7e3t6+vt7e3t7e3t7evj39S0f19JUWRySR8SKx0gAAAAAAAAXUtNQT9CRkRGPURNS0lBPz9BQUJNacPk6+3t7e3t6+vr7e3t7e3t7evm38OUZEZRZmk/FBsfLQAAAAAAAAAAeUtNQklBRkFJREZCREZCQUFCRE1JT4/U6evt7e3t7e3t7e3t7e3t7evp2a10UUFpaTkSJCYWAAAAAAAAAAAAhGJNRktBQUJBREJCQkRERkI/QkRLSWGz3+nt7e3t7e3t7e3t7e3t7evky5NZRk9vPxkPNAAAAAAAAAAAAAAAcoNWTUtBQUQ9P0JCPz9BP0FBPz9PSUuBzeTr6+vt6+vr6+vr7e3r6+nZr29ES19EFhIWAAAAAAAAAAAAAAAAYY+BUk09Pz07O0FCPz8/QUJEP0FJS0lZo9nm6enr6+vr7evr6+3r6ePLiVY7UmYWEBIGAAAAAAAAAAAAAAAAYn+LVEZBST0/QT8/PT9BRERJSURBSUZJccHh5OTp6+nr6+vr7e3r6d20ZkY7Yk8CGQAAAAAAAAAAAAAAAAAAhl+GcUtGQUFCQkI/PUFBQkRCRkZEQktGUpbT4+Tm6enr6+vr7evp5NGUUTs/XSkAJAAAAAAAAAAAAAAAAAAAsX9yf11EQj89P0Q/PTtBQkJBQkRERk1JRmK73ePm6enp6enr6+vp3710RDtJORsAMAAAAAAAAAAAAAAAAAAAxq+Re31JTUFBP0I7Pz9BPz0/QkJGTURJRk2N0d3m6ebk5ubp6+vp1qtdPzlNKRkACQAAAAAAAAAAAAAAAAAAycO2gXtRRkY/PTs5P0E/Pz1BQUFGREJJRkZbr9vm6+nk5Obr6enkzZZNPTlSHQQAAAAAAAAAAAAAAAAAAAAAxMPDo2ltTUZCQjs5QkE/QkE/PUFCQkRCS0ZJfcvj6+vm5Obp5uThw39EPUFWIAAAAAAAAAAAAAAAAAAAAAAAxMHBtoFvZklJRD0/QkE9PTs9Pz8/RkJERElEUqPZ5unm5ubp5uTdtmtBPVJiGwAAAAAAAAAAAAAAAAAAAAAAvba7uaNyeV9JRkE/Pz89OTY7QUFERkRLQkZCSW2/4ebk5unp5uTZo1ZCO2FdDQYAAAAAAAAAAAAAAAAAAAAAramtsa+TcmlLTUY/PUJBPz8/P0FJRkFCP0ZJRE+W1OTp5unp5uHRkU1EPWRSBhIAAAAAAAAAAAAAAAAAAAAAraSmq6+meXJZREREO0JBP0RCPT9CQURCP0JGREZitN3m5uvp49u/fUtCPVs9CQ0AAAAAAAAAAgAAAAAAACAdpqmrq6+vn312UkRJPzk7PTk5PT8/QUZGQj0/QklLhsvf6enk3c+paUlCRl0wEAAAAAAAAAAAAAAAAAAAAEFbqautrba2sY95bU1GQjI7QT0/PT0/QklBQjs2QURLX63W5Obh2cOdaU0/UWsmFgAAAAAAAAAAAAAAAAAAf3lNra2trbO2tq2De1tRRj0/QkE/OT9EREY9REQ5O0RPVHvE2eHf08GWXU9BVmQdEAAAAAAAAAAAAAAAAABfqaRysa+rsbGxu72bfW1NSUE/QUI/O0FEQkFCSUs9NkJLT1uh0d3Zz7+GWVFBX10WAAAAAAAAAAAAAAAAAACEtrOEsbGztK2vu8G2hnZUQUQ/PUFBP0FBQT9CQkQ/OT9JUlJyw9vW0bZyVk9EaVQbAAAAAAAAAAAAAAAAAACEqZtpubaxq6m0tLGteW1xRkE/PTs9PUJCQkJCQkRCPT9LTVFZmdPWz6RmW0lJeVsZAAAAAAAAAAAAAAAAAAA9mXt9ubGrq62poYt7Uk9xYT9BRkFCOT9CP0REQUk/P0FGS1Jba7bRxJNfVkFPfVQJAAAAAAAAAAAAAAAAAEFyUYGGtrOrrauUhnRPP0JdbUlERkFBPz89OTlBQkQ9P0FJSU9bYo3Bu31SRj1beUEAAgAAAAAAAAAAAAAAAFmUYnRrr62xrZl7cVRJPUFEaWZCPz1BQkE/PTlCQkJBPUJJTVJpa329qWFJNkJraSAACQAAAAAAAAAAAAAAAF95dHYtr7G0nX9pUkRBOzk7TXFJNkE9PUREQj87OT9BPT9GUVZhbaS7dFFCO1l0PQ0AAAAAAAAAAAAAAAAPAFZSFhkdtLGpk4tfS0JBPzY7PWtkP0E/QT9CPUY5OUQ/O0RLVlZ9qbaPUUY9SW9WDwYAAAAAAAAAAAAAAAQAAAAAAAAAu7mrkYRZRjk7PT87O0l0aUE9PTlCQUE7PT85Qk1ZX5S0u59rUUE9WWkfBAAAAAAAAAAAAAAAcpMAAAAAAAAA","sample_count":5040},"complete":true} END_EPICFIELDS_RAW_V1 ``` ## Disclaimer Epic Fields publishes this cube as measurements and clearly-labelled derivations. Any description, diagnosis, recommendation or conclusion drawn from it -- by an AI assistant or by anyone else -- is the work of whoever produced it and not of Epic Fields. Language models routinely produce fluent, specific and confident statements that the underlying data does not support: dates that are not in the record, events that were never observed, and figures that were never computed. This has already been observed with this data. Every number an assistant cites should be locatable in passes.parquet, weather.parquet or derived_daily.parquet; anything that cannot be found there was not measured here. Epic Fields makes no warranty of fitness for any purpose and accepts no liability for decisions taken on the basis of this data, or of anything generated from it. ## Attribution Contains modified Copernicus Sentinel data. Field cube by Epic Fields (epicfields.app). If you produce a report, chart or presentation from this, carry that attribution into it. Full guide: https://epicfields.app/s/ai/guide · Column dictionary: https://epicfields.app/s/ai/schema.json Licence: https://epicfields.app/s/ai/licence.txt Field area 18.03 ha · 51 usable passes of 86 overpasses · 2025-10-20 to 2026-10-15 · longest gap 45 days ## Per-pixel rasters as one file The per-pixel data is not on this page. It is one JSON file, the same bytes as all.json listed above: https://epicfields.app/s/FSIpzLlUZ4rxQTmbQcHBbA/ai/download It is served as a download rather than a page. Most chat environments can read a file a person attaches to the conversation, but cannot fetch one from inside their code sandbox, which has no outbound network. So for pixel-level work the practical route is for the file to be downloaded and attached here; everything else on this page needs no attachment.